Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery ui 向jQuery draggable revert添加函数;事件“; 我所拥有的:_Jquery Ui_Revert_Jquery Draggable - Fatal编程技术网

Jquery ui 向jQuery draggable revert添加函数;事件“; 我所拥有的:

Jquery ui 向jQuery draggable revert添加函数;事件“; 我所拥有的:,jquery-ui,revert,jquery-draggable,Jquery Ui,Revert,Jquery Draggable,我有一个可拖动的div,其revert参数设置为“invalid” 我需要的是: 当还原发生时,我想触发对另一个元素的CSS更改 问题是: “revert”是一个参数,而不是一个事件,因此当发生revert时,我在触发所需的CSS更改方面遇到了很大的困难 我的代码: 我所尝试的: 我尝试将“还原”用作事件,但未成功: revert: function(event, ui) { $('#peg_icon').css('background-image','url(images/peg-ic

我有一个可拖动的div,其revert参数设置为“invalid”

我需要的是: 当还原发生时,我想触发对另一个元素的CSS更改

问题是: “revert”是一个参数,而不是一个事件,因此当发生revert时,我在触发所需的CSS更改方面遇到了很大的困难

我的代码: 我所尝试的: 我尝试将“还原”用作事件,但未成功:

revert: function(event, ui) {
    $('#peg_icon').css('background-image','url(images/peg-icon-default.png)');
},
我还尝试让revert参数执行此函数,但未成功:

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更改?

事实证明,还原可以接受一个方法。请参见以下完整示例:

具体而言:

$(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");
      }
    });
  });

希望这有助于。。。我猜无论您试图修改什么都是问题所在,而不是试图在函数调用中使用revert。再次查看您试图设置的CSS,看看是否存在您的问题。

您希望执行以下操作:

 $('#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)');
        }
    });
演示:


希望这有帮助

具体地说,我不使用.css()方法,而是使用addClass()将类添加到您的可拖动。。。在CSS中更改图标,而不是在Javascript中更改图标,这样当您恢复时,您所要做的就是从您的Dragable中调用.removeCSS('drag-indicator-class'),图像将自动恢复为默认值。感谢您提供全面的答案、代码和工作示例。次要提示:我不知道类可以附加到CSS中的id中,即
\some\u id.some\u class
。这是我第一次看到这种选择器。我用的是
!重要信息
强制
.inmotion
类覆盖默认的
#peg_图标
id。问题:使用addClass/removeClass代替JavaScript方法有什么好处?是否使用一个开/关操作而不是两个单独的操作?我最初使用JavaScript方法的原因主要是基于这样一种迷信,即默认和“动态”背景图像不会通过CSS预加载,而且JavaScript方法“强制”在背景图像之间更快地切换。简单地说,这两种方法(即CSS vs JavaScript)预加载或加载背景图像的速度比另一种更快吗?其优点在于灵活性,并将表示与逻辑分离。在某些时候,您可能希望重用代码,或者更改所使用的图像。CSS是这类信息的归属,在CSS中更改它比直接在JS中更改更不可能无意中引入错误。我无法回答问题的预加载部分。。。这是我必须研究的,但通过JS强制这样做也意味着引入更多的HTTP请求(每次切换图像一个请求),这与缓存的css相比也是低效的,相反,它是一个成功放置的可放置元素。感谢代码和Fiddle演示。出于某种原因,此代码阻止我将#peg_图标拖放到辅助拖放区域(即拖放区域以外的拖放区域)。我理解,我在上述问题中提供的有限背景可能是造成这一问题的原因。旁注:我被你们那个吓人的笼子头像弄得有点精神创伤。我只是想说,这个问题经过深思熟虑,沟通得很好!感谢。
 $('#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)');
        }
    });