be-fe / iSlider

Smooth mobile touch slider for Mobile WebApp, HTML5 App, Hybrid App
http://be-fe.github.io/iSlider/
MIT License
1.66k stars 448 forks source link

点击事件执行了两次 #223

Closed littledu closed 9 years ago

littledu commented 9 years ago
  1. islider 居然没有 oninit ,也就是 dom 完成的回调,导致我想给所有图片绑定事件得用事件代理 2.用了事件代理之后,居然 tap 事件执行了两次,如下代码:
var $thumbList = $('#iSlider-wrapper');

$thumbList.on('tap', function(e){
        /*if(e.target.tagName === 'IMG'){
            curUrl = $(e.target).attr('src');
            weixinPreview();
        }*/
        console.log('dd');  // 输出了两次
    });

咋搞

xieyu33333 commented 9 years ago

你是引了zepto吗?因为islider内部也实现了tap事件,所以可能会执行2次

littledu commented 9 years ago

@xieyu33333 是用了 zepto,那有什么更好的方案吗?我要实现 tap 事件

xieyu33333 commented 9 years ago

目前iOS7&& android4.4以上系统已经没有300ms延迟了,可以直接使用click,或者选择不引用zepto的touch模块,或者删掉islider中tap的实现。

littledu commented 9 years ago

酱紫啊,我现在的解决方法是:

$thumbList.on('tap', function(e){
        clearTimeout(timer);
        timer = setTimeout(function(){
            if(e.target.tagName === 'IMG'){
                curUrl = $(e.target).attr('src');
                weixinPreview();
            }
        }, 300);
    });

如上,用计时器 hack 了一下,应该也没大问题