js 中重叠元素onclick 同时执行吗,还是只执行一个

JavaScript016

js 中重叠元素onclick 同时执行吗,还是只执行一个,第1张

右键点击没试过,不过如果是左键点击的话就需要用到 鼠标点击的坐标与元素相对位置 的判断了

举个栗子

<style>

div{

background: red

width: 100px

height: 100px

}

</style>

<div id="one" onclick="fa(this)">

<div id="1" style="position: absolute">1</div>

<div id="2" style="position: absolute">2</div>

<div id="3" style="position: absolute">3</div>

</div>

<script>

function fa(a){

var arr = [] //点击位置元素ID集合

var x = event.clientX //鼠标x坐标

var y = event.clientY //鼠标y坐标

var childs = a.children

for (var i = 0i < childs.length i++){

var left = childs[i].offsetLeft //子元素左边界坐标

var right = childs[i].offsetLeft + childs[i].offsetWidth //子元素右边界坐标

var top = childs[i].offsetTop //子元素上边界坐标

var bottom = childs[i].offsetTop + childs[i].offsetHeight //子元素下边界坐标

if (left < x && right > x && top < y && bottom > y){

arr.push(childs[i].id) //将符合条件的元素ID加入集合

}

}

alert("鼠标点击位置下的所有子元素的id:" + arr)

}

</script>

当速度不同时,应该考虑到相互间的误差,比方说一个球速度每次增加1,另一个球每次增加3,那么当前个球到了位置99,后个球到了98,那么前者+1是100,后者+3是101,如果用相等来判断是否重叠,这里就会无法判断了。所以,这里不能用==来判断,而应该设定一个误差范围(比如3),两者位置相减的绝对值如果在这个范围内,就应该判断为重叠!

比如这样:

if (Math.abs(X1-X2)<3 &&Math.abs(Y1-Y2)<3) {