jquery移动滑动事件禁用输入范围

时间:2015-09-21 21:37:55

标签: jquery-mobile swipe

我正在使用jquery mobile关闭并打开应用程序中的菜单,如下所示:

$('body').on('swipeleft', function(event){
    if(menuOpen == true){
        home.showMenu();
    }
});

$('body').on('swiperight', function(event){
    if(menuOpen == false){
        home.showMenu();
    }
});

我的菜单中有一个输入范围(滑块),如下所示:

<input id="changeRadiusRange" type="range" min="5" max="100" step="5" oninput="handleInputVal(value)" onchange="handleChangeVal(this.value)">

现在,如果我使用我的滑块,它会在一段时间后停止(我认为swipeleft /右边30像素会被触发,如果它是一个轻扫,菜单就会关闭)

我已经尝试了一些关于this问题的事情,这导致了这一点,但没有改变行为:

$('#changeRadiusRange').on('swipeleft swiperight', function(e){
    e.stopPropagation();
    e.preventDefault();
});

如何正常强制输入行为不受滑动事件的影响?

3 个答案:

答案 0 :(得分:2)

我今天遇到了同样的问题,并找到了一个不太讨厌的解决方案。

var handleSwipe = function (event) {
    // my swipe stuff
}

// regular event listening
$(document).on("swipeleft swiperight", handleSwipe);

// additional workaround
$(".slider").on("mousedown touchstart", function (event) {
    // when starting to interact with a .slider, stop listening the event
    $(document).off("swipeleft swiperight");
}).on("mouseup touchend", function (event) {
    // when interaction stops, re-listen to swipe events
    $(document).on("swipeleft swiperight", handleSwipe);
});

只要在文档中的任何位置使用滑动事件,滑块似乎永远不会正常工作。当事件处理程序中没有任何操作时,情况就是如此。 preventDefault()和/或stopPropagation()也不会改变任何内容。

使用此解决方案,当用户与滑块交互时,我会终止先前启用的滑动事件。交互完成后,我重新启用滑动事件。对我很有用。

答案 1 :(得分:1)

这适用于jqm 1.4.5:

192.168.56.1

答案 2 :(得分:0)

目前解决方法如下:

$('body').on('swipeleft', function(event){
    if(event.target.id != "changeRadiusRange"){
        if(menuOpen == true){
            home.showMenu();
        }
    }
});

但是从主体调用swipeleft事件后滑块停止。不要向左移动更多,所以我必须释放滑块并再次向左滑动,如果我需要直到滑动杆被调用等等。只是解决方法希望很快得到修复