亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > JavaScript > 正文

js運動動畫的八個知識點

2024-05-06 16:16:34
字體:
來源:轉載
供稿:網友
本文給大家分享的是個人在學習js運動動畫的過程中總結的我們需要注意的8個知識點,分別是速度動畫、透明度漸變、緩沖運動、多物體運動、獲取樣式、任意屬性值、鏈式運動和同時運動,非常的詳細,推薦給小伙伴們。
 

今天簡單的學了一下js運動動畫,記錄一下自己的心得體會,分享給大家。

      下面是我整理出來的結果。

知識點一:速度動畫。

      1.首先第一步實現速度運動動畫,封裝一個函數,用到的知識是setInterval(function(){

 

復制代碼代碼如下:

    oDiv.style.left=oDiv.offsetLeft+10+"px";
  },30).

 

  對于這里為什么要用到offsetLeft,我特意百度了一下,我得到的有用信息是:

  a.offsetLeft和left的相同之處都是表示子節點相對于父節點的左位置。
  b.但是left是既可以讀又可以寫的,而offsetLeft是只讀的;
  c.并且offsetLeft是沒有單位的,獲取子節點位置的時候后面不帶px。

  這里在引申一下其他的知識,感謝這位博主,http://blog.163.com/hongshaoguoguo@126/blog/static/18046981201372885729561/。

  2.讓運動的節點停止下來,這里我們用if語句做一個驗證,如果offsetLeft==0,clearInterval(timer),這里的timer應該事先初始化=null,然后將之前的那個運動動畫賦值給它。

  3.這里有一個問題,如果在運動結束之前再次觸發的運動,那么運動的速度會累加,這里,只要在整個運動開始之前,clearInterval(timer)就可以了。

  4.設置移入移除效果,給運動設置參數,一個是速度speed,一個是目標位置iTarget,我們發現速度也是可以通過ITarget的位置來判斷的,所以只需要一個參數即可。

知識點二:透明度漸變

  1.其實,跟剛剛是差不多的,只不過ITarget的值為透明度而已,流程還是清除定時器再開一個定時器判斷等等。

  2.定義一個參數alpha=透明度,注意定時器里面應該這樣寫:

 

復制代碼代碼如下:

  alpha+=speed;
  oDiv.style.filter='alpha(opacity:'+alpha+')';         //這是非常重要的一種方法,注意是這樣寫的
  oDiv.style.opacity=alpha/100;            //注意不要忘記除以100

 

  3.以上都是行內樣式。

知識點三:緩沖運動

  1.緩沖運動就是距離越大,速度就愈大,距離越小,速度就越小,即速度與距離有關。

  2.根據上面的說法,對速度進行重新的定義,一開始速度為0,而現在:

 

復制代碼代碼如下:

  var speed=iTarget-oDiv.offsetLeft;

 

  重新定義定時器:

 

復制代碼代碼如下:

  oDiv.style.left=oDiv.offsetLeft+speed+'px';

 

  此時我們發現速度太大了,可以這樣:

 

復制代碼代碼如下:

  var speed=(iTarget-oDiv.offsetLeft)/10;

 

  3.此時會有一個嚴重的問題,因為屏幕的最小單位為px,所以會出現最終的left值為小數,而不為目標的iTarget,可以通過判斷來解決,這里要引入Math.floor(),這是向下取整,同樣還有Math.ceil(),這是向上取整。在定義speed后我們這樣寫:

 

復制代碼代碼如下:

  speed=speed>0?Math.ceil(speed):Math.floor(speed);            

 

  這樣就可以完全保證速度都是整數,并且在臨界值上都為0。

知識點四:多物體運動  

  1.先獲取所有的物體,形成一個數組,然后再用for循環來做(這種方法多么經典呀!),在for循環中添加節點事件,在函數中可以用this代替當前的節點,eg:startMove(this,iTarget),定義函數時startMove(obj,iTarget).

  2.取當前寬度offsetWidth的時候就要用obj的值了。

  3.當鼠標移動特別快的時候,節點的寬度未能恢復原狀,這是因為定時器是大家公用的定時器,上一個節點還未恢復原狀下一個節點就已經清除定時器了,解決的辦法就是給每一個節點加一個index,就是在上面的for循環中加上aDiv[i].timer=null;然后再定義函數中用obj.timer替換timer。由此我們要注意共用定時器會出事的。

  4.透明度的運動中,alpha代替了speed,但是即使定時器不共用,多物體的運動也會出現問題,這是因為alpha公用的原因,導致各物體相互撕扯,解決辦法就是可以像timer那樣在for循環中給每個節點都分配alpha。

      總結:解決沖突問題,要么初始化,要么個性化。

知識點五.獲取樣式

  1.在改變節點寬度(移入大,移除?。┑亩〞r器中,如果給節點添加一個border邊框,那么在移入的時候比目標節點小,移出的時候比目標節點大。注意width+padding+scrollbar(滾動條)+border,所以原因就是每次offset都會增加border*2-(定時器中每次減少的數值)。

  2.解決以上問題的辦法就是在行內寫入width,并且使用parseInt(oDiv.style.width)代替offsetLeft,但是并不能總是寫在行內,所以我們定義一個函數,獲取鏈入樣式:

 

復制代碼代碼如下:

  function getStyle(obj,attr){
    if(obj.currentStyle){
      return obj.currentStyle[attr];                       //ie瀏覽器 
    }
    else{
      return getComputerStyle(obj,false)[attr];          //其他瀏覽器
    }
  }

 

  3.對于font-size這種,在js里只有fontSize這一種寫法。

知識點六:任意屬性值

  1.所有的offset-的都會有小bug,要用getStyle函數,這個函數經常和parseInt()一起用,并通常用變量保存。

  2.在寫style.width的時候,也可以寫成style['width']?! ?/p>

  3.對于多物體的屬性值調整,可以將樣式作為參數封裝一下,這樣多物體屬性的函數就包括了(obj,attr,iTarget)這三個屬性值。

  4.以上的這個運動框架是不適合于透明度變化的,因為透明度都是小數的,因為兩個原因,第一是parseInt,第二是attr=...+px,這里我們可以用一個if判讀來對透明度進行單獨處理,將parseInt換成parseFloat,去掉px。

  5.計算機本身是有一個bug的,0.07*100并不等于7,所以我們引入一個函數是Math.round(),這是一個四舍五入的值。

知識點七:鏈式運動

  1.引入move.js框架。

  2.傳入一個回調函數fn(),用if判斷,如果有fn(),那么執行fn()。

知識點八:同時運動

  1.如果寫兩個運動函數來控制同時運動,會發生函數覆蓋。

  2.使用json這個知識點,json的循環是使用for(i in json),運動函數的參數為obj,json,fn。

  3.沒有iTarget這個值了,取而代之的是json[attr].

  寫到這里,就已經完全結束了,希望大家能夠喜歡。也希望對大家學習js運動動畫能夠有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩在线免费| 精品日韩中文字幕| 成人在线视频网站| 欧美激情视频在线| 亚洲丁香久久久| 国内精品一区二区三区| 深夜精品寂寞黄网站在线观看| 精品中文字幕久久久久久| 国产精品成人一区二区| 国产精品麻豆va在线播放| 久久艹在线视频| 黄色一区二区在线观看| 欧美激情影音先锋| 亚洲精品成人网| 国产精品高清在线观看| 国产欧洲精品视频| 国产精品高清在线| 成人国产在线激情| 国产精品h片在线播放| 97精品国产91久久久久久| 97婷婷涩涩精品一区| 欧美大片网站在线观看| 91av在线视频观看| 国产美女高潮久久白浆| 插插插亚洲综合网| 日韩二区三区在线| 97婷婷大伊香蕉精品视频| 欧美午夜xxx| 成人观看高清在线观看免费| 亚洲欧美综合区自拍另类| 国产精品爱啪在线线免费观看| 成人在线激情视频| 久久综合五月天| 亚洲精选在线观看| 在线色欧美三级视频| 日韩av综合中文字幕| 国模精品视频一区二区| 欧美一级高清免费播放| 亚洲男人天堂手机在线| 国产日本欧美在线观看| 亚洲精品电影网在线观看| 亚洲精品中文字幕女同| 欧美日韩成人黄色| 尤物99国产成人精品视频| 国产亚洲成精品久久| 亚洲成人a**站| 奇米影视亚洲狠狠色| 亚洲色图狂野欧美| 欧美日韩在线视频观看| 成人免费观看49www在线观看| 18性欧美xxxⅹ性满足| 2019中文字幕免费视频| 久久久国产视频| 日韩精品极品在线观看播放免费视频| 久久精品99久久久久久久久| 最近2019好看的中文字幕免费| 成人激情黄色网| 午夜精品久久久久久99热软件| 亚洲女人天堂色在线7777| 欧美激情啊啊啊| 久久人人爽人人爽人人片av高请| 亚洲激情在线视频| 欧美午夜视频一区二区| 亚洲午夜av久久乱码| 97精品国产91久久久久久| 亚洲电影成人av99爱色| 欧美激情亚洲精品| 最近更新的2019中文字幕| 精品少妇一区二区30p| 国产精品自拍视频| 中文字幕在线观看亚洲| 亚洲性夜色噜噜噜7777| 亚洲欧美激情精品一区二区| 欧洲成人午夜免费大片| 最近中文字幕mv在线一区二区三区四区| 97精品伊人久久久大香线蕉| 亚洲一区久久久| 搡老女人一区二区三区视频tv| 日韩在线观看免费全集电视剧网站| 一区二区成人av| 久久av红桃一区二区小说| 欧美性生活大片免费观看网址| 亚州成人av在线| 午夜精品福利在线观看| 国产日韩欧美视频在线| 全色精品综合影院| 91精品国产高清久久久久久| 国产精品亚洲自拍| 欧美极品少妇xxxxⅹ裸体艺术| 免费av在线一区| 亚洲电影免费观看| 91国偷自产一区二区三区的观看方式| 欧美激情国产高清| 日本亚洲欧美成人| 欧美日韩一区二区免费视频| 最近2019年日本中文免费字幕| 欧美成人手机在线| 精品国产91久久久久久老师| 欧美成年人网站| 亚洲色图15p| 成人久久久久久| 日韩在线视频播放| 日本精品免费一区二区三区| 国产精品极品美女粉嫩高清在线| 精品国产区一区二区三区在线观看| 国产精品久久国产精品99gif| 亚洲深夜福利网站| 日本三级久久久| 一区二区在线视频播放| 日韩电影在线观看免费| 国产精品综合久久久| 亚洲一区二区三区视频| 国产精品视频午夜| 亚洲2020天天堂在线观看| 国产精品久久久久久久久| 国产女同一区二区| 主播福利视频一区| www.日本久久久久com.| 日韩av电影在线网| 精品国产一区久久久| 亚洲色图第一页| 精品国产区一区二区三区在线观看| 亚洲国产成人91精品| 欧美中文字幕视频在线观看| 日本在线精品视频| 九九热精品视频| 日本成人在线视频网址| 国产精品久久久久久久久免费看| 97视频在线观看免费| 色偷偷888欧美精品久久久| 精品国产91久久久久久| 色老头一区二区三区| 国产精品日韩在线一区| 欧美一区二区三区艳史| 欧美激情免费看| 日韩高清不卡av| 久久免费精品日本久久中文字幕| 亚洲福利在线播放| 成人免费福利视频| 日韩中文字幕在线播放| 亚洲а∨天堂久久精品9966| 国产一区av在线| 美女啪啪无遮挡免费久久网站| 欧美性做爰毛片| 中文字幕精品一区久久久久| 欧美做受高潮1| 91探花福利精品国产自产在线| 欧美国产第一页| 亚洲欧美日韩国产中文专区| 国产精品一区二区三区毛片淫片| 国产精品视频成人| 精品久久久久久亚洲国产300| 欧美激情一二三| 一个色综合导航| 精品欧美aⅴ在线网站| 欧美国产日本在线| 日韩av网址在线观看| 成人乱人伦精品视频在线观看| 91日韩在线视频| 久久五月情影视| 欧美成人剧情片在线观看| 欧美日韩国产专区| 国产精品亚洲美女av网站| 久久精品这里热有精品|