? ? ? ? ?廢話不多說,直接開工户秤,用大腦和代碼說話。
? ? ? 躁動的小球效果展示 ? ? ? ? ?其實是個動態(tài)的頁面讽营,我也不知道怎么截取動態(tài)圖片虎忌,不好意思,各位橱鹏。
? ? ? ? ? ? ? ? ?思路分析加代碼
為了讓各位讀者更加清晰的明白整個制作過程膜蠢,我采用邊分析邊寫代碼的形式來給大家呈現(xiàn)。
1莉兰、搭建模塊:
其實我們的模塊只有兩個挑围,一個背景,一個是小球糖荒。
<body>
? ? ? ? ? ? ? <div ?id="wrap"> ? </div> ?
</body>
//這個div是什么呢杉辙?就是我們需要放置小球的區(qū)域,也是我們的背景區(qū)域。我給他一個起了名字叫做wrap
2捶朵、給我們搭建的模塊添加應(yīng)有的屬性
<style>
//全局模式蜘矢,去掉所有的內(nèi)邊距和外邊距
*{
padding: 0 ; ?
margin: 0 ;
}
// 給html和body的高度設(shè)定100%是為了可以使我們的效果不會因為窗口的大小而受到影響
也是為了我們創(chuàng)建的div好賦值。
html,bady{
height:100%;
}
//給創(chuàng)建的div添加屬性综看。
#wrap{height:100%;
background-color:black;
position:relative;
overflow:hidden;
}
// ?給小球添加屬性
.boll{
border-radius:50%;
position:absolute;
}
</style>
好了品腹,準(zhǔn)備工作已經(jīng)做好了,下面我們要開始JS的代碼操作了红碑。
3舞吭、js實現(xiàn)動態(tài)的效果
<script ?type="text/javascript">
//思路分析、我們要創(chuàng)建的小球需要他有什么效果呢析珊?
1羡鸥、隨機產(chǎn)生在任意的地方
2、隨機的大小 ?
3忠寻、隨機的顏色
4惧浴、隨機的運動速度
5、隨機的運動方向
//OK奕剃,以上可以看出衷旅,它具備五個隨機的屬性哑姚,那么我就定義一個隨機函數(shù)放在那,以后隨時用到隨時調(diào)用芜茵,已達(dá)到結(jié)構(gòu)的最優(yōu)化。
// 定義一個隨機數(shù),產(chǎn)生(min,max)范圍內(nèi)的隨機數(shù)
function ?randFn (min,max){
return ?parseInt(Math.random()*(max-min)+min)
}
// ?下面我們需要創(chuàng)建構(gòu)造函數(shù)倡蝙,由構(gòu)造函數(shù)獲取小球?qū)ο?/p>
function ?Boll (){
// 小球的尺寸(大小)
var wh = ranFn(20,50);
this.width = wh;
this.height = wh;
// ?小球的初始坐標(biāo)九串,即從哪個地方出現(xiàn)小球
this.left = randFn(0,document.body.offsetWidth-wh);
this.top = randFn(0,document.body.offsetHeight-wh);
//有人可能對上面的“document.body.offsetWidth-wh”代碼不是很明白 。document.bady.offsetWidth是什么意思呢寺鸥?就是拿頁面可視距離(邊框的距離)減去小球的距離就是允許小球出現(xiàn)的距離猪钮。附圖一張,上下距離一樣的理解方式胆建。
// 我們繼續(xù)構(gòu)造小球?qū)ο??下面是隨機顏色烤低。注意,獲取隨機顏色一定要用rgbaXXXX的樣式來獲取笆载。還要注意拼接不有漏了加號或引號和逗號扑馁。
this.color = 'rgba('+randFn(0,256)+','+randFn(0,256)+','+randFn(0,256)+','+Math.random()+')';
//小球的運動隨機速度
this.speedX = randFn(-10,10) ? //橫向移動 ?加載時可以隨機的向左或向右移動
this.speedY = randFn(-10,10) ?//縱向移動 ? 加載時可以隨機的向上或向下移動
// ?開辟屬性,保存創(chuàng)建出來的DOM節(jié)點
this.div = document.createElement('div');
}
// 添加繪制小球的方法
Boll.prototype.draw = function(){
this.div.className = 'boll';
this.div.style.width = this.width+'px';
this.div.style.height = this.height+'px';
this.div.style.left = this.left+'px';
this.div.style.top = this.top+'px';
this.div.style.backgroundColor = this.color;
//下面把創(chuàng)建好的標(biāo)簽拼接到文檔流里去
var wrap = document.querySelector('#wrap');
wrap.appendChild(this.div);
}
// 設(shè)置定時器凉驻,設(shè)置判斷條件腻要,讓小球在條件內(nèi)運動
Boll.prototype.run = function(){
var self = this;
setInterval(function(){
//架設(shè)if判斷邊界情況
if(self.div.offsetLeft+self.div.offsetWidth>=document.body.offsetWidth || self.div.offsetLeft<0){
self.speedX *=-1;
}
if(self.div.offsetTop+self.div.offsetHeight>=document.body.offsetHeight||self.div.offsetTop<0){
self.speedY *=-1;
}
self.div.style.left = self.div.offsetLeft+self.speedX+'px'
self.div.style.top = self.div.offsetTop+self.speedY+'px'
},10)
}
// ?好了 調(diào)用起來 ?試試吧
window.onload = function(){
for(var i= 0;i<100;i++{
var boll = new Boll()
boll.draw()
boll.run()
}
}
</script>
辛苦各位客官,謝謝涝登。