Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 亚洲视频综合网,日韩亚洲国产综合久久久,一二三区视频

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          視頻分割軟件哪個好?

          視頻分割軟件哪個好?
          • 件版本:
          • 軟件大小:
          • 軟件授權:
          • 適用平臺:Win7
          • 下載http://dl.pconline.com.cn/download/407561.html

          視頻分割軟件哪個好?

          1、視頻編輯大師

          視頻編輯大師是一款專業的視頻編輯軟件,包含視頻合并專家、AVI MPEG視頻合并專家、視頻分割專家、視頻截取專家、RMVB視頻合并專家的所有功能,是視頻愛好者必備的工具。

          2、視頻剪切合并器

          軟件名稱:

          視頻剪切合并器是一款目前剪切視頻速度最快、支持無損切割視頻、最好用的免費視頻剪切合并工具。剪切一個100MB大小的視頻文件只需要10秒左右時間,是目前最快的視頻剪切工具。它可以對AVI、MP4、 FLV、 MOV、 RMVB、3GP、WMV等視頻格式進行任意時間段的剪切,還支持多個視頻文件的合并。頻剪切合并器操作非常簡單,只需要將你的視頻文件用視頻剪切合并器打開,選擇好你想剪切的視頻起始位置和結束位置,點擊開始剪切按鈕,立刻搞定!支持無損剪切AVI、 MP4、 FLV、 MOV、RMVB、3GP、WMV等各種視頻格式,剪切后視頻清晰度,畫面大小等不變。視頻合并支持任意的不同視頻格式之間的合并,比如你可以把FLV格式和MP4格式的視頻合并在一起,功能非常強大。

          會聲會影(Ulead Video Studio)10是一套功能強大、有趣好用的個人家庭影片剪輯軟件。通過它完整強大的編輯模式您可以剪輯出個人風格,點綴個人影片。和會聲會影8比較,會聲會影10速度提升了很大,轉換和輸入輸出視頻簡直是得心應手!支持更多的格式,采集、編輯、加字幕、輸出、刻盤...那是相當的好用啊。

          4、易杰視頻分割器

          易杰視頻分割器是一款功能強大的視頻分割工具,它可以幫助您將幾乎所有的視頻格式,如:RM、RMVB、VOB、DAT、VCD、SVCD、ASF、MOV、QT、MPEG、MPG、WMV、MP4、3GP、M4V、AVI、FLV、MKV、MOD、TOD、MTS、M2TS、TS、F4V、DV等視頻格式按照您設置的時間分割成小的視頻文件,可以輸出FLV、AVI、VCD、SVCD、DVD、WMV等多種視頻格式,支持多個視頻文件批量分割。軟件具有分割簡單、快速、高畫質等特點,還可以支持分割完成后自動關機。

          接:https://juejin.im/book/5b936540f265da0a9624b04b

          《高性能網站建設指南》的作者 Steve Souders 曾在一篇博客中提到:

          我的大部分性能優化工作都集中在 JavaScript 和 CSS 上,從早期的 Move Scripts to the Bottom 和 Put Stylesheets at the Top 規則。為了強調這些規則的重要性,我甚至說過,“JS 和 CSS 是頁面上最重要的部分”。

          幾個月后,我意識到這是錯誤的。圖片才是頁面上最重要的部分。

          我關注 JS 和 CSS 的重點也是如何能夠更快地下載圖片。圖片是用戶可以直觀看到的。他們并不會關注 JS 和 CSS。確實,JS 和 CSS 會影響圖片內容的展示,尤其是會影響圖片的展示方式(比如圖片輪播,CSS 背景圖和媒體查詢)。但是我認為 JS 和 CSS 只是展示圖片的方式。在頁面加載的過程中,應當先讓圖片和文字先展示,而不是試圖保證 JS 和 CSS 更快下載完成。

          這段話可謂字字珠璣。此外,雅虎軍規和 Google 官方的最佳實踐也都將圖片優化列為前端性能優化必不可少的環節——圖片優化的優先級可見一斑。

          就圖片這塊來說,與其說我們是在做“優化”,不如說我們是在做“權衡”。因為我們要做的事情,就是去壓縮圖片的體積(或者一開始就選取體積較小的圖片格式)。但這個優化操作,是以犧牲一部分成像質量為代價的。因此我們的主要任務,是盡可能地去尋求一個質量與性能之間的平衡點。

          2019 年,圖片依然很大

          這里先給大家介紹 HTTP-Archive 這個網站,它會定期抓取 Web 上的站點,并記錄資源的加載情況、Web API 的使用情況等頁面的詳細信息,并會對這些數據進行處理和分析以確定趨勢。通過它我們可以實時地看到世界范圍內的 Web 資源的統計結果。

          截止到 2018 年 8 月,過去一年總的 web 資源的平均請求體積是這樣的:

          而具體到圖片這一類的資源,平均請求體積是這樣的:

          當然,隨著我們工程師在性能方面所做的努力越來越有成效,平均來說,不管是資源總量還是圖片體積,都在往越來越輕量的方向演化。這是一種值得肯定的進步。

          但同時我們不得不承認,如圖所示的這個圖片體積,依然是太大了。圖片在所有資源中所占的比重,也足夠“觸目驚心”了。為了改變這個現狀,我們必須把圖片優化提上日程。

          不同業務場景下的圖片方案選型

          時下應用較為廣泛的 Web 圖片格式有 JPEG/JPG、PNG、WebP、Base64、SVG 等,這些格式都是很有故事的,值得我們好好研究一把。此外,老生常談的雪碧圖(CSS Sprites)至今也仍在一線的前端應用中發光發熱,我們也會有所提及。

          不談業務場景的選型都是耍流氓。下面我們就結合具體的業務場景,一起來解開圖片選型的神秘面紗!

          前置知識:二進制位數與色彩的關系

          在計算機中,像素用二進制數來表示。不同的圖片格式中像素與二進制位數之間的對應關系是不同的。一個像素對應的二進制位數越多,它可以表示的顏色種類就越多,成像效果也就越細膩,文件體積相應也會越大。

          一個二進制位表示兩種顏色(0|1 對應黑|白),如果一種圖片格式對應的二進制位數有 n 個,那么它就可以呈現 2^n 種顏色。

          JPEG/JPG

          關鍵字:有損壓縮、體積小、加載快、不支持透明

          JPG 的優點

          JPG 最大的特點是有損壓縮。這種高效的壓縮算法使它成為了一種非常輕巧的圖片格式。另一方面,即使被稱為“有損”壓縮,JPG的壓縮方式仍然是一種高質量的壓縮方式:當我們把圖片體積壓縮至原有體積的 50% 以下時,JPG 仍然可以保持住 60% 的品質。此外,JPG 格式以 24 位存儲單個圖,可以呈現多達 1600 萬種顏色,足以應對大多數場景下對色彩的要求,這一點決定了它壓縮前后的質量損耗并不容易被我們人類的肉眼所察覺——前提是你用對了業務場景。

          使用場景

          JPG 適用于呈現色彩豐富的圖片,在我們日常開發中,JPG 圖片經常作為大的背景圖、輪播圖或 Banner 圖出現。

          兩大電商網站對大圖的處理,是 JPG 圖片應用場景的最佳寫照:

          打開淘寶首頁,我們可以發現頁面中最醒目、最龐大的圖片,一定是以 .jpg 為后綴的:

          京東首頁也不例外:

          使用 JPG 呈現大圖,既可以保住圖片的質量,又不會帶來令人頭疼的圖片體積,是當下比較推崇的一種方案。

          JPG 的缺陷

          有損壓縮在上文所展示的輪播圖上確實很難露出馬腳,但當它處理矢量圖形Logo 等線條感較強、顏色對比強烈的圖像時,人為壓縮導致的圖片模糊會相當明顯。

          此外,JPEG 圖像不支持透明度處理,透明圖片需要召喚 PNG 來呈現。

          PNG-8 與 PNG-24

          關鍵字:無損壓縮、質量高、體積大、支持透明

          PNG 的優點

          PNG(可移植網絡圖形格式)是一種無損壓縮的高保真的圖片格式。8 和 24,這里都是二進制數的位數。按照我們前置知識里提到的對應關系,8 位的 PNG 最多支持 256 種顏色,而 24 位的可以呈現約 1600 萬種顏色。

          PNG 圖片具有比 JPG 更強的色彩表現力,對線條的處理更加細膩,對透明度有良好的支持。它彌補了上文我們提到的 JPG 的局限性,唯一的 BUG 就是體積太大

          PNG-8 與 PNG-24 的選擇題

          什么時候用 PNG-8,什么時候用 PNG-24,這是一個問題。

          理論上來說,當你追求最佳的顯示效果、并且不在意文件體積大小時,是推薦使用 PNG-24 的。

          但實踐當中,為了規避體積的問題,我們一般不用PNG去處理較復雜的圖像。當我們遇到適合 PNG 的場景時,也會優先選擇更為小巧的 PNG-8

          如何確定一張圖片是該用 PNG-8 還是 PNG-24 去呈現呢?好的做法是把圖片先按照這兩種格式分別輸出,看 PNG-8 輸出的結果是否會帶來肉眼可見的質量損耗,并且確認這種損耗是否在我們(尤其是你的 UI 設計師)可接受的范圍內,基于對比的結果去做判斷。

          應用場景

          前面我們提到,復雜的、色彩層次豐富的圖片,用 PNG 來處理的話,成本會比較高,我們一般會交給 JPG 去存儲。

          考慮到 PNG 在處理線條和顏色對比度方面的優勢,我們主要用它來呈現小的 Logo、顏色簡單且對比強烈的圖片或背景等。

          此時我們再次把目光轉向性能方面堪稱業界楷模的淘寶首頁,我們會發現它頁面上的 Logo,無論大小,還真的都是 PNG 格式:

          主 Logo:

          較小的 Logo:

          顏色簡單、對比度較強的透明小圖也在 PNG 格式下有著良好的表現:

          SVG

          關鍵字:文本文件、體積小、不失真、兼容性好

          SVG(可縮放矢量圖形)是一種基于 XML 語法的圖像格式。它和本文提及的其它圖片種類有著本質的不同:SVG 對圖像的處理不是基于像素點,而是是基于對圖像的形狀描述。

          SVG 的特性

          和性能關系最密切的一點就是:SVG 與 PNG 和 JPG 相比,文件體積更小,可壓縮性更強

          當然,作為矢量圖,它最顯著的優勢還是在于圖片可無限放大而不失真這一點上。這使得 SVG 即使是被放到視網膜屏幕上,也可以一如既往地展現出較好的成像品質——1 張 SVG 足以適配 n 種分辨率。

          此外,SVG 是文本文件。我們既可以像寫代碼一樣定義 SVG,把它寫在 HTML 里、成為 DOM 的一部分,也可以把對圖形的描述寫入以 .svg 為后綴的獨立文件(SVG 文件在使用上與普通圖片文件無異)。這使得 SVG 文件可以被非常多的工具讀取和修改,具有較強的靈活性

          SVG 的局限性主要有兩個方面,一方面是它的渲染成本比較高,這點對性能來說是很不利的。另一方面,SVG 存在著其它圖片格式所沒有的學習成本(它是可編程的)。

          SVG 的使用方式與應用場景

          SVG 是文本文件,我們既可以像寫代碼一樣定義 SVG,把它寫在 HTML 里、成為 DOM 的一部分,也可以把對圖形的描述寫入以 .svg 為后綴的獨立文件(SVG 文件在使用上與普通圖片文件無異)。

          將 SVG 寫入 HTML:

          將 SVG 寫入獨立文件后引入 HTML:

          <img src="文件名.svg" alt="">
          

          在實際開發中,我們更多用到的是后者。很多情況下設計師會給到我們 SVG 文件,就算沒有設計師,我們還有非常好用的 在線矢量圖形庫。對于矢量圖,我們無須深究過多,只需要對其核心特性有所掌握、日后在應用時做到有跡可循即可。

          Base64

          關鍵字:文本文件、依賴編碼、小圖標解決方案

          Base64 并非一種圖片格式,而是一種編碼方式。Base64 和雪碧圖一樣,是作為小圖標解決方案而存在的。在了解 Base64 之前,我們先來了解一下雪碧圖。

          前置知識:最經典的小圖標解決方案——雪碧圖(CSS Sprites)

          雪碧圖、CSS 精靈、CSS Sprites、圖像精靈,說的都是這個東西——一種將小圖標和背景圖像合并到一張圖片上,然后利用 CSS 的背景定位來顯示其中的每一部分的技術。

          MDN 對雪碧圖的解釋已經非常到位:

          圖像精靈(sprite,意為精靈),被運用于眾多使用大量小圖標的網頁應用之上。它可取圖像的一部分來使用,使得使用一個圖像文件替代多個小文件成為可能。相較于一個小圖標一個圖像文件,單獨一張圖片所需的 HTTP 請求更少,對內存和帶寬更加友好。

          我們幾乎可以在每一個有小圖標出現的網站里找到雪碧圖的影子(下圖截取自京東首頁):

          和雪碧圖一樣,Base64 圖片的出現,也是為了減少加載網頁圖片時對服務器的請求次數,從而提升網頁性能。Base64 是作為雪碧圖的補充而存在的。

          理解 Base64

          通過我們上文的演示,大家不難看出,每次加載圖片,都是需要單獨向服務器請求這個圖片對應的資源的——這也就意味著一次 HTTP 請求的開銷。

          Base64 是一種用于傳輸 8Bit 字節碼的編碼方式,通過對圖片進行 Base64 編碼,我們可以直接將編碼結果寫入 HTML 或者寫入 CSS,從而減少 HTTP 請求的次數。

          我們來一起看一個實例,現在我有這么一個小小的放大鏡 Logo:

          它對應的鏈接如下:

          https://user-gold-cdn.xitu.io/2018/9/15/165db7e94699824b?w=22&h=22&f=png&s=3680
          

          按照一貫的思路,我們加載圖片需要把圖片鏈接寫入 img 標簽:

          <img src="https://user-gold-cdn.xitu.io/2018/9/15/165db7e94699824b?w=22&h=22&f=png&s=3680">
          

          瀏覽器就會針對我們的圖片鏈接去發起一個資源請求。

          但是如果我們對這個圖片進行 Base64 編碼,我們會得到一個很長很長的字符串,我們可以直接用這個字符串替換掉上文中的鏈接地址。你會發現瀏覽器原來是可以理解這個字符串的,它自動就將這個字符串解碼為了一個圖片,而不需再去發送 HTTP 請求。

          Base64 的應用場景

          上面這個實例,其實源自我們 掘金 網站 Header 部分的搜索欄 Logo:

          既然 Base64 這么棒,我們何不把大圖也換成 Base64 呢?

          這是因為,Base64 編碼后,圖片大小會膨脹為原文件的 4/3(這是由 Base64 的編碼原理決定的)。如果我們把大圖也編碼到 HTML 或 CSS 文件中,后者的體積會明顯增加,即便我們減少了 HTTP 請求,也無法彌補這龐大的體積帶來的性能開銷,得不償失。

          在傳輸非常小的圖片的時候,Base64 帶來的文件體積膨脹、以及瀏覽器解析 Base64 的時間開銷,與它節省掉的 HTTP 請求開銷相比,可以忽略不計,這時候才能真正體現出它在性能方面的優勢。

          因此,Base64 并非萬全之策,我們往往在一張圖片滿足以下條件時會對它應用 Base64 編碼:

          1. 圖片的實際尺寸很小(大家可以觀察一下掘金頁面的 Base64 圖,幾乎沒有超過 2kb 的)
          2. 圖片無法以雪碧圖的形式與其它小圖結合(合成雪碧圖仍是主要的減少 HTTP 請求的途徑,Base64 是雪碧圖的補充)
          3. 圖片的更新頻率非常低(不需我們重復編碼和修改文件內容,維護成本較低)

          Base64 編碼工具推薦

          這里最推薦的是利用 webpack 來進行 Base64 的編碼——webpack 的 url-loader 非常聰明,它除了具備基本的 Base64 轉碼能力,還可以結合文件大小,幫我們判斷圖片是否有必要進行 Base64 編碼。

          除此之外,市面上免費的 Base64 編解碼工具種類是非常多樣化的,有很多網站都提供在線編解碼的服務,大家選取自己認為順手的工具就好。

          WebP

          關鍵字:年輕的全能型選手

          WebP 是今天在座各類圖片格式中最年輕的一位,它于 2010 年被提出, 是 Google 專為 Web 開發的一種旨在加快圖片加載速度的圖片格式,它支持有損壓縮和無損壓縮。

          WebP 的優點

          WebP 像 JPEG 一樣對細節豐富的圖片信手拈來,像 PNG 一樣支持透明,像 GIF 一樣可以顯示動態圖片——它集多種圖片文件格式的優點于一身。

          WebP 的官方介紹對這一點有著更權威的闡述:

          與 PNG 相比,WebP 無損圖像的尺寸縮小了 26%。在等效的 SSIM 質量指數下,WebP 有損圖像比同類 JPEG 圖像小 25-34%。 無損 WebP 支持透明度(也稱為 alpha 通道),僅需 22% 的額外字節。對于有損 RGB 壓縮可接受的情況,有損 WebP 也支持透明度,與 PNG 相比,通常提供 3 倍的文件大小。

          我們開篇提到,圖片優化是質量與性能的博弈,從這個角度看,WebP 無疑是真正的贏家。

          WebP 的局限性

          WebP 縱有千般好,但它畢竟太年輕。我們知道,任何新生事物,都逃不開兼容性的大坑。現在是 2018 年 9 月,WebP 的支持情況是這樣的:

          坦白地說,雖然沒有特別慘(畢竟還有親爹 Chrome 在撐腰),但也足夠讓人望而卻步了。

          此外,WebP 還會增加服務器的負擔——和編碼 JPG 文件相比,編碼同樣質量的 WebP 文件會占用更多的計算資源。

          WebP 的應用場景

          現在限制我們使用 WebP 的最大問題不是“這個圖片是否適合用 WebP 呈現”的問題,而是“瀏覽器是否允許 WebP”的問題,即我們上文談到的兼容性問題。具體來說,一旦我們選擇了 WebP,就要考慮在 Safari 等瀏覽器下它無法顯示的問題,也就是說我們需要準備 PlanB,準備降級方案。

          目前真正把 WebP 格式落地到網頁中的網站并不是很多,這其中淘寶首頁對 WebP 兼容性問題的處理方式就非常有趣。我們可以打開 Chrome 的開發者工具搜索其源碼里的 WebP 關鍵字:

          我們會發現檢索結果還是挺多的(單就圖示的加載結果來看,足足有?200?多條),下面大家注意一下這些 WebP 圖片的鏈接地址(以其中一個為例):

          <img src="http://img.alicdn.com/tps/i4/TB1CKSgIpXXXXccXXXX07tlTXXX-200-200.png_60x60.jpg_.webp" alt="手機app - 聚劃算" class="app-icon">
          

          .webp 前面,還跟了一個 .jpg 后綴!

          我們現在先大膽地猜測,這個圖片應該至少存在 jpg 和 webp 兩種格式,程序會根據瀏覽器的型號、以及該型號是否支持 WebP 這些信息來決定當前瀏覽器顯示的是 .webp 后綴還是 .jpg 后綴。帶著這個預判,我們打開并不支持 WebP 格式的 Safari 來進入同樣的頁面,再次搜索 WebP 關鍵字:

          Safari 提示我們找不到,這也是情理之中。我們定位到剛剛示例的 WebP 圖片所在的元素,查看一下它在 Safari 里的圖片鏈接:

          <img src="http://img.alicdn.com/tps/i4/TB1CKSgIpXXXXccXXXX07tlTXXX-200-200.png_60x60.jpg" alt="手機app - 聚劃算" class="app-icon">
          

          我們看到同樣的一張圖片,在 Safari 中的后綴從 .webp 變成了 .jpg!看來果然如此——站點確實是先進行了兼容性的預判,在瀏覽器環境支持 WebP 的情況下,優先使用 WebP 格式,否則就把圖片降級為 JPG 格式(本質是對圖片的鏈接地址作簡單的字符串切割)。

          此外,還有另一個維護性更強、更加靈活的方案——把判斷工作交給后端,由服務器根據 HTTP 請求頭部的 Accept 字段來決定返回什么格式的圖片。當 Accept 字段包含 image/webp 時,就返回 WebP 格式的圖片,否則返回原圖。這種做法的好處是,當瀏覽器對 WebP 格式圖片的兼容支持發生改變時,我們也不用再去更新自己的兼容判定代碼,只需要服務端像往常一樣對 Accept 字段進行檢查即可。

          由此也可以看出,我們 WebP 格式的局限性確實比較明顯,如果決定使用 WebP,兼容性處理是必不可少的。

          一、前言

          css3的animation想必大家都知道吧,那 steps 逐幀動畫你知道嗎?對于我來說,實際工作及練習中也很少用到這種跳躍式變化的動畫,而它start和end的解釋又比較“不說人話”,以前用到steps動畫的時候,常常是靠調試,來回設置start和end,主打的就是瞎貓碰上死耗子。雖然之前也看過關于他們區別的文章,但都是半知半解,過兩天就剩零知零解了。最近忙里偷閑,我終于打算一探究竟了,我倒要看看start和end到底有什么區別! 順便寫幾個小demo造福一方~

          二、逐幀動畫介紹

          animation的工作原理是通過將元素的CSS樣式從一個狀態改變為另一個狀態時(我們稱為線性變化),瀏覽器會在每個關鍵幀之間插入補間動畫,所以動畫效果是連貫性的,這也就是我們常用的 補間動畫

          而steps()逐幀動畫則是跳躍式變化,如果說補間動畫是一個滑坡式的變化,那么逐幀動畫就是階梯式變化,它的變化沒有中間過程。補間動畫就像你看的普通動畫片,而逐幀動畫就像是那種定格動畫。

          語法:

            animation-timing-function: steps(number, [end | start])

          參數說明:

          • number參數指定了時間函數中的間隔數量(必須是正整數)
          • 第二個參數是可選的,可設值:start和end,表示在每個間隔的起點或是終點發生階躍變化,如果忽略,默認是end。

          三、圖解圖解 step-start 和 step-end 區別

          什么叫在間隔的起點或終點發生變化呢?光看文字十有八九看不懂,下面就用示例代碼來說明。

          上圖是我ps的一張圖,尺寸為200*750,共5個色塊,每個色塊高度150。 在示例代碼中我將以這張圖為背景,每一幀將背景上升一個色塊的高度。關鍵代碼如下:

          animation: ani 5s 2s steps(5,start) infinite backwards;
          
          @keyframes ani{
            100%{
              background-position:0px -750px;
            }
          }

          在設置動畫前的初始狀態:

          再直接來看看動畫末態的情況: 一個色塊150px,所以動畫末態是背景圖片向上移動750px。

          為了完整的看到動畫效果,我設置了2秒的動畫延遲

          我們設置的steps的第一個參數number為 5 ,也就是把整個動畫過程切割成5個片段,如下圖:

          在實驗之前先來分析一下,既然是片段,那必然有片段的起點和終點,可以把補間動畫看作點,而逐幀動畫則是面。那么這五個片段的起點終點是哪呢,如下圖:

          你會發現,動畫是由6個點切成段五段,帶著這個思路開始下面的實驗。

          先來看一下設置 start 的效果:

          你會發現色塊1怎么不顯示了,甚至在動畫沒開始前,也就是延時階段直接就顯示了【2】,變化過程為: 2 - 3 - 4 - 5 - 空
          分析一下就可以想到,start是在間隔的起點發生階越變化,即開始直接就發生變化了,第一段直接階越到了第一段結束的位置。

          再來看下設置 end 的效果:

          你發現動畫變正常了,動畫過程是從【1】到【5】。 再分析一下,因為end是在間隔終點發生階越變化,即每一段都會在其開始階段進行停留,這一段結束后才會發生變化直接階越到下一段的開始狀態。

          總結:

          可以將補間動畫和 steps 逐幀動畫類比于點和線的區別,steps切割開的每個動畫片段就是一條樣式不變的線,而線都有首尾兩個點。
          設置 start 的 steps 的動畫總是在開始發生變化,即逐幀顯示每一段的終點;
          而設置 end 的 steps 的動畫總是在結束發生變化,即逐幀顯示每一段的起點;

          其實很簡單的道理,為什么總是記不住呢,因為他和人的慣性思維恰好相反。設置start總覺得是顯示每一段的開頭,可它恰好相反,start是開頭發生變化,顯示的都是每一段的結尾。

          另一種理解思路:

          steps(number, [end | start]) 是將動畫分為number段,共有number + 1幀畫面。start就是拋棄第一幀畫面執行動畫,end就是拋棄最后一幀畫面執行動畫。

          注意: 第二個參數還有兩個內置值,step-start等同于steps(1,start),動畫分成1步,2個節點,拋棄第一個節點,即顯示結尾節點的狀態;同理step-end等同于steps(1,end)。

          jump-start:在每個時間間隔開始的時候跳1步到下一狀態位置; jump-end:在每個時間間隔結束的時候跳1步到下一狀態位置; jump-both:在每個時間間隔開始和結束的時候跳1步到下一狀態位置,跳步次數會比預設的多一次; jump-none:在每個狀態位置停留夠一個時間間隔才跳到下一位置,跳步次數會比與預設的少一次

          四、思考

          上面我只設置了動畫100%時的狀態,那如果我設置了多個關鍵幀的狀態呢,那還是以整個動畫過程切割成number段嗎?

          我們再來做幾個實驗:

          實驗1:

          我們將動畫時間由5秒改成10秒(為了方便觀察,我們設置steps第二個參數為end,放棄第一幀畫面),然后將原先的動畫末態改到50%,并在動畫100%時增加邊框。·

          animation: ani 10s 2s steps(5,end) infinite backwards;
          
          @keyframes ani{
            50%{
              background-position:0px -750px;
            }
            100%{
              border: 100px solid red;
            }

          結果如下圖:

          觀察后發現,在10秒的完整動畫期間:background-position的變化過程是圖像顯示由1到5,再由5到1,共變化了 【10】 次,而我設置的steps的number參數是 【5】,這就打破了上面我說的以整個動畫過程切割成number段的假說。
          同時可以觀察到,border的變化過程共進行了5次,因為我們只在100%的時候設置了border。

          得出結論: steps的number參數并不是將整個動畫過程切割成number段,而是對于某個css樣式來說,每一段關鍵幀的變化切割成number段。

          實驗2:

          假想:上面我們只在動畫100%的時候設置了100px的boder,如果我們在50%的時候也設置border,并且狀態恰好是100%的一半,這樣對于動畫0%到100%是一個流暢的線性變化。請問這時候動畫還會被切成5段嗎?

          觀察發現,動畫被切成了10段。

          得出結論: 即使將幾個關鍵幀的css變化設置的具有規律性,但是steps仍然會將每段關鍵幀的變化切割成number段,即只要在這個關鍵幀里設置了某個css,那么對于這個css來說,這個關鍵幀就會被視為steps動畫的端點。

          實驗3:

          那既然每段關鍵幀都會被steps切割成number段,那每段的steps動畫執行的時間怎么劃分呢?其實想想就能想到,應該是按照關鍵幀占整個動畫過程的比例分割整個動畫時間。
          如下圖設置boder:【0%-50%】寬度由0到100,【50%-75%】寬度由100到0,【75%-100%】寬度由0到100

          很明顯可以觀察到,border寬度變化的時間為 2:1:1,即驗證了我上面的推論。

          ? 五、steps() 動畫實踐

          下面我舉幾個steps() 動畫的使用場景。

          1. 一張圖實現坤坤經典動作--鐵山靠

          用一張人物動作關鍵幀的長圖,和上面的案例一樣,通過修改背景圖片位置,實現動物或人物的動作變化。作為一名蒸愛粉,我給哥哥做了一個跳舞的動畫:

          2. 打字機效果--“只因你太美”

          打字機的原理是用一個和文字總寬度一樣的div覆蓋文字,并用這個div的邊框設置steps()動畫實現光標效果,然后減小div寬度(每一幀減小一個文字的寬度),讓下面文字漏出來就好了~\

          點擊運行查看效果~

          3. 純css實現倒計時

          我這里提供了兩種實現方案,準確來說是三種:

          方案1: var() css變量 + counter-reset計數器 + @property規則 + steps()逐幀動畫
          使用css變量和counter-reset計數器來實現倒計時的數字,只要設置動畫,在5秒內將變量由5變為0即可實現倒計時,但是變量的變化是不會被瀏覽器添加補間動畫的,即只會在5秒后直接變成0,而不會有中間,5-4-3-2-1-0的過程,這時我們再利用@property關鍵字為這個變量配置規則,實現數字變化的動態過程!
          而最后出現的 "Go" 可以利用step-end逐幀動畫,在5秒后將文字修改成 "Go",或者利用@counter-style關鍵字自定義計數器規則,在變量變化到0的時候,定義一個symbols符號。

          如果你不了解counter-reset、@property和@counter-style,可以查看以下兩篇文章:
          CSS counter-reset 屬性
          mdn 關于@property API 說明 mdn 關于@counter-style 說明

          點擊運行查看效果~

          方案2: 只用steps()逐幀動畫
          其實這個就很簡單了,所有的數字和最后的 "GO" 都在html里寫死并設置等高,然后就可以向上面移動圖片位置一樣移動這些數字進行顯示了。

          點擊運行查看效果~

          4. 其他應用場景

          平常工作中可以用到steps()逐幀動畫的場景也有很多:

          • 例如在延遲n秒后修改元素某個樣式,常規可能需要用js寫個延時器動態修改它的css,這完全可以用step-start動畫代替;
          • 再比如除了上面那種大屏的倒計時,普通的時分秒倒計時也可以用steps代替js實現,實現原理也簡單,就是將 0-9 制作成一張精靈圖,然后時分秒每個單位都各自用這個精靈圖當作背景,例如對于秒的數字,可以設置動畫時長為10s,動畫函數為steps(10,start),這樣每次數字變化都是 1s,同理對于分的數字,設置動畫時長為 600s,動畫函數為steps(10,start),這樣每次數字變化都是 60s。


          原文鏈接:https://juejin.cn/post/7242145254056214583


          主站蜘蛛池模板: 日本在线视频一区| 亚洲老妈激情一区二区三区| 中文字幕人妻丝袜乱一区三区| 久久久精品人妻一区二区三区四| 天美传媒一区二区三区| 91精品国产一区二区三区左线| 国产一区二区三区高清视频| 免费观看日本污污ww网站一区| 免费精品一区二区三区在线观看| 亚洲精品一区二区三区四区乱码| 国产精品被窝福利一区| 亚洲AⅤ无码一区二区三区在线| 精品人妻无码一区二区三区蜜桃一 | 国产精品一区二区久久精品无码| 亚洲无码一区二区三区| 熟妇人妻AV无码一区二区三区| 中文字幕在线无码一区| 亚洲线精品一区二区三区| 国产不卡视频一区二区三区| 精品一区二区三区四区在线| V一区无码内射国产| 久久精品国产一区二区三区| 精品人体无码一区二区三区| 亲子乱AV视频一区二区| 免费一区二区无码东京热| 中文字幕亚洲乱码熟女一区二区| 久久国产一区二区| 日韩一区二区在线观看视频| 少妇特黄A一区二区三区| 亚洲一区无码中文字幕乱码| 国产精品视频一区麻豆| 免费一本色道久久一区| 无码毛片一区二区三区视频免费播放 | 国产伦精品一区二区三区不卡| 免费一本色道久久一区| 日本在线视频一区| 人妻夜夜爽天天爽爽一区| 中文精品一区二区三区四区| 福利一区二区在线| 日本高清成本人视频一区| 亚洲高清日韩精品第一区|