向jQuery draggable revert"event"添加一个函数

Dom*_*vus 21 jquery-ui revert jquery-draggable

是)我有的:

我有一个可拖动的div,其恢复参数设置为"无效".

我需要的:

当恢复发生时,我想触发CSS更改到另一个元素.

问题:

"revert"是参数而不是事件,因此在恢复发生时触发所需的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)');
    }
});
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

我没有尝试使用"revert"作为事件:

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

我也无意中试图让revert paramater接受这个功能:

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;
     }
  }
Run Code Online (Sandbox Code Playgroud)

语境:

我正在拖动一个div,当拖动时,背景图像会改变,当拖动恢复时,背景图像将恢复到其原始状态.

我的问题:

在拖动时发生恢复时,如何触发对其他元素的CSS更改?

Jas*_*lor 20

事实证明,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");
      }
    });
  });
Run Code Online (Sandbox Code Playgroud)

希望这有帮助...我猜你无论你想修改什么都是问题,而不是尝试使用函数调用恢复.再看一下你想要设置的CSS,看看你的问题是否存在.

  • **次要注意:**```is_valid_drop```永远不会成立,而是成功下降时的droppable元素. (3认同)
  • 优点在于灵活性,并将表示与逻辑分开.在某些时候,您可能希望重用代码,或更改使用的图像.CSS就是那种信息所属的地方,而在CSS中更改它不太可能无意中引入错误而不是直接在JS中进行更改.我无法回答问题的预加载部分......这是我必须要研究的东西,但是通过JS强迫它也意味着引入更多的HTTP请求(每次切换图像时都有一个),这也是效率低下的,而不是缓存的CSS. (2认同)