【问题标题】:Can a draggable div be true or receive a value when held over another div?一个可拖动的 div 可以是 true 还是在另一个 div 上方时接收一个值?
【发布时间】:2016-03-03 22:49:27
【问题描述】:

我有一个 div,一把钥匙,我想用它来解锁一扇门,另一个 div。这个可拖动的 div 是否可以接收一个值,例如将鼠标悬停在锁着的门上时为 1 还是 true?

在此示例代码中存在问题。当goldenKey 得到mousedown 时,它变为true。这意味着 if 语句已完成,并且任何 div 放入锁定的门,例如另一个key-div,会提示alertfadeOut,颜色会发生变化。

那么当goldenKey 悬停在锁定的门 div 上时,有没有办法接收一个值或真/假?还是有另一种更简单的方法来解决我错过的问题?

HTML

<div id="container">
   <div class="item" id="goldenKey"></div>
   <div id="door" class="lockedDoor"></div>
</div>

CSS

#container{
    position:relative;
    width:667px;
    height:375px;
    background-color:#999;
}
.item{
    position:absolute;
}
#goldenKey{
    width:20px;
    height:20px;
    cursor:pointer;
    z-index:10;
    background-color:gold;
    left:230px;
    top:100px;
}
#door{
    position:absolute;
    top:0;
    right:0;
    width:70px;
    height:110px;
    background-color:tomato;
}
.lockedDoor{
    position:relative;
    width:70px;
    height:110px;
    background-color:green;
}

jQuery

$(document).ready(function(){

$('.item').draggable({
    accept: ".item",
    containment: '#container', 
    cursor: 'pointer',
    revert: function(is_valid_drop){
            console.log("is_valid_drop = " + is_valid_drop);
            if(!is_valid_drop){
               console.log("revert triggered");
               return true;
            } else {
                //Other
            }
        }
    });

var goldenKey = false;

$('#goldenKey').mousedown(function(){
    goldenKey = true;
});
    $('.lockedDoor').droppable({
        drop: function(event, ui) {
            if(goldenKey){
                alert ('Door opened');
                $('#goldenKey').fadeOut(500);
                $('#door').css('background-color', 'blue');
            }else{
                alert ('Door locked');
            }

            var $this = $(this);
            $this.append(ui.draggable);

            var width = $this.width();
            var height = $this.height();
            var cntrLeft = width / 2 - ui.draggable.width() / 2;
            var cntrTop = height / 2 - ui.draggable.height() / 2;

            ui.draggable.css({
                left: cntrLeft + "px",
                top: cntrTop + "px"
            });
        }
    });
});

【问题讨论】:

    标签: jquery html css draggable droppable


    【解决方案1】:

    有一个事件over( event, ui ) 特别是在可放置的 jQuery UI 中。

    $( ".selector" ).droppable({
      over: function( event, ui ) {}
    });
    

    在发布问题之前,您应该仔细阅读 API。

    【讨论】:

    • 那么在这个例子中它会做些什么? $('.lockedDoor').droppable({ over: function( event, ui ){ goldenKey = true; } });
    • 是的,您可以在其中添加任何处理密钥的逻辑。 .droppable({ over: function( event, ui ){ var key = getKeyById(); key.isTheRightKey(); } });你的逻辑是什么
    • @YamadaAkira 只需将其添加到您已有的 .droppable 定义中
    • 我现在有这个 $('.lockedDoor').droppable({ over: function( event, ui ) { goldenKey = true; console.log('This is true');} 但问题是现在任何通过 droppbale 的东西都变成了真的。
    • 尝试设置类似于“接收”div 并检查两个全局变量以确保匹配。例如:draggingKey = true 在一个over 事件中和draggingDoor = true 在另一个事件中,如果两者都为真,则钥匙在(右)门上
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    相关资源
    最近更新 更多