0

イベントのトリガー時間が300ミリ秒遅れているため、「クリック」ではなく「vmouseup」にバインドされたリストアイテムのセットがあります。

私の問題は、その「vmouseup」または「vmousedown」を使用して各リストアイテムをバインドすると、明らかにいくつかの調整を加えてリストをスクロールできないことです。

私のリスト要素はこれについて見てください:

 $(liElem).bind('vmouseup', function () {
      scrollToTop();
      showDetails();
 });
  1. list要素でvmouseupイベントをトリガーせずにリストをスクロールするにはどうすればよいですか?
  2. SOFlowのどこかで、vmouseupが常にトリガーされるとは限らないことを読んだことを覚えています。代わりに、vmousedownを使用する必要がありますか?

unbind()#1の答えは/die()と関係があることを私は知っているstopPropagation()と思いますpreventDefault()

更新された回答

iOS 4.2.1(iPod Touch)では、しきい値アプローチにバグがあるようです。上にスクロール(上から下にスワイプ)するとすべてが正常に機能しますが、下にスクロール(下から上にスワイプ)すると、距離pageYは誤った値を示し、イベントを発生させることがよくあります。たとえば、しきい値が30ピクセルに設定されていて、電話の一番下から一番上までスワイプすると、イベントが発生する可能性があります。jQueryMobile1.1.0RC1およびjQuery1.7.1を使用します。

4

1 に答える 1

2
var did_user_swipe = false;
$(liElem).bind('vmousedown', function () {
    did_user_swipe = false;
}).bind('vmouseup', function () {
    if (!did_user_swipe) {
        scrollToTop();
        showDetails();
    }
}).bind('vmousemove', function () {
    did_user_swipe = true;
});

これにより、デフォルトのフラグが設定falseされます。フラグはtrue、ユーザーがスワイプ動作で指をドラッグしたときに設定されます。フラグがに設定されるtrueと、vmouseupイベントハンドラーは実行されません。

これがデモです:http://jsfiddle.net/RB6mp/

アップデート

vmousemoveスワイプ/クリック動作のしきい値を設定することもできます。これにより、イベントにバインドする必要が少なくなります。

var coords    = [0, 0],
    threshold = 100;//in pixels
$(liElem).bind('vmousedown', function (event) {

    //when the mouse is clicked, set the coordinates of that event
    coords = [event.pageX, event.pageY];
}).bind('vmouseup', function (e) {

    //when the mouse is released, calculate the distance from the start of the click to the end
    var distance = Math.sqrt(Math.pow(coords[0] - e.pageX, 2) + Math.pow(coords[1] - e.pageY, 2));

    //if the distance of the "swipe" is longer than the `threshold` set
    if (distance > threshold) {
        alert('Swipe (' + Math.floor(distance) + 'px)');
    } else {
        alert('Click (' + Math.floor(distance) + 'px)');
    }
});​

これがデモです:http://jsfiddle.net/RB6mp/4/

于 2012-04-18T23:56:04.817 に答える