私のページで iScroll を有効にしています。
スクローラーの画像がリンクになっていることに注意してください (大きな画像のポップアップが開きます。しかし、iScroll の優れた機能の 1 つは、マウスをドラッグしてスクロールできることです。しかし今、誰かがそれをドラッグすると、バーをスクロールする代わりに画像が自動的に開きます。回避策はありますか?
この問題を修正するiScrollのパッチを作成しました。ここで差分を確認できます: https ://github.com/zmathew/iscroll/commit/3d77681a9f4b3a6b5a7579df4443bc53356d5584
または、パッチを適用したバージョンのiScroll全体をここから入手することもできます:https ://github.com/zmathew/iscroll/tree/prevent-scroll-clicks
スクローラーがドラッグされている間、各アンカーにクラスを追加します。たとえば、ドラッグ中に各アンカーに「ドラッグ」のクラス名を追加し、ドラッグが停止したらクラスを削除します。
これは、「ドラッグ」クラスを持つ任意のリンクに 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();
}
ただし、これはテストされていないコードであるため、セレクターを調整する必要がある場合があります。
解決策はうまくいきませんでした。これが私の簡単な修正です。ドラッグするときはドラッグを true に設定し、そうでないときは false に設定します。ドラッグ時にクリックしても無視してください。
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;
}
});
こんにちは、ダウンロードする iScroll 4.2.5 の修正版です
onBeforeScrollStart: function (e) {if(!hasTouch) e.preventDefault();},