Android + jQuery - swipeleft 上的第二个不会执行
Android + jQuery - second on swipeleft wont execute
我必须为我的网页做一些特殊的事情才能在 Android 上以正确的方式工作。显示了一些图像(一个可见,另一个不可见)并且通过滑动应该可以更改它们。到目前为止,所有 OS.
都没有问题
但也应该可以缩放。现在 Android 开始成为 Buggy。由于滑动回调,它停止了缩放手势。回调本身不会更改页面,因为视图已缩放,因此不应中断。
现在,我通过在两根手指触摸显示屏时关闭 swipeleft 和 swiperight 并在手指离开显示屏时重新打开来解决问题。
首先 运行 我可以轻扫,然后我可以不间断地缩放,但之后我就不能再轻扫了。再次调用设置回调的函数,它设置了回调,但它们不会被执行...
代码如下:
app.utils.scroll = (function(){
var $viewport = undefined;
var swipeDisabled = false;
var init = function(){
$viewport = $('#viewport');
$viewport.mousewheel(mayChangePage);
// On touchstart with two fingers, remove the swipe listeners.
$viewport.on('touchstart', function (e) {
if (e.originalEvent.touches.length > 1) {
removeSwipe();
swipeDisabled = true;
}
});
// On touchend, re-define the swipe listeners, if they where removed through two-finger-gesture.
$viewport.on('touchend', function (e) {
if (swipeDisabled === true) {
swipeDisabled = false;
initSwipe();
}
});
initSwipe();
}
var mayChangePage = function(e){
// If page is not zoomed, change page (next or prev).
if (app.utils.zoom.isZoomed() === false) {
if (e.deltaY > 0) {
app.utils.pagination.prev(e);
} else {
app.utils.pagination.next(e);
}
}
// Stop scrolling page through mouse wheel.
e.preventDefault();
e.stopPropagation();
};
var next = function (e) {
// If page is not zoomed, switch to next page.
if (app.utils.zoom.isZoomed() === false) {
app.utils.pagination.next(e);
}
};
var prev = function (e) {
// If page is not zoomed, switch to prev page.
if (app.utils.zoom.isZoomed() === false) {
app.utils.pagination.prev(e);
}
};
var initSwipe = function () {
// Listen to swipeleft / swiperight-Event to change page.
$viewport.on('swipeleft.next', next);
$viewport.on('swiperight.prev', prev);
};
var removeSwipe = function () {
// Remove listen to swipeleft / swiperight-Event for changing page to prevent android-bug.
$viewport.off('swipeleft.next');
$viewport.off('swiperight.prev');
};
$(document).ready(init);
}());
有什么想法可以让活动重新开始吗?
感谢所有想法。
问候
利普利夫
已修复:
jQuery 移动设备本身 prevents the swipe Event 如果处理程序已注册,则杀死 "scroll"。
所以我覆盖了 $.event.special.swipe.scrollSupressionThreshold
值并将其设置为 10000,以防止 jQueryMobile 的 preventDefault-call:
$.event.special.swipe.scrollSupressionThreshold = 10000;
现在我的代码看起来像
app.utils.scroll = (function(){
var $viewport = undefined;
var swipeDisabled = false;
var init = function(){
$viewport = $('#viewport');
$viewport.mousewheel(mayChangePage);
// See #23.
$.event.special.swipe.scrollSupressionThreshold = 10000;
// Listen to swipeleft / swiperight-Event to change page.
$viewport.on('swipeleft.next', next);
$viewport.on('swiperight.prev', prev);
}
var mayChangePage = function(e){
// If page is not zoomed, change page (next or prev).
if (app.utils.zoom.isZoomed() === false) {
if (e.deltaY > 0) {
app.utils.pagination.prev(e);
} else {
app.utils.pagination.next(e);
}
}
// Stop scrolling page through mouse wheel.
e.preventDefault();
e.stopPropagation();
};
var next = function (e) {
// If page is not zoomed, switch to next page.
if (app.utils.zoom.isZoomed() === false) {
app.utils.pagination.next(e);
}
};
var prev = function (e) {
// If page is not zoomed, switch to prev page.
if (app.utils.zoom.isZoomed() === false) {
app.utils.pagination.prev(e);
}
};
$(document).ready(init);
}());
感谢 Omar - 他在 jquery IRC 中与我一起写了几分钟/几小时,并就覆盖 jQueryMobile 的标准值提出了一些建议。
我必须为我的网页做一些特殊的事情才能在 Android 上以正确的方式工作。显示了一些图像(一个可见,另一个不可见)并且通过滑动应该可以更改它们。到目前为止,所有 OS.
都没有问题但也应该可以缩放。现在 Android 开始成为 Buggy。由于滑动回调,它停止了缩放手势。回调本身不会更改页面,因为视图已缩放,因此不应中断。
现在,我通过在两根手指触摸显示屏时关闭 swipeleft 和 swiperight 并在手指离开显示屏时重新打开来解决问题。
首先 运行 我可以轻扫,然后我可以不间断地缩放,但之后我就不能再轻扫了。再次调用设置回调的函数,它设置了回调,但它们不会被执行...
代码如下:
app.utils.scroll = (function(){
var $viewport = undefined;
var swipeDisabled = false;
var init = function(){
$viewport = $('#viewport');
$viewport.mousewheel(mayChangePage);
// On touchstart with two fingers, remove the swipe listeners.
$viewport.on('touchstart', function (e) {
if (e.originalEvent.touches.length > 1) {
removeSwipe();
swipeDisabled = true;
}
});
// On touchend, re-define the swipe listeners, if they where removed through two-finger-gesture.
$viewport.on('touchend', function (e) {
if (swipeDisabled === true) {
swipeDisabled = false;
initSwipe();
}
});
initSwipe();
}
var mayChangePage = function(e){
// If page is not zoomed, change page (next or prev).
if (app.utils.zoom.isZoomed() === false) {
if (e.deltaY > 0) {
app.utils.pagination.prev(e);
} else {
app.utils.pagination.next(e);
}
}
// Stop scrolling page through mouse wheel.
e.preventDefault();
e.stopPropagation();
};
var next = function (e) {
// If page is not zoomed, switch to next page.
if (app.utils.zoom.isZoomed() === false) {
app.utils.pagination.next(e);
}
};
var prev = function (e) {
// If page is not zoomed, switch to prev page.
if (app.utils.zoom.isZoomed() === false) {
app.utils.pagination.prev(e);
}
};
var initSwipe = function () {
// Listen to swipeleft / swiperight-Event to change page.
$viewport.on('swipeleft.next', next);
$viewport.on('swiperight.prev', prev);
};
var removeSwipe = function () {
// Remove listen to swipeleft / swiperight-Event for changing page to prevent android-bug.
$viewport.off('swipeleft.next');
$viewport.off('swiperight.prev');
};
$(document).ready(init);
}());
有什么想法可以让活动重新开始吗?
感谢所有想法。
问候 利普利夫
已修复:
jQuery 移动设备本身 prevents the swipe Event 如果处理程序已注册,则杀死 "scroll"。
所以我覆盖了 $.event.special.swipe.scrollSupressionThreshold
值并将其设置为 10000,以防止 jQueryMobile 的 preventDefault-call:
$.event.special.swipe.scrollSupressionThreshold = 10000;
现在我的代码看起来像
app.utils.scroll = (function(){
var $viewport = undefined;
var swipeDisabled = false;
var init = function(){
$viewport = $('#viewport');
$viewport.mousewheel(mayChangePage);
// See #23.
$.event.special.swipe.scrollSupressionThreshold = 10000;
// Listen to swipeleft / swiperight-Event to change page.
$viewport.on('swipeleft.next', next);
$viewport.on('swiperight.prev', prev);
}
var mayChangePage = function(e){
// If page is not zoomed, change page (next or prev).
if (app.utils.zoom.isZoomed() === false) {
if (e.deltaY > 0) {
app.utils.pagination.prev(e);
} else {
app.utils.pagination.next(e);
}
}
// Stop scrolling page through mouse wheel.
e.preventDefault();
e.stopPropagation();
};
var next = function (e) {
// If page is not zoomed, switch to next page.
if (app.utils.zoom.isZoomed() === false) {
app.utils.pagination.next(e);
}
};
var prev = function (e) {
// If page is not zoomed, switch to prev page.
if (app.utils.zoom.isZoomed() === false) {
app.utils.pagination.prev(e);
}
};
$(document).ready(init);
}());
感谢 Omar - 他在 jquery IRC 中与我一起写了几分钟/几小时,并就覆盖 jQueryMobile 的标准值提出了一些建议。