私は以前にこの問題に関する多くの記事を読んだことがあります。たとえば、変数を使用して実行間隔を記録します。私は毎回行かせて自慰行為をしなければならないと感じていますが、それは非常に疲れます。レンガを移動する前にツールを選ぶのが好きです。実際、ソリューションは非常に簡単です。 IsCrollは、ブラウザをクリックすると、実際にTouchStartとTouchEndイベントをインターセプトします。 TouchEndのときに、JSを使用して、要素のonClickイベント(function_end)をトリガーします。実際の操作では、TouchEndが最初に実行され、次にOnClick関連関数が再び実行されます。これにより、ワンクリックで2回トリガーする頭痛が生じます。これは問題ではありません。これが問題である理由は、IsCrollのソースコードを調べる必要があるためです。この問題を解決する方法は、2回目の関数の実行を拒否することです。そして、私の論理はまさにそうです。 _end関数でクリックイベントをトリガーするコードを実行した後、onclickイベントでバインドされた関数を削除できます。次に、数百ミリ秒後にこのイベントをもう一度追加します。例えば:
コードコピーは次のとおりです。
//処理前
<span onclick = "test()">ダブルクリックしてテスト</span>
//処理後
<span onclick = "void(0)">ダブルクリックしてテスト</span>
OnClick関連関数を削除した後、この2回目は自然にテスト関数を再びトリガーしません。次回の使用を継続するために、Settimeoutを使用してOnclickのコンテンツを復元できます。
修正されたiScrollソースコード(_END関数の約550行から570行):
コードコピーは次のとおりです。
that.doubletaptimer = setimeout(function(){
that.doubletaptimer = null;
//最後のタッチされた要素を見つけます
ターゲット= point.target;
while(target.nodetype!= 1)ターゲット=ターゲット.ParentNode;
if(target.tagname!= 'select' && target.tagname!= 'input' && target.tagname!= 'textarea'){
ev = doc.createevent( 'mousevents');
ev.initmouseEvent( 'click'、true、true、e.view、1、
point.screenx、point.screeny、point.clientx、point.clienty、
E.Ctrlkey、E.Altkey、E.ShiftKey、E.Metakey、
0、null);
ev._fake = true;
Target.dispatchevent(ev);
/**次のコードは新しいコードです**/
//クリックイベントにバインドする要素を見つけます。
var obj = $(target).attr( "onclick")!= null? $(ターゲット):$(ターゲット).Parents( "[onclick]")[0];
if(obj!= null){
var clickContent = $(obj).attr( "onclick");
if(clickContent!= "void(0)"){
//新しい属性を使用して、元のクリック関数を保存します
$(obj).attr( "data-clickbak"、$(obj).attr( "onclick"));
// onClick属性の値を変更します。
$(obj).attr( "onclick"、 "void(0)");
//暴力的なクリックを防ぎます
if(that.hashbox.length> 0){
for(var _i = 0; _i <that.hashbox.length; _i ++)
{
if(that.hashbox [_i] == $(obj)){
that.hashbox.splice(_i、1);
壊す;
}
}
}
that.hashbox.push($(obj));
that._clickback();
}
}//終わり
}
}、that.options.zoom? 250:0);
_Clickback関数とハッシュボックスコードスニペット(_end関数の前に追加)
コードコピーは次のとおりです。
ハッシュボックス:[]、
/*クリックされたオブジェクトのイベントを復元*/
_clickback:function(){
var that = this;
setimeout(function(){
if(that.hashbox.length> 0){
var obj = thit.hashbox.pop();
obj.attr( "onclick"、obj.attr( "data-clickbak"));
if(that.hashbox.length> 0)thit._clickback();
}
}、500);
}
もちろん、IsCrollソースコードを変更せずに、パブリック機能を通じて実装することもできます。
上記はこの記事に関するすべてです。誰もがIsCrollのスライドコントロールを使用することを学ぶことが役立つことを願っています。