2015-09-08 51 views
0

我想要檢測點擊並將元素從屏幕右側移動到離開屏幕左側的jquery。jquery - 在屏幕上隨機移動div的多個實例Y-position

我已經實現了一般想法(fiddle),但只有一個div,一次。

HTML:

<div class = "outer">   
    <div id = "box">  
    </div>    
</div> 

CSS:

body { 
    overflow-x: hidden; 
    height: 500px; 
} 

#box{ 
    height: 100px; 
    width: 100px; 
    background: #FF00FF; 
    position: absolute; 
    right: -100px; 
} 

JS:

$(document).ready(function(){ 
    $(document).click(function(){ 
     var bodyHeight = document.body.clientHeight; 
     var randPosY = Math.floor((Math.random()*bodyHeight)); 
     $('#box').css('top', randPosY); 
     $("#box").animate({left: '-100px'}, 5000); 
    }); 
}); 
  1. 怎樣才能使一個新的實例DIV出現(隨機y位置)每次點擊在文件上?
  2. 我的隨機y位置在jQuery中按以下方式計算,但從我的css中獲得它的值height: 500px; - 我該如何使此值具有響應性?
+0

響應或隨機? –

+0

在這個例子中,我假設身體的高度爲500px。查詢中的隨機函數已經計算了0到500之間的隨機y位置。不過,我希望值的大小代表窗口的實際高度...目前檢查出https://stackoverflow.com/questions/12781205/live-detect-browser-size-jquery-javascript – birgit

回答

3

使用函數構造函數添加一個div,其中每一個使用.box類,而不是#box的對象實例:

fiddle

function SlidingDiv(bodyHeight){ 
    this.randPosY = Math.floor((Math.random()*bodyHeight)); 
    this.$div = $("<div>").addClass('box').appendTo('.outer'); 
}; 

SlidingDiv.prototype.slide = function(){ 
    this.$div.css('top', this.randPosY); 
    this.$div.animate({left: '-100px'}, 5000); 
}; 

$(document).ready(function(){ 
    $(document).click(function(){ 
     var bodyHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; 
     var div = new SlidingDiv(bodyHeight); 
     div.slide(); 
    }); 
}); 

編輯:要刪除div的,你可以嘗試完整的功能:

SlidingDiv.prototype.slide = function() { 
    this.$div.css('top', this.randPosY); 
    this.$div.animate({ 
     left: '-100px', 
     duration: 5000, 
     complete: function() { this.$div.remove(); }.bind(this) 
    }); 
}; 
+0

謝謝你!那就是訣竅。這些箱子仍然在屏幕外。我怎麼能清除他們不填滿緩存?看起來.hide()函數只是使它們不可見,但實際上並沒有從畫布中移除它們。 – birgit

+0

@birgit - 見編輯,提琴:https://jsfiddle.net/drthmwbo/3/ – Data

+0

謝謝@Data - 更新後的代碼似乎忽略了'duration'。我注意到Chrome在屏幕上的起始位置無法正常工作。我試着改變CSS和腳本,但框會從屏幕左側開始。任何想法是什麼原因? – birgit