javascript - 更改 div 后 Droppable 不会触发

标签 javascript jquery html css

我正在尝试通过 jQuery 模拟动画效果,其中包含拖放作为要触发的事件。我使用的代码似乎没问题,直到我不得不通过将它们的 display 设置为 none/block 来交换 div。每当我交换到第一个 div 时,它都会完美地执行动画,但是当它进入第二个 div(交换后)时,它不会触发 droppable 事件。我选择为各个 div 选择 id 选择器来实例化可放置事件的容器,从而进行动画处理。到目前为止,在搜索了大量结果后,我陷入困境并且没有任何解决方案。先感谢您。这是我准备好轻松理解我的问题的 JS fiddle 。

<html>

<head>
<style>
    #wrapper    {
                        border: 1px solid gray;
                        height:300px;
                        margin: 0 auto;
                        padding: 20px 20px 20px 20px;                   
                        position:relative;
                        text-align:center;                  
                        width:600px;                                
                }
    p {
                        display:inline;
                        font-family:Calibri; 
                        font-size:20px;
                        color: #0b1207;
                        text-shadow: #63c9b8 0px 10px 10px;
    }

    #div1, #div2 {
                        border: 1px dotted green;
                        bottom:0;
                        margin-left:100px;
                        position: absolute;
                        }

    #div1 {
                        background-color: orange;                    
                        height:200px;                    
                        width:300px;
    }

    #div2 {
                        background-color: green;
                        display:none;
                        height:100px;
                        width:300px;                    
    }

    #btnchange {
                        background-color:black;
                        border-radius:10px;
                        color: #fff;
                        height:35px;
                        margin-top:10px;
                        margin-left:100px;
                        position:absolute;
                        width:80px;
    }

    .example {
                        border: 1px solid red;  
                        background-color: blue;
                        height:75px;
                        margin: 5px auto 0 ;
                        width:75px;                 
                    }

</style>

</head>

<body>

<div id='wrapper'>
    <p></p>
    <div id='div1'></div>
    <div id='div2'></div>
</div>

<button id ='btnchange' type='button'>Change</button>

<div class='example'></div>

        <script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
        <script src="http://code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
        <script src="http://biostall.com/wp-content/uploads/2010/07/jquery-swapsies.js"></script>
        <script type="text/javascript">


                var id = 1;
                var parent = document.getElementById('wrapper');
                var makina = parent.children[id].id;

                $(function(){

                    $( "#draggable" ).draggable({
                              connectToSortable: "#sortable",
                              helper: "clone",
                              revert: "invalid"
                    });

                    $('.example').draggable({
                              containtment: "#" + makina, 
                              cursor: "pointer", 
                              revert: true
                    });

                    $('#btnchange').click(function(){
                        if (id == 1)
                        {
                            document.getElementById(makina).style.display = 'none'; 
                            id = 2;
                            makina = parent.children[id].id;
                            document.getElementById(makina).style.display = 'block';  
                            document.getElementById('wrapper').children[0].innerText = makina;
                        }
                        else
                        {
                            document.getElementById(makina).style.display = 'none'; 
                            id = 1;
                            makina = parent.children[id].id;
                            document.getElementById(makina).style.display = 'block';     
                            document.getElementById('wrapper').children[0].innerText = makina;
                        } 
                        console.log(makina);       
                    });

                    $("#" + makina).droppable({
                            drop: function(){
                                doAnimate(makina);}
                    }); 

                });

                 function doAnimate(container)
                {
                    $('#'+ container).animate({height: '+=10px'}, 500, function(){
                                    var message = container.clientHeight;
                                    $(this).html(message);
                    });
                }

        </script>

</body>

</html>

http://jsfiddle.net/xoxxbr4t/6/

最佳答案

您的问题是您只在其中一个元素上调用了一次 droppable。一旦 .droppable() 函数也被放入更改按钮点击中,它应该可以工作。

将其放入更改函数中:

$("#" + makina).droppable({
    drop: function () {
        doAnimate(makina);
    }
});

例子:

http://jsfiddle.net/xoxxbr4t/7/

关于javascript - 更改 div 后 Droppable 不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27361686/

相关文章:

JavaScript 不等待 Promise 解析。使用 Async/Await 扫描 AWS DynamoDB 时

javascript - 调用不带参数且未定义默认参数的函数

javascript - 是否可以从 JavaScript 生成 html?

javascript - 根据屏幕分辨率动态更改图像

javascript - Wow + jquery + animate div 在加载时显示然后再次出现

html - 为什么父类覆盖子类

javascript - Typescript:属性 'constructor' 的类型不兼容

javascript - 如何在单击时从 html 选定列表框中删除值

html - 未找到 Bootstrap 4 应用程序和 _settings,如 sass 文件

javascript - setInterval 函数导致控制台多次记录某些内容