8

我在我的页面上启用了 iScroll 。

请注意滚动条中的图像是链接(因此会打开一个更大图像的弹出窗口,你知道交易)。但 iScroll 的一个可爱功能是您可以拖动鼠标进行滚动。但是现在,当有人拖动它时,它会自动打开图像而不是滚动条。有解决方法吗?

4

4 回答 4

3

我会说在拖动滚动条时为每个锚点附加一个类。例如,在拖动时将“拖动”类名称附加到每个锚点,然后在拖动停止时删除该类。

这意味着您可以将 preventDefault 添加到任何具有“拖动”类的链接。类似于以下内容:

    myScroll1 = new iScroll('scroll1', {
        snap: 'li',
        momentum: false,
        hScrollbar: false,
        onScrollStart: function () {
            $('div#iscroll1 a').addClass("dragging");
        },
        onScrollEnd: function () {
            $('div#iscroll1 a').removeClass("dragging");
            document.querySelector('.indicator > li.active').className = '';
            document.querySelector('.indicator > li:nth-child(' + (this.currPageX+1) + ')').className = 'active';
        }
    });
    $('.dragging').click(function (e) {
        e.preventDefault();
    }

然而,这是未经测试的代码,因此您可能需要改进选择器。

于 2012-01-22T23:15:20.767 回答
3

我已经为 iScroll 创建了一个补丁来解决这个问题。你可以在这里看到差异: https ://github.com/zmathew/iscroll/commit/3d77681a9f4b3a6b5a7579df4443bc53356d5584

或者,您可以从此处获取 iScroll 的整个修补版本:https ://github.com/zmathew/iscroll/tree/prevent-scroll-clicks

于 2012-06-05T01:23:24.100 回答
0

解决方案对我不起作用,这是我的简单修复。拖动时设置拖动为真,不拖动时设置为假。如果拖动时单击,则忽略它。

 var myScroll = new iScroll("scroll1", { onBeforeScrollMove: function () {
            window.dragging = true;
        },
            onScrollEnd: function () {
                //had to use a timeout here because without it it would fire on links at the end of the drag / dragging slowly
                setTimeout(function () { 
                    window.dragging = false;
                }, 10);
            }

        });

并在锚点上检查拖动

    $(".myanchors a").click(function () { 
        if (window.dragging) {
            return false;
        }
    });
于 2014-02-12T13:08:51.127 回答
-2

你好这里是iScroll 4.2.5修改版下载

iScroll 4.2.5 + 点击修复

onBeforeScrollStart: function (e) {if(!hasTouch) e.preventDefault();},
于 2013-06-25T08:23:00.093 回答