javascript - iScroll 4 - 取消 PreventDefault()

标签 javascript events touch iscroll4

在下面的代码中,我添加了三个注释来解释问题是什么。简而言之:我想知道如何在已设置时禁用 e.preventDefault();

   var startY;
   myScroll = new iScroll(DOMElement, {
        snap: 'li',
        bounce: false,
        bounceLock: false,
        momentum: false,
        hScrollbar: false,
        vScrollbar: false,
        hScroll: true,
        vScroll: false,
        wheelAction: 'scroll',
        onBeforeScrollStart: function(e){
            startY = e.pageY;
            // By default it's advisable to disable browser's scroll
            e.preventDefault();
        },
        onScrollStart: function(){  },
        onScrollMove: function(e){
            // But here I want to enable browser's functionality if user
            // explicitly demands this (i.e. tries to scroll vertically)
            if(startY >= e.pageY+70 || startY <= e.pageY-70){
                console.log('test');
                //alert('test');
                console.log(e);
                // However, I don't know how to restore this functionality
                // Touch device detects 'test' alert correctly and this is
                // where I'm stuck.
            }
        },
        onScrollEnd: function(){ },
        onRefresh: function(){ },
        onDestroy: function(){ },
    });

如有任何帮助,我们将不胜感激!

最佳答案

您可以在onBeforeScrollStart中控制滚动。防止在特定区域之间滚动。如果超过,则开始滚动。我认为这有帮助:

var startY;
var isStarted = false;
myScroll = new iScroll(DOMElement, {
    snap: 'li',
    bounce: false,
    bounceLock: false,
    momentum: false,
    hScrollbar: false,
    vScrollbar: false,
    hScroll: true,
    vScroll: false,
    wheelAction: 'scroll',
    onBeforeScrollStart: function(e){
        var y=e.pageY;
        if (!isStarted) {
            startY = y + 0;
            isStarted = true;
        }

        if(startY < y+70 || startY > y-70){
            e.preventDefault();
        }
    },
    onScrollStart: function(){  },
    onScrollMove: function(e){ },
    onScrollEnd: function(){
        isStarted = false;
    },
    onRefresh: function(){ },
    onDestroy: function(){ },
});

关于javascript - iScroll 4 - 取消 PreventDefault(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16087002/

相关文章:

c# - 这是通用委托(delegate)和事件的正确语法吗?

c# - 事件未触发 SharePoint DataGrid 中的动态列

Android 按钮按下强度

javascript - 如何告诉 JavaScript 在加载元素后执行函数?

JQuery - 为每个实例化的新 DOM 对象执行代码

javascript - Flask通过url_for()向python发送变量数据

javascript - 触摸结束事件在 Chrome 中无法正常工作

android - 尽管 "return true",触摸事件仍在层次结构中泄漏

javascript - 在 EaselJS 中更改形状的移动点

javascript - knockout js css 绑定(bind)不保存更改