欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript與css3動畫結合使用小結

 更新時間:2015年03月11日 09:05:56   投稿:hebedich  
本文給大家講述的是如何使用javascript結合CSS動畫來實現(xiàn)一些占用資源更少,更優(yōu)化的動畫效果,思路十分巧妙,這里推薦給小伙伴們參考下。

當Html5,css3已漸漸成為主流的時候,我還非常習慣的用js去做一些簡單的動畫。因為在桌面瀏覽器上, 并非所有的都支持css3。用戶也倒是很奇怪,用戶習慣并不是每個用戶都可以被培養(yǎng)。總有不少人會覺得win7.win8沒xp好用。但手機方面就大不一樣了,手機瀏覽器對html5和css3的支持還是很不錯的。但手機硬件處理能力卻又十分有限。在四核、八核手機橫行的今天,依然有像我這樣使用雙核或單核手機的。js雖好,單奈何接觸不多,調不好那種感覺。一個簡單的頁面滑動,在i7的pc上運行十分流暢,可是,在我的雙核手機上就卡、頓、卡、頓。令人十分郁悶。為此,我也是尋找了很久很久,看了很多很多。終于在不就之前,找到了一種還算簡單的方法:使用css3去執(zhí)行動畫。

  在以前,對于動畫除了Jquery的animate等動畫函數(shù)外,更多的是使用setTimeout,setInterval,這樣循環(huán)的去改變一個元素的margin、width、top等屬性。也正是如此,才有了我的困惑。

  首先,setTimeout,setInterval 這貨并非你設置0ms它就能一直一直的去執(zhí)行。曾經(jīng)在iscroll里調試的時候無意中發(fā)現(xiàn)了這個秘密。原來Timer延時的計算依靠的是瀏覽器的內置時鐘,而時鐘的精確度又取決于時鐘更新的頻率。IE8及其之前的IE版本更新間隔為15.6毫秒。完了,我想它10ms執(zhí)行1px位移,它還不能準時的干這事。

  而卡又是怎么回事呢?卡,因為代碼寫的不好。畢竟js是單線程的,一旦有耗時的動作那么UI就可能不響應了。雖然我們使用了setTimeout,但正是因為setTimeout讓我們看上去界面沒死可動作卻又不流暢了。因為這次setTimeout執(zhí)行之后,在下次執(zhí)行前,中間這個間隔里很可能遇到另一個耗時的動作,那么,setTimeout的執(zhí)行就無限后延。然后呢?卡!然而,卡還能有下一個原因,改變原始屬性時不小心觸發(fā)瀏覽器Layout(即:重布局)。這個問題說它不耗時呢,卻又耗時,說它耗時呢,很多時候卻又可以忽略。但很多時候其實是不能忽略的。

  除了上面這兩段,還有一個問題,就是在很多手機上總感覺是一幀一幀的,而且還可能是一幀長一幀短。這真是能把人都搞廢的節(jié)奏。為何會這樣呢,依然和settimeout的推遲有一定的關系。丟幀。這個問題有涉及到顯示器的刷新頻率問題。實在太復雜了。

  最后選擇了CSS3,js動態(tài)的改變元素的屬性,使用transition來控制動畫執(zhí)行時間。舉個例子:

復制代碼 代碼如下:

<div id="test" style="transition:all 1s ease; width:100px;" ></div>

js:

復制代碼 代碼如下:

$("#test").width(200);

  這樣1秒之后這個div的寬度會變成200px。不是孫悟空變桃子一樣瞬間變大,慢慢的趕腳,不卡不頓。而且使用css動畫有個好處,它不受耗時js的影響。雖然瀏覽器中UI線程與js線程是互斥,但這一點對css動畫不成立,并且很多瀏覽器還能啟用硬件加速(比如:Chrome)。雖然瀏覽器重布局普通情況下感覺不是很明顯,但還是應該盡量避免大面積的重布局。so在動畫元素上加上-webkit-transform: translateZ(0);或者-webkit-transform: translate3d(0,0,0);這樣瀏覽器會獨立渲染這一層。即便是重布局無法避免,這樣面積也小些。而使用translate取代margin也確實是一個十分明智的決定。

  最后附上一些常用的改變時會觸發(fā)重布局的屬性: 
   

復制代碼 代碼如下:

   width
   height
   padding
   margin
   display
   border-width
   border
   min-height

以上就是本文所述的全部內容了,希望對大家學習javascript和CSS3能夠有所幫助,同時不足之處煩請補充,諒解。

相關文章

  • 淺談js里面的InttoStr和StrtoInt

    淺談js里面的InttoStr和StrtoInt

    下面小編就為大家?guī)硪黄獪\談js里面的InttoStr和StrtoInt。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • FF和IE之間7個JavaScript的差異

    FF和IE之間7個JavaScript的差異

    盡管 JavaScript 歷史上使用冗長而令人生厭的代碼塊來標的特定瀏覽器的時期已經(jīng)結束了,但是偶爾使用一些簡單的代碼塊和對象檢測來確保一些代碼在用戶機器上正常工作依然是必要的。
    2009-05-05
  • 讓你5分鐘掌握9個JavaScript小技巧

    讓你5分鐘掌握9個JavaScript小技巧

    這篇文章是國外翻譯JavaScript小技巧,幾個不錯的知識點,方便學習js的朋友,感覺內容非常不錯特分享一下,需要的朋友可以參考下
    2018-06-06
  • WebSocket中心跳檢測與斷開重連機制詳解

    WebSocket中心跳檢測與斷開重連機制詳解

    心跳檢測是指在WebSocket連接過程中定時向服務端發(fā)送和接收心跳消息,來確定當前連接是否是正常狀態(tài)的檢測機制,斷開重連是指在WebSocket不正常斷開連接后,進行重新連接的策略,下面我們就來看看這二者的具體實現(xiàn)吧
    2024-01-01
  • 淺析JS原始值和引用值問題

    淺析JS原始值和引用值問題

    如果一個值是引用類型的,那么它的存儲空間將從堆中分配。由于引用值的大小會改變,所以不能把它放在棧中,否則會降低變量查尋的速度。相反,放在變量的??臻g中的值是該對象存儲在堆中的地址,這篇文章主要介紹了JS原始值和引用值 ,需要的朋友可以參考下
    2021-12-12
  • 用JS控制回車事件的代碼

    用JS控制回車事件的代碼

    在寫代碼的時候偶爾會碰到被回車按鈕所糾結的時候,例如上周客戶反應我們的產(chǎn)品在頁面按回車后,總是自動登出,而不是提交數(shù)據(jù),客戶對此也是意見很大。
    2011-02-02
  • 使用canvas實現(xiàn)仿新浪微博頭像截取上傳功能

    使用canvas實現(xiàn)仿新浪微博頭像截取上傳功能

    用戶提供圖像大小尺寸不合適,如何用截取上傳呢?接下來小編教大家使用使用canvas實現(xiàn)仿新浪微博頭像截取上傳功能解決問題,需要的朋友一起學習吧。
    2015-09-09
  • 詳解一個小實例理解js原型和繼承

    詳解一個小實例理解js原型和繼承

    這篇文章主要介紹了js原型和繼承,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • JavaScript實現(xiàn)淺拷貝與深拷貝的方法分析

    JavaScript實現(xiàn)淺拷貝與深拷貝的方法分析

    這篇文章主要介紹了JavaScript實現(xiàn)淺拷貝與深拷貝的方法,結合實例形式總結分析了JavaScript淺拷貝與深拷貝的定義與使用方法,需要的朋友可以參考下
    2018-07-07
  • js通過canvas生成圖片縮略圖

    js通過canvas生成圖片縮略圖

    對于生成縮略圖一般做法是通過后端語言php等來生成,但是為了給服務器減壓,我們或許可以從前端來著手,先生成好不同尺寸的縮略圖,傳給后端,而后端只需要將前端傳過來的圖片進行存儲就好了
    2020-10-10

最新評論