javascript - JS障碍物和碰撞CSS事件不起作用
问题描述
我有障碍物(白色矩形)作为障碍物,但似乎无法为小灰色圆圈(“.draggable”/“#b”)接触绿色圆圈(“.trigger01”/ “#trigger01”)当“.draggable”与“.trigger01”碰撞时,我希望“.trigger01”hide/opacity: '0'
function isColliding(x, y, element2) {
var e2 = {};
e2.top = $(element2).offset().top;
e2.left = $(element2).offset().left;
e2.right = parseFloat($(element2).offset().left) + parseFloat($(element2).width());
e2.bottom = parseFloat($(element2).offset().top) + parseFloat($(element2).height());
if (x > e2.left && x < e2.right && y < e2.bottom && y > e2.top) {
return true
}
}
/////////////////////////////////
$('#b').draggable({
function(event, ui) {
var dropZone = $(this).data('target');
var originalPosX = $(this).offset().left;
var originalPosY = $(this).offset().top;
if (event.collision(event.clientX, event.clientY, '.trigger01')) {
$('.trigger01').css({
opacity: '0',
});
}
},
});
///////////////////////////////////////
function collidesWith(element1, element2) {
var Element1 = $(".draggable");
var Element2 = $(".trigger01");
Element1.top = $(element1).offset().top;
Element1.left = $(element1).offset().left;
Element1.right = Number($(element1).offset().left) + Number($(element1).width());
Element1.bottom = Number($(element1).offset().top) + Number($(element1).height());
Element2.top = $(element2).offset().top;
Element2.left = $(element2).offset().left;
Element2.right = Number($(element2).offset().left) + Number($(element2).width());
Element2.bottom = Number($(element2).offset().top) + Number($(element2).height());
if (Element1.right > Element2.left && Element1.left < Element2.right && Element1.top < Element2.bottom && Element1.bottom > Element2.top) {
$('.trigger01').css({
opacity: '0',
});
}
}
/////////////////////////////
function clearCollision(event, ui) {
$(".collision").remove();
}
function handleCollision(event, ui) {
$(event.collision).addClass("collision").each(function() {
var d = $(this).data("direction");
if (d) $("<b>" + d + "</b>").appendTo($(this));
$(this).appendTo("obstacle");
});
}
function clearProtrusion(event, ui) {
$(".protrusion").remove();
}
function handleProtrusion(event, ui) {
$(event.collision).addClass("protrusion").each(function() {
var d = $(this).data("direction");
if (d) $("<b>" + d + "</b>").appendTo($(this));
$(this).appendTo(".obstacle");
collisionTrigger1();
});
}
function collisionTrigger1(event) {
if ($("#b").val() == "collision") {
$(".draggable").css({
opacity: '0.3',
});
$(".trigger01").css("display", "none");
} else {
$(".draggable").css({
opacity: '1',
});
}
}
//keep this
$(function() {
$(".draggable").each(function() {
$(this).draggable({
containment: "#board",
obstacle: ".obstacle",
preventCollision: true,
restraint: ".restraint",
preventProtrusion: true,
directionData: "direction",
relative: "body",
collisionVisualDebug: false,
});
});
//might not need
// $( "#b" ).bind( "precollision", clearCollision );
// $( "#b" ).bind( "preprotrusion", clearProtrusion );
// $( "#b" ).bind( "collision", handleCollision );
// $( "#b" ).bind( "protrusion", handleProtrusion );
// $( "#trigger01" ).bind( "b", collisionTrigger1 );
}); <
/script>
body {
margin: 0px;
padding: 0px;
}
#board {
position: absolute;
width: 450px;
height: 290px;
background-color: #de8895;
border: 0;
border-collapse: collapse;
margin: 0;
top: 100px;
left: 0px;
}
.draggable {
position: absolute;
top: 0px;
left: 0px;
width: 30px;
height: 30px;
background: #dddddd;
border-radius: 15px;
cursor: move;
z-index: 40;
transition: opacity .3s ease, transform .6s ease;
}
.obstacle {
position: absolute;
top: -10px;
left: 0px;
width: 90px;
height: 100px;
border-radius: 15px;
background: white;
transition: background .4s ease;
}
.restraint {
position: absolute left: 30px;
top: 100px;
width: 450px;
height: 210px;
background-color: #eeeeee;
margin-top: 30px;
}
#floss {
position: absolute;
top: -70px;
left: -80px;
width: 200px;
height: 200px;
}
#trigger01 {
position: absolute;
top: 23px;
left: 200px;
width: 20px;
height: 20px;
background: #72b543;
border-radius: 15px;
cursor: move;
z-index: 150;
}
.protrusion {
background-color: transparent;
pointer-events: none;
position: absolute;
border: 1px solid black;
margin: -1px;
}
.collision {
background-color: #00ffff;
pointer-events: none;
position: absolute;
}
#a {
padding: 0px;
}
#c {
margin: 0px;
}
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="utf-8">
<script src="http://outofourmindsstudios.com/2021/PitStop03/03_floss/jquery-1.8.3.min.js"></script>
<script src="http://outofourmindsstudios.com/2021/PitStop03/03_floss/ui/jquery.ui.core.js"></script>
<script src="http://outofourmindsstudios.com/2021/PitStop03/03_floss/ui/jquery.ui.widget.js"></script>
<script src="http://outofourmindsstudios.com/2021/PitStop03/03_floss/ui/jquery.ui.mouse.js"></script>
<script src="http://outofourmindsstudios.com/2021/PitStop03/03_floss/ui/jquery.ui.draggable.js"></script>
<script src="http://outofourmindsstudios.com/2021/PitStop03/03_floss/jquery-collision.min.js"></script>
<script src="http://outofourmindsstudios.com/2021/PitStop03/03_floss/jquery-ui-draggable-collision.min.js"></script>
<script src="http://outofourmindsstudios.com/2021/PitStop03/03_floss/scriptFloss.js"></script>
</head>
<body>
<div id="board">
<div class="restraint"></div>
<div class="draggable" style="left:50px; top: -60px;" id="b" data-target=".trigger01"></div>
<div class="obstacle" style="left: 0px; top:20px;" id="a"></div>
<div class="obstacle" style="left:120px; top:20px;" id="c"></div>
<div class="obstacle" style="left:240px; top:20px;" id="c"></div>
<div class="obstacle" style="left:360px; top:20px;" id="c"></div>
<div class="obstacle" style="left: 0px; top:160px;" id="a"></div>
<div class="obstacle" style="left:120px; top:160px;" id="c"></div>
<div class="obstacle" style="left:240px; top:160px;" id="c"></div>
<div class="obstacle" style="left:360px; top:160px;" id="c"></div>
<div class="trigger01" id="trigger01"></div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui-touch-punch/0.2.3/jquery.ui.touch-punch.min.js"></script>
</body>
</html>
https://jsfiddle.net/rebeccaoutofourmindsstudios/z1f9unp7/1/#&togetherjs=fm9VAxwiKy
解决方案
推荐阅读
- windows - Docker for Windows,无法访问从控制台启动的容器
- javascript - 使用 local-storage 将数组存储为值并更新它
- c# - MIP SDK 在调用配置文件 AddEngineAsync 时出现访问被拒绝错误
- reactjs - react-router-dom 的问题
- reactjs - 通过 contentful-cli 创建的扩展不会在 localhost 上加载
- apache-nifi - 使用嵌套依赖测试 Nifi 类
- python - 当我不在我的函数中使用它时,为什么我们需要 func.TimerRequest?
- firebase - Flutter Provider 仅在热重载后显示结果
- html - 如何使用剪辑路径在图像中设置形状
- flutter - Flutter 驱动程序处理最小化的应用程序