web-dev-qa-db-ja.com

jQueryドラッグ可能な関数を追加すると、「イベント」が元に戻ります

私が持っているもの:

元に戻すパラメーターが「無効」に設定されたドラッグ可能なdivがあります。

私が必要なもの:

元に戻すときに別の要素へのCSS変更をトリガーしたいと思います。

問題:

「復帰」はイベントではなくパラメーターなので、復帰が発生したときに必要なCSS変更をトリガーするのが非常に困難です。

私のコード:

$('#peg_icon').draggable({
    revert: 'invalid',
    scroll: false,
    stack: "#peg_icon",
    drag: function(event, ui) {
        $('#peg_icon').css('background-image','url(images/peg-icon-when-dragged.png)');
    }
});

私が試したこと:

「revert」をイベントとして使用しようとして失敗しました:

revert: function(event, ui) {
    $('#peg_icon').css('background-image','url(images/peg-icon-default.png)');
},

私はまた、この関数を元に戻すパラメータを取得しようとしましたが失敗しました:

function(socketObj)
  {
     //if false then no socket object drop occurred.
     if(socketObj === false)
     {
        //revert the peg by returning true
        $('#peg_icon').css('background-image','url(images/peg-icon-default.png)');
        return true;
     }
     else
     {
        //return false so that the peg does not revert
        return false;
     }
  }

環境:

Divをドラッグしています。ドラッグすると、背景画像が変化し、ドラッグが元に戻ると、背景画像が元の状態に戻ります。

私の質問:

ドラッグで元に戻すときに、別の要素へのCSS変更をトリガーするにはどうすればよいですか?

22
Dominor Novus

Revertはメソッドを受け入れることができることがわかりました。完全な例については、これを参照してください: http://jsfiddle.net/mori57/Xpscw/

具体的には:

$(function() {
    $("#ducky").draggable({
        revert: function(is_valid_drop){
            console.log("is_valid_drop = " + is_valid_drop);
            // when you're done, you need to remove the "dragging" class
            // and yes, I'm sure this can be refactored better, but I'm 
            // out of time for today! :)
            if(!is_valid_drop){
               console.log("revert triggered");
                $(".pond").addClass("green");
                $(this).removeClass("inmotion");
               return true;
            } else {
                $(".pond").removeClass("green");
                $(this).removeClass("inmotion");
            }
        },
        drag: function(){
            // as you drag, add your "dragging" class, like so:
            $(this).addClass("inmotion");
        }
    });
    $("#boat").droppable({
      drop: function( event, ui ) {
        $(this)
          .addClass("ui-state-highlight");
      }
    });
  });

これが役に立てば幸い...あなたが変更しようとしていたものはすべて問題であったと思います、関数呼び出しで復帰を使用する試みではなかったと思います。設定しようとしたCSSをもう一度見て、問題がそこにあるかどうかを確認します。

23

あなたはこのようなことをしたいです:

 $('#peg_icon').draggable({
        revert: function (socketObj) {
        if (socketObj === true) {
            // success
            return false;
        }
        else {
            // reverting
            return true;
        }
    },
        scroll: false,
        stack: "#peg_icon",
        drag: function(event, ui) {
            $('#peg_icon').css('background-image','url(images/peg-icon-when-dragged.png)');
        }
    });

デモ: http://jsfiddle.net/yTMwu/35/

お役に立てれば!

1
Dom