Mam część gry, w której kursor ma "zwolnić", gdy przechodzi nad niektórymi elementami div. Używam funkcji, która może wykryć kolizję z div. Działa to dobrze, gdy kursor napotka pierwszy element div, ale nie działa on wcale na drugim elemencie div.Funkcja JavaScript wpływa tylko na pierwszy div z klasą
Check out this jsFiddle dla lepszego zrozumienia tego, o czym mówię. Przekaż kursor nad pierwszym białym blokiem (class='thing'
) po lewej stronie i zwolni. Przekaż kursor nad drugim blokiem (także class='thing'
) i nic się nie dzieje. Potrzebuję tej funkcji kolizji do pracy na wszystkich elementach div, gdzie class='thing'
.
HTML
<div id='cursor'>
</div>
<div class='thing' style='width:70px; height:70px; background: #fff; position: absolute; bottom: 350px; right: 800px; z-index: -1;'>
</div>
<div class='thing' style='width:70px; height:70px; background: #fff; position: absolute; bottom: 200px; right: 400px; z-index: -1;'>
</div>
JS
(function collide(){
var newInt = setInterval(function() {
function collision($cursor, $thing) {
var x1 = $cursor.offset().left;
var y1 = $cursor.offset().top;
var h1 = $cursor.outerHeight(true);
var w1 = $cursor.outerWidth(true);
var b1 = y1 + h1;
var r1 = x1 + w1;
var x2 = $thing.offset().left;
var y2 = $thing.offset().top;
var h2 = $thing.outerHeight(true);
var w2 = $thing.outerWidth(true);
var b2 = y2 + h2;
var r2 = x2 + w2;
// change 12 to alter damping higher is slower
var varies = 12;
if (b1 < y2 || y1 > b2 || r1 < x2 || x1 > r2){
} else {
varies = 200;
console.log(varies);
}
$xp += (($mouseX - $xp)/varies);
$yp += (($mouseY - $yp)/varies);
$("#cursor").css({left:$xp +'px', top:$yp +'px'});
}
$(collision($('#cursor'), $('.thing')));
//$('.result').text(collision($('#cursor'), $('.thing')));
}, 20);
})();
$ rzeczą jest zbiorem – mplungjan
Unikaj używania 'setInterval 'dla animacji, ponieważ może powodować (i, faktycznie, w przyczynach JSFiddle) opóźnienia. Użyj 'window.requestAnimationFrame'. –
http://sourceforge.net/p/jquerycollision/code/ci/master/tree/jquery-collision.js – mplungjan