问题
Any easy way to detect element if its over another element ?
I'm using CSS3 transform to move a element. (because)
Example : - All element size 10x10 pixels
- Element#A
transform : translate(170px, 180px)
<-- This element can controll for moving - Element#B
transform : translate(200px, 200px)
How to detect is element#A over some element ?
My full demo with jQuery element controller : http://jsfiddle.net/ndZj5/
var over = false;
// do something with `over` to `true` to detect this...
if(!over) {
my.css('transform','translate('+x+'px,'+y+'px)');
}
Take a tour on my demo , press keyboard arrows to controll
回答1:
You need to use offset
to get the position
of the moved object and compare it with the "blocks".
I've setup in my demonstration the "blocks" to change to blue when they are overlayed. But you can do whatever you want.
Also you were creating an overhead with your setInterval
. I've moved it to the keyup
event handler.
Further I recommend you to store the position of the "blocks" in an array
if they are static elements and access them when needed.
Working example
var objTop = my.offset().top,
objLeft = my.offset().left,
objWidth = my.width(),
objHeight = my.height();
$('.fixed').each(function(e){
var self = $(this),
selfLeft = self.offset().left,
selfTop = self.offset().top,
selfWidth = self.width(),
selfHeight = self.height();
self.css('background','black');
if((objLeft + objWidth) > selfLeft && objLeft < (selfLeft + selfWidth) && (objTop + objHeight) > selfTop && objTop < (selfTop + selfHeight)){
self.css('background','blue');
}
});
回答2:
You can use .offset to see the position of an element relative to the document. This does take into account translate
. You can get the coordinates of the rectangle with .offset
and then .offset.left + width
/ .offset.top + height
. Then you can easily check for an overlap.
来源:https://stackoverflow.com/questions/19661108/detect-element-if-over-another-element-via-using-css3-transform