如何确定以下代码中的.circle
元素是否仍在“屏幕上”?那就是它们在包含#wrapper
元素的可见区域之外?
以下是代码:
<html>
<style type="text/css">
body {
background-color: #000;
margin: 2px;
padding: 0;
}
#wrapper {
background-color: #ccf;
height: 100%;
width: 100%;
overflow: hidden;
position: relative;
}
.circle {
background-color: #fff;
width: 80px;
height: 80px;
border-radius: 40px;
-moz-border-radius: 40px;
position: absolute;
left: 0px;
top: 0px;
}
.stopped {
background-color: #ccc;
}
</style>
<!-- And this script: -->
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
function randomDirection(){
var directions = ['+=','+=','+=','-='];
var direction = directions[Math.floor(Math.random()*directions.length)]
var amount = Math.floor(Math.random()*40);
var unit = 'px';
return direction + amount + unit;
}
$(document).ready(function(){
var again = function() {
$('.circle:not(".stopped")').each(function(){
$(this).animate({
top: randomDirection(), left: randomDirection()
}, 300);
});
setTimeout(again, 300);
}
for (var i=0; i< 50; i++) {
$('.circle:first').clone().appendTo('#wrapper');
}
$('.circle').click(function(){
$(this).addClass('stopped');
});
again();
});
</script>
<!-- and this body -->
<body><div id="wrapper"><div class="circle"> </div></div></body>
</html>
基本上我想在.stopped
元素离开.circle
元素的可见区域后添加#wrapper
类。
答案 0 :(得分:1)
类似
$('.circle.runned').each(function(){
if($(this).offset().left + $(this).width < $('#wraper').offset().left
|| $(this).offset().left > $('#wraper').width()
|| $(this).offset().top + $(this).height < $('#wraper').offset().top
|| $(this).offset().top > $('#wraper').height()
){
$(this).removeClass('runned').addClass('stopped');
}
});
来自artlung的更新:我修改了你的代码以匹配我的代码,这很有效,取代了我的代码:
var again = function() {
// not_stopped = $('.circle:not(".stopped")');
// $('#debug').text(not_stopped.length)
$('.circle:not(".stopped")').each(function(){
if ($(this).offset().left + $(this).width < $('#wrapper').offset().left
|| $(this).offset().left > $('#wrapper').width()
|| $(this).offset().top + $(this).height < $('#wrapper').offset().top
|| $(this).offset().top > $('#wrapper').height()
){
$(this).addClass('stopped');
} else {
$(this).animate({
top: randomDirection(), left: randomDirection()
}, 300);
}
});
setTimeout(again, 300);