jQuery 煙花效果(運(yùn)動相關(guān))
效果圖
- $(function(){
- $(document).click(function(event){
- /*1.創(chuàng)建DIV并插入到body當(dāng)中
- *2.設(shè)置其初始位置:TOP為屏幕的高度,left為鼠標(biāo)點(diǎn)擊時(shí),鼠標(biāo)的pageX值;
- */
- //創(chuàng)建DIV
- var $div = $("<div/>");
- var eLeft = event.pageX;
- var etop = event.pageY;
- var cHeight = document.documentElement.clientHeight;
- //設(shè)定顏色、大小,和其初始化的位置
- $div.css({"width":4,"height":15,"background-color":"red","top":cHeight,"left":eLeft});
- //插入到頁面的body當(dāng)中去;
- $("body").append($div);
- //不要出現(xiàn)滾動條
- $("body").css("overflow","hidden");
- //讓DIV向上移動,并且移動到鼠標(biāo)位置后,刪除這個(gè)DIV元素,之后執(zhí)行煙花效果;
- $div.animate({"top":etop},700,function(){
- //移除DIV
- $(this).remove();
- /*煙花效果
- *1.煙花是很多個(gè)DIV構(gòu)成
- *2.每個(gè)煙花的顏色不一樣
- *3.煙花的位置也不一樣
- *4.煙花散開方向不一樣
- *5.煙花有下墜感覺
- */
- //用循環(huán)造建很多個(gè)DIV,來表示煙花
- for(i=0;i<20;i++){
- $("body").append($("<div class='yh'></div>"));
- }
- /*煙花的顏色是隨機(jī)的,而且是用16進(jìn)制表示色值,所以用隨機(jī)數(shù)結(jié)合16進(jìn)制;
- *16進(jìn)制的最大值ffffff,轉(zhuǎn)換成十進(jìn)制16777215;
- *Math.random()*16777215公式可以得到0-16777215之間的數(shù),因?yàn)槭切?shù),所以要用到取整;
- *Math.ceil(Math.random()*16777215)生成一個(gè)在顏色值范圍內(nèi)的,隨機(jī)的十進(jìn)制值;
- *Math.random()*9+1公式可以得到1-10之間的數(shù),以此類推
- *.toString(16)方法,是把得到的十進(jìn)制,轉(zhuǎn)換成16進(jìn)制,也就是隨機(jī)的顏色值了;
- */
- var sjColor = ""
- function changColor(){
- sjColor = Math.ceil(Math.random()*16777215).toString(16)//;
- //當(dāng)這個(gè)產(chǎn)生的隨機(jī)的顏色值,不足6位數(shù)的進(jìn)候,需要補(bǔ)齊,又不改變其值,所以要在這個(gè)數(shù)的前面加零;
- while(sjColor.length<6){
- sjColor = "0"+sjColor;
- }
- }
- //設(shè)置煙花DIV的顏色和位置、散開,墜落
- $(".yh").css({"width":3,"height":3,"top":etop,"left":eLeft});
- /*煙花散開要設(shè)左和上
- *Math.random()*20-20這里要減20,是因?yàn)闊熁ㄊ菑闹行狞c(diǎn)的左右散開的,
- *最小隨機(jī)數(shù)時(shí)0-10 = -10,最大隨機(jī)數(shù)時(shí)20-10=10;所以就是正負(fù)10之間
- */
- $(".yh").each(function(index, element) {
- var $this = $(this);
- changColor()
- var yhX = Math.random()*400-200;
- var yhY = Math.random()*600-300;
- $this.
- css({"background-color":"#"+sjColor,"width":3,"height":3}).
- animate({"top":etop-yhY,"left":eLeft-yhX},500);//散開
- for(i=0;i<30;i++){
- //判斷鼠標(biāo)點(diǎn)擊時(shí)的右邊煙花還是左邊煙花
- if(yhX<0){
- downPw($this,"+");//右下墜
- }else{
- downPw($this,"-");//左下墜
- }
- }
- //下墜效果,即同時(shí)改變煙花元素的X和Y,會有拋物線感覺,然后完成動畫后,刪除這個(gè)煙花元素
- function downPw(odiv,f){
- odiv.animate({"top":"+=30","left":f+"=4"},50,function(){
- setTimeout(function(){odiv.remove()},2000);
- })
- }
- });
- });
- })
- })
先上代碼和效果圖,具體的功能詳解將在第二頁中講到。
#p#
一、功能
點(diǎn)擊頁面出現(xiàn)上圖的效果,并下墜。
二、功能分析
1.點(diǎn)擊時(shí)創(chuàng)建DIV并插入到body當(dāng)中
2.煙花是很多個(gè)DIV構(gòu)成,所以同時(shí)也要?jiǎng)?chuàng)建這些DIV
3.每個(gè)煙花的顏色不一樣,所以需要隨機(jī)函數(shù)處理顏色值
4.煙花的位置也不一樣,所以也需要隨機(jī)函數(shù)處理位置
5.煙花散開方向不一樣
6.煙花要下墜感覺
三、總結(jié):
3.1.隨機(jī)數(shù) Math.random()零到一之間的數(shù);
3.11Math.random()乘以任意一個(gè)數(shù),結(jié)果就是0-這個(gè)乘數(shù)之間的值,
Math.random()*9 結(jié)果就是0-9之間的數(shù)
3.12如果要讓起始值為別一個(gè)指定的數(shù),不為零,就加上這一個(gè)數(shù);
Math.random()*8+2 結(jié)果就是2-10之間的數(shù)
3.13如果要想正負(fù)之間的數(shù),就減去乘數(shù)的一半
Math.random()*8-4,其結(jié)果就是+4和-4之間的數(shù)
3.2運(yùn)動核心
3.21就是讓元素在當(dāng)前頁面中的X坐標(biāo),或Y坐標(biāo) 發(fā)生改變(加、減、乘、除等,只要能讓這個(gè)值改變的運(yùn)算,都行)
3.22怎么改變才能看起來是運(yùn)動的呢?
每次改變時(shí),都是參考元素當(dāng)前的X或Y坐標(biāo)。(因?yàn)槊恳淮蔚母淖?,這個(gè)元素的坐標(biāo)就會變化)所以始終都要獲取到當(dāng)前這個(gè)元素改變之后的X或Y坐標(biāo)值。
3.3隨機(jī)顏色值
顏色值,是十六進(jìn)制數(shù)。而這個(gè)值也是有范圍的,所以我們要先取得其范圍。
000000-FFFFFF。然后要轉(zhuǎn)換成十進(jìn)制的范圍
0-16777215。有了這個(gè)范圍就可以利用隨機(jī)數(shù),生成在這個(gè)范圍內(nèi)的色值了。當(dāng)然最后還是要轉(zhuǎn)成十六進(jìn)制,并且不要忘記在色值前面加"#"號
3.4下墜感
其實(shí)就是讓元素有,一個(gè)拋物線的變化,即讓元素的X和Y的值,同時(shí)間變化。
(在使用setTimeout的時(shí)候,里面的this,不要指向錯(cuò)了!~~)