0

私はこれについて開発者に連絡を取り、現在書かれているコードはあまりハックに適していないため、このメソッドをサポートするためにコードを自分で変更することを示しました...私は100%成功せずに変更を試みました.

現在、JCrop は jquery を使用して .mousedown を追跡して選択を開始し、.mouseup を使用して選択を受け入れ/停止しています。jcropを使用してトラックパッドをクリックすると、ブラックベリーデバイス(トラックパッド付き)で何が起こるか、カーソルを移動すると選択範囲の描画が開始されます(トラックパッドをクリック(押したまま)してドラッグすることはできません)。問題は、もう一度クリックすると選択が削除され、現在のカーソル位置から再描画が開始されることです。JCrop はマウスダウンを使用してクリック アンド ドラッグ選択プロセスを追跡し、次にマウスアップを使用して選択を解放し、クロップ ボックスを保持しているように思えます。

clickCount のような変数を割り当ててクリックを追跡し、イベントを発生させる関数を割り当てることを考えました。したがって、ユーザーがクリックするたびに、関数を実行して clickCount を追跡し、開始選択イベントまたは終了選択イベントを発生させます。

以下は、.mousedown と .mouseup へのすべての参照です。

var $trk = newTracker().width(boundx + (bound * 2)).height(boundy + (bound * 2)).css({
      position: 'absolute',
      top: px(-bound),
      left: px(-bound),
      zIndex: 290
    }).mousedown(newSelection);

function dragDiv(ord, zi) //{{{
      {
        var jq = $('<div />').mousedown(createDragger(ord)).css({
          cursor: ord + '-resize',
          position: 'absolute',
          zIndex: zi
        });

        if (Touch.support) {
          jq.bind('touchstart', Touch.createDragger(ord));
        }

        $hdl_holder.append(jq);
        return jq;
      }

var $track = newTracker().mousedown(createDragger('move')).css({
        cursor: 'move',
        position: 'absolute',
        zIndex: 360
      });
function toFront() //{{{
      {
        $trk.css({
          zIndex: 450
        });
        if (trackDoc) {
          $(document)
            .bind('mousemove',trackMove)
            .bind('mouseup',trackUp);
        }
      } 
      //}}}
      function toBack() //{{{
      {
        $trk.css({
          zIndex: 290
        });
        if (trackDoc) {
          $(document)
            .unbind('mousemove', trackMove)
            .unbind('mouseup', trackUp);
        }
      } 
 if (!trackDoc) {
        $trk.mousemove(trackMove).mouseup(trackUp).mouseout(trackUp);
      }

ヘルプ/アイデアをいただければ幸いです。ありがとう

4

1 に答える 1

0

What about something along the lines of this:

var isDragging = false;

function onMouseDown(event) {
    isDragging = !isDragging;
}

function onMouseUp(event) {
    if (isDragging) {
        event.preventDefault();
    }
}

window.addEventListener('mousedown', onMouseDown, false);
window.addEventListener('mouseup', onMouseUp, false);

This way, onMouseUp should technically only fire every other time, potentially preventing the release trigger from stopping selection. This would require some deeper integration with your code of course.

于 2012-08-15T16:43:17.537 に答える