Помогите плиз, не пойму, как мне повесить слушалку на
$(document).on('touchstart')
в методе init
где в роли selector выступает this
?
Явное указание селектора типа .item
- все отлично, с this
не пашет.
Есть ли решение какое?
Мой мини плагин
(function($)
{
// значения по умолчанию
var defaults =
{
touchduration: 200,
touch: function(){ alert("Touch"); return false; },
longtouch: function(){ alert("Long touch"); return false; }
},
timerInterval,
leftTimer,
_this;
var methods =
{
init: function(params)
{
var options = $.extend({}, defaults, params),
init = $(this).data('fctouch');
if(init)
return this;
else
{
_this = this;
$(_this).data('options', options);
/* Проблемное место */
$(document)
.css({ "-ms-user-select": "none", "-moz-user-select": "none", "-khtml-user-select": "none", "-webkit-user-select": "none" })
.on('touchstart', _this, function() { touchstart() } )
.on('touchend', _this, function() { touchend() } );
return $(this);
}
},
// Уничтожить
destroy: function()
{
$(_this).off().removeData();
}
};
// Таймер
function timer(interval)
{
interval--;
leftTimer = interval;
if(interval >= 0)
{
timerInterval = setTimeout(function()
{
timer(interval);
});
}
else
{
$(_this).data("options").longtouch();
touchend();
}
}
// Тачстарт
function touchstart()
{
timer($(_this).data("options").touchduration);
}
// Тачэнд
function touchend()
{
if(leftTimer >= 100)
$(_this).data("options").touch();
clearTimeout(timerInterval);
}
$.fn.fctouch = function(method)
{
if(methods[method])
{
// Если запрашиваемый метод существует, мы его вызываем, все параметры, кроме имени метода прийдут в метод, this так же перекочует в метод
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
}
else if(typeof method === 'object' || !method)
{
return methods.init.apply(this, arguments);
}
else
{
// Если ничего не получилось
$.error( 'Метод "' + method + '" не найден в плагине jQuery.fctouch' );
}
};
})(jQuery);
Придумал такой костыль, но для меня осталось загадкой, почему бы не $(this).on(...)
Даже если элемент создается динамически, но функция, которая будет включать событие, срабатывает после него - всё будет работать.
var i = 0;
var methods = {
init: function(params) {
var options = $.extend({}, defaults, params),
init = $(this).data('fctouch');
if (init)
return this;
else {
_this = this;
var id = this.id;
if (!id) { // Проверка, если у элемента нет id - добавляем его.
this.id = 'help-id-bubufication-' + i;
i++; // пойдет нумерация, чтобы между собой не пересекались.
}
$(_this).data('options', options);
$(document)
.css({
"-ms-user-select": "none",
"-moz-user-select": "none",
"-khtml-user-select": "none",
"-webkit-user-select": "none"
})
.on('touchstart', '#' + this.id, function() {
touchstart();
})
.on('touchend', '#' + this.id, function() {
touchend();
});
return $(this);
}
},
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Добавил меню оно у меня какое то корявое, слова не отображаются прямо по центруА слово "О нас" так вообще одна буква "О" только отображается
Не получается загрузить изображение с помощью FlaskВ лучшем случае - выдаёт html с "битой картинкой"
Написал шейдер который должен делать эффект тумана в дали, но он не работаетВ чём может быть причина?