精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

CSS3 3D 行星運轉(zhuǎn)以及瀏覽器渲染原理

開發(fā) 前端
3D transform 會啟用GPU加速,例如 translate3D, scaleZ 之類,當然我們的頁面可能并沒有 3D 變換,但是不代表我們不能啟用 GPU加速,在非 3D 變換的頁面也使用 3D transform 來操作,算是一種 hack 加速法。我們實際上不需要z軸的變化,但是還是假模假樣地聲明了,去欺騙瀏覽器。

最近入坑 Web 動畫,所以把自己的學習過程記錄一下分享給大家。

CSS3 3D 行星運轉(zhuǎn) demo 頁面請戳:Demo。(建議使用Chrome打開)

本文完整的代碼,以及更多的 CSS3 效果,在我 Github 上可以看到,也希望大家可以點個 star。

嗯,可能有些人打不開 demo 或者頁面亂了,貼幾張效果圖:(圖片有點大,耐心等待一會)

CSS3 3D 行星運轉(zhuǎn)效果圖

CSS3 3D 行星運轉(zhuǎn)動畫,太陽系動畫

隨機再截屏了一張:

CSS3 3D 行星運轉(zhuǎn)動畫,太陽系動畫

強烈建議你點進 Demo 頁感受一下 CSS3 3D 的魅力,圖片能展現(xiàn)的東西畢竟有限。

然后,這個 CSS3 3D 行星運轉(zhuǎn)動畫的制作過程不再詳細贅述,本篇的重點放在 Web 動畫介紹及性能優(yōu)化方面。詳細的 CSS3 3D 可以回看上一篇博客:【CSS3進階】酷炫的3D旋轉(zhuǎn)透視。簡單的思路:

1. 利用上一篇所制作的 3D 照片墻為原型,改造而來;

2. 每一個球體的制作,想了許多方法,最終使用了這種折中的方式,每一個球體本身也是一個 CSS3 3D 圖形。然后在制作過程中使用 Sass 編寫 CSS 可以減少很多繁瑣的編寫 CSS 動畫的過程;

3. Demo 當中有使用 Javascript 寫了一個鼠標跟隨的監(jiān)聽事件,去掉這個事件,整個行星運動動畫本身是純 CSS 實現(xiàn)的。

下面將進入本文的重點,從性能優(yōu)化的角度講講瀏覽器渲染展示原理,瀏覽器的重繪與重排,動畫的性能檢測優(yōu)化等:

瀏覽器渲染展示原理及對web動畫的影響

小標題起得有點大,我們知道,不同瀏覽器的內(nèi)核(渲染引擎,Rendering Engine)是不一樣的,例如現(xiàn)在最主流的 chrome 瀏覽器的內(nèi)核是 Blink 內(nèi)核(在Chrome(28及往后版本)、Opera(15及往后版本)和Yandex瀏覽器中使用),火狐是 Gecko,IE 是 Trident ,瀏覽器內(nèi)核負責對網(wǎng)頁語法的解釋并渲染(顯示)網(wǎng)頁,不同瀏覽器內(nèi)核的工作原理并不完全一致。

所以其實下面將主要討論的是 chrome 瀏覽器下的渲染原理。因為 chrome 內(nèi)核渲染可查證的資料較多,對于其他內(nèi)核的瀏覽器不敢妄下定論,所以下面展開的討論默認是針對 chrome 瀏覽器的。

首先,我要拋出一點結(jié)論:

使用 transform3d api 代替 transform api,強制開始 GPU 加速

這里談到了 GPU 加速,為什么 GPU 能夠加速 3D 變換?這一切又必須要從瀏覽器底層的渲染講起,瀏覽器渲染展示網(wǎng)頁的過程,老生常談,面試必問,大致分為:

1. 解析HTML(HTML Parser)

2. 構(gòu)建DOM樹(DOM Tree)

3. 渲染樹構(gòu)建(Render Tree)

4. 繪制渲染樹(Painting)

找到了一張很經(jīng)典的圖:

瀏覽器渲染頁面過程

這個渲染過程作為一個基礎(chǔ)知識,繼續(xù)往下深入。

當頁面加載并解析完畢后,它在瀏覽器內(nèi)代表了一個大家十分熟悉的結(jié)構(gòu):DOM(Document Object Model,文檔對象模型)。在瀏覽器渲染一個頁面時,它使用了許多沒有暴露給開發(fā)者的中間表現(xiàn)形式,其中最重要的結(jié)構(gòu)便是層(layer)。

這個層就是本文重點要討論的內(nèi)容:

而在 Chrome 中,存在有不同類型的層: RenderLayer(負責 DOM 子樹),GraphicsLayer(負責 RenderLayer 的子樹)。接下來我們所討論的將是 GraphicsLayer 層。

GraphicsLayer 層是作為紋理(texture)上傳給 GPU 的。

這里這個紋理很重要,那么,

什么是紋理(texture)?

這里的紋理指的是 GPU 的一個術(shù)語:可以把它想象成一個從主存儲器(例如 RAM)移動到圖像存儲器(例如 GPU 中的 VRAM)的位圖圖像(bitmap image)。一旦它被移動到 GPU 中,你可以將它匹配成一個網(wǎng)格幾何體(mesh geometry),在 Chrome 中使用紋理來從 GPU 上獲得大塊的頁面內(nèi)容。通過將紋理應(yīng)用到一個非常簡單的矩形網(wǎng)格就能很容易匹配不同的位置(position)和變形(transformation),這也就是 3D CSS 的工作原理。

說起來很難懂,直接看例子,在 chrome 中,我們是可以看到上文所述的 GraphicsLayer — 層的概念。在開發(fā)者工具中,我們進行如下選擇調(diào)出 show layer borders 選項:

在一個極簡單的頁面,我們可以看到如下所示,這個頁面只有一個層。藍色網(wǎng)格表示瓦片(tile),你可以把它們當作是層的單元(并不是層),Chrome 可以將它們作為一個大層的部分上傳給 GPU:

元素自身層的創(chuàng)建

因為上面的頁面十分簡單,所以并沒有產(chǎn)生層,但是在很復雜的頁面中,譬如我們給元素設(shè)置一個 3D CSS 屬性來變換它,我們就能看到當元素擁有自己的層時是什么樣子。

注意橘黃色的邊框,它畫出了該視圖中層的輪廓:

何時觸發(fā)創(chuàng)建層 ?

上面示意圖中黃色邊框框住的層,就是 GraphicsLayer ,它對于我們的 Web 動畫而言非常重要,通常,Chrome 會將一個層的內(nèi)容在作為紋理上傳到 GPU 前先繪制(paint)進一個位圖中。如果內(nèi)容不會改變,那么就沒有必要重繪(repaint)層。

這樣做的意義在于:花在重繪上的時間可以用來做別的事情,例如運行 JavaScript,如果繪制的時間很長,還會造成動畫的故障與延遲。

那么一個元素什么時候會觸發(fā)創(chuàng)建一個層?從目前來說,滿足以下任意情況便會創(chuàng)建層:

  • 3D 或透視變換(perspective、transform) CSS 屬性

  • 使用加速視頻解碼的 <video> 元素

  • 擁有 3D (WebGL) 上下文或加速的 2D 上下文的 <canvas> 元素

  • 混合插件(如 Flash)

  • 對自己的 opacity 做 CSS 動畫或使用一個動畫變換的元素

  • 擁有加速 CSS 過濾器的元素

  • 元素有一個包含復合層的后代節(jié)點(換句話說,就是一個元素擁有一個子元素,該子元素在自己的層里)

  • 元素有一個 z-index 較低且包含一個復合層的兄弟元素(換句話說就是該元素在復合層上面渲染)

層的重繪

對于靜態(tài) Web 頁面而言,層在第一次被繪制出來之后將不會被改變,但對于 Web 動畫,頁面的 DOM 元素是在不斷變換的,如果層的內(nèi)容在變換過程中發(fā)生了改變,那么層將會被重繪(repaint)。

強大的 chrome 開發(fā)者工具提供了工具讓我們可以查看到動畫頁面運行中,哪些內(nèi)容被重新繪制了:

在舊版的 chrome 中,是有 show paint rects 這一個選項的,可以查看頁面有哪些層被重繪了,并以紅色邊框標識出來。

但是新版的 chrome 貌似把這個選項移除了,現(xiàn)在的選項是 enable paint flashing ,其作用也是標識出網(wǎng)站動態(tài)變換的地方,并且以綠色邊框標識出來。

看上面的示意圖,可以看到頁面中有幾處綠色的框,表示發(fā)生了重繪。注意 Chrome 并不會始終重繪整個層,它會嘗試智能的去重繪 DOM 中失效的部分。

按照道理,頁面發(fā)生這么多動畫,重繪應(yīng)該很頻繁才對,但是上圖我的行星動畫中我只看到了寥寥綠色重繪框,我的個人理解是,一是 GPU 優(yōu)化,二是如果整個動畫頁面只有一個層,那么運用了 transform 進行變換,頁面必然需要重繪,但是采用分層(GraphicsLayer )技術(shù),也就是上面說符合情況的元素各自創(chuàng)建層,那么一個元素所創(chuàng)建的層運用 transform 變換,譬如 rotate 旋轉(zhuǎn),這個時候該層的旋轉(zhuǎn)變換并沒有影響到其他層,那么該層不一定需要被重繪。(個人之見,還請?zhí)岢鲋刚?/p>

了解層的重繪對 Web 動畫的性能優(yōu)化至關(guān)重要。

是什么原因?qū)е率?invalidation)進而強制重繪的呢?這個問題很難詳盡回答,因為存在大量導致邊界失效的情況。最常見的情況就是通過操作 CSS 樣式來修改 DOM 或?qū)е轮嘏拧?/p>

查找引發(fā)重繪和重排根源的最好辦法就是使用開發(fā)者工具的時間軸和 enable paint flashing 工具,然后試著找出恰好在重繪/重排前修改了 DOM 的地方。

總結(jié)

那么瀏覽器是如何從 DOM 元素到最終動畫的展示呢?

  • 瀏覽器解析 HTML 獲取 DOM 后分割為多個圖層(GraphicsLayer)

  • 對每個圖層的節(jié)點計算樣式結(jié)果(Recalculate style–樣式重計算)

  • 為每個節(jié)點生成圖形和位置(Layout–回流和重布局)

  • 將每個節(jié)點繪制填充到圖層位圖中(Paint Setup和Paint–重繪)

  • 圖層作為紋理(texture)上傳至 GPU

  • 符合多個圖層到頁面上生成最終屏幕圖像(Composite Layers–圖層重組)

Web 動畫很大一部分開銷在于層的重繪,以層為基礎(chǔ)的復合模型對渲染性能有著深遠的影響。當不需要繪制時,復合操作的開銷可以忽略不計,因此在試著調(diào)試渲染性能問題時,首要目標就是要避免層的重繪。那么這就給動畫的性能優(yōu)化提供了方向,減少元素的重繪與回流。

回流(reflow)與重繪(repaint)

這里首先要分清兩個概念,重繪與回流。

回流(reflow)

當渲染樹(render Tree)中的一部分(或全部)因為元素的規(guī)模尺寸,布局,隱藏等改變而需要重新構(gòu)建。這就稱為回流(reflow),也就是重新布局(relayout)。

每個頁面至少需要一次回流,就是在頁面第一次加載的時候。在回流的時候,瀏覽器會使渲染樹中受到影響的部分失效,并重新構(gòu)造這部分渲染樹,完成回流后,瀏覽器會重新繪制受影響的部分到屏幕中,該過程成為重繪。

重繪(repaint)

當render tree中的一些元素需要更新屬性,而這些屬性只是影響元素的外觀,風格,而不會影響布局的,比如 background-color 。則就叫稱為重繪。

值得注意的是,回流必將引起重繪,而重繪不一定會引起回流。

明顯,回流的代價更大,簡單而言,當操作元素會使元素修改它的大小或位置,那么就會發(fā)生回流。

回流何時觸發(fā):

  • 調(diào)整窗口大小(Resizing the window)

  • 改變字體(Changing the font)

  • 增加或者移除樣式表(Adding or removing a stylesheet)

  • 內(nèi)容變化,比如用戶在input框中輸入文字(Content changes, such as a user typing text in

  • an input box)

  • 激活 CSS 偽類,比如 :hover (IE 中為兄弟結(jié)點偽類的激活)(Activation of CSS pseudo classes such as :hover (in IE the activation of the pseudo class of a sibling))

  • 操作 class 屬性(Manipulating the class attribute)

  • 腳本操作 DOM(A script manipulating the DOM)

  • 計算 offsetWidth 和 offsetHeight 屬性(Calculating offsetWidth and offsetHeight)

  • 設(shè)置 style 屬性的值 (Setting a property of the style attribute)

所以對于頁面而言,我們的宗旨就是盡量減少頁面的回流重繪,簡單的一個栗子:

// 下面這種方式將會導致回流reflow兩次

  1. var newWidth = aDiv.offsetWidth + 10; // Read 
  2. aDiv.style.width = newWidth + 'px'// Write 
  3. var newHeight = aDiv.offsetHeight + 10; // Read 
  4. aDiv.style.height = newHeight + 'px'// Write 

// 下面這種方式更好,只會回流reflow一次

  1. var newWidth = aDiv.offsetWidth + 10// Read 
  2. var newHeight = aDiv.offsetHeight + 10// Read 
  3. aDiv.style.width = newWidth + 'px'// Write 
  4. aDiv.style.height = newHeight + 'px'// Write 

上面四句,因為涉及了 offsetHeight 操作,瀏覽器強制 reflow 了兩次,而下面四句合并了 offset 操作,所以減少了一次頁面的回流。

減少回流、重繪其實就是需要減少對渲染樹的操作(合并多次多DOM和樣式的修改),并減少對一些style信息的請求,盡量利用好瀏覽器的優(yōu)化策略。

flush隊列

其實瀏覽器自身是有優(yōu)化策略的,如果每句 Javascript 都去操作 DOM 使之進行回流重繪的話,瀏覽器可能就會受不了。所以很多瀏覽器都會優(yōu)化這些操作,瀏覽器會維護 1 個隊列,把所有會引起回流、重繪的操作放入這個隊列,等隊列中的操作到了一定的數(shù)量或者到了一定的時間間隔,瀏覽器就會 flush 隊列,進行一個批處理。這樣就會讓多次的回流、重繪變成一次回流重繪。

但是也有例外,因為有的時候我們需要精確獲取某些樣式信息,下面這些:

  • offsetTop, offsetLeft, offsetWidth, offsetHeight

  • scrollTop/Left/Width/Height

  • clientTop/Left/Width/Height

  • width,height

  • 請求了getComputedStyle(), 或者 IE的 currentStyle

這個時候,瀏覽器為了反饋最精確的信息,需要立即回流重繪一次,確保給到我們的信息是準確的,所以可能導致 flush 隊列提前執(zhí)行了。

display:none 與 visibility:hidden

兩者都可以在頁面上隱藏節(jié)點。不同之處在于,

  • display:none 隱藏后的元素不占據(jù)任何空間。它的寬度、高度等各種屬性值都將“丟失”

  • visibility:hidden 隱藏的元素空間依舊存在。它仍具有高度、寬度等屬性值

從性能的角度而言,即是回流與重繪的方面,

  • display:none  會觸發(fā) reflow(回流)

  • visibility:hidden  只會觸發(fā) repaint(重繪),因為沒有發(fā)現(xiàn)位置變化

他們兩者在優(yōu)化中 visibility:hidden 會顯得更好,因為我們不會因為它而去改變了文檔中已經(jīng)定義好的顯示層次結(jié)構(gòu)了。

對子元素的影響:

  • display:none 一旦父節(jié)點元素應(yīng)用了 display:none,父節(jié)點及其子孫節(jié)點元素全部不可見,而且無論其子孫元素如何設(shè)置 display 值都無法顯示;

  • visibility:hidden 一旦父節(jié)點元素應(yīng)用了 visibility:hidden,則其子孫后代也都會全部不可見。不過存在隱藏“失效”的情況。當其子孫元素應(yīng)用了 visibility:visible,那么這個子孫元素又會顯現(xiàn)出來。

動畫的性能檢測及優(yōu)化

耗性能樣式

不同樣式在消耗性能方面是不同的,譬如 box-shadow 從渲染角度來講十分耗性能,原因就是與其他樣式相比,它們的繪制代碼執(zhí)行時間過長。這就是說,如果一個耗性能嚴重的樣式經(jīng)常需要重繪,那么你就會遇到性能問題。其次你要知道,沒有不變的事情,在今天性能很差的樣式,可能明天就被優(yōu)化,并且瀏覽器之間也存在差異。

因此關(guān)鍵在于,你要借助開發(fā)工具來分辨出性能瓶頸所在,然后設(shè)法減少瀏覽器的工作量。

好在 chrome 瀏覽器提供了許多強大的功能,讓我們可以檢測我們的動畫性能,除了上面提到的,我們還可以通過勾選下面這個 show FPS meter 顯示頁面的 FPS 信息,以及 GPU 的使用率:

使用 will-change 提高頁面滾動、動畫等渲染性能

官方文檔說,這是一個仍處于實驗階段的功能,所以在未來版本的瀏覽器中該功能的語法和行為可能隨之改變。

使用方法示例:(具體每個取值的意義,去翻翻文檔)

 

  1. will-change: auto 
  2. will-change: scroll-position 
  3. will-change: contents 
  4. will-change: transform        // Example of <custom-ident> 
  5. will-change: opacity          // Example of <custom-ident> 
  6. will-change: left, top        // Example of two <animateable-feature> 
  7.  
  8. will-change: unset 
  9. will-change: initial 
  10. will-change: inherit 
  11.  
  12. // 示例 
  13. .example{ 
  14.     will-change: transform; 

will-change 為 web 開發(fā)者提供了一種告知瀏覽器該元素會有哪些變化的方法,這樣瀏覽器可以在元素屬性真正發(fā)生變化之前提前做好對應(yīng)的優(yōu)化準備工作。 這種優(yōu)化可以將一部分復雜的計算工作提前準備好,使頁面的反應(yīng)更為快速靈敏。

值得注意的是,用好這個屬性并不是很容易:

  • 不要將 will-change 應(yīng)用到太多元素上:瀏覽器已經(jīng)盡力嘗試去優(yōu)化一切可以優(yōu)化的東西了。有一些更強力的優(yōu)化,如果與 will-change 結(jié)合在一起的話,有可能會消耗很多機器資源,如果過度使用的話,可能導致頁面響應(yīng)緩慢或者消耗非常多的資源。

  • 有節(jié)制地使用:通常,當元素恢復到初始狀態(tài)時,瀏覽器會丟棄掉之前做的優(yōu)化工作。但是如果直接在樣式表中顯式聲明了 will-change 屬性,則表示目標元素可能會經(jīng)常變化,瀏覽器會將優(yōu)化工作保存得比之前更久。所以最佳實踐是當元素變化之前和之后通過腳本來切換 will-change 的值。

  • 不要過早應(yīng)用 will-change 優(yōu)化:如果你的頁面在性能方面沒什么問題,則不要添加 will-change 屬性來榨取一丁點的速度。 will-change 的設(shè)計初衷是作為最后的優(yōu)化手段,用來嘗試解決現(xiàn)有的性能問題。它不應(yīng)該被用來預防性能問題。過度使用 will-change 會導致大量的內(nèi)存占用,并會導致更復雜的渲染過程,因為瀏覽器會試圖準備可能存在的變化過程。這會導致更嚴重的性能問題。

  • 給它足夠的工作時間:這個屬性是用來讓頁面開發(fā)者告知瀏覽器哪些屬性可能會變化的。然后瀏覽器可以選擇在變化發(fā)生前提前去做一些優(yōu)化工作。所以給瀏覽器一點時間去真正做這些優(yōu)化工作是非常重要的。使用時需要嘗試去找到一些方法提前一定時間獲知元素可能發(fā)生的變化,然后為它加上 will-change 屬性。

使用 transform3d api 代替 transform api,強制開始 GPU 加速

GPU 能夠加速 Web 動畫,這個上文已經(jīng)反復提到了。

3D transform 會啟用GPU加速,例如 translate3D, scaleZ 之類,當然我們的頁面可能并沒有 3D 變換,但是不代表我們不能啟用 GPU 加速,在非 3D 變換的頁面也使用 3D transform 來操作,算是一種 hack 加速法。我們實際上不需要z軸的變化,但是還是假模假樣地聲明了,去欺騙瀏覽器。

參考文獻:

Rendering: repaint, reflow/relayout, restyle

Scrolling Performance

MDN–will-change

How (not) to trigger a layout in WebKit

High Performance Animations

Accelerated Rendering in Chrome

CSS3 制作3D旋轉(zhuǎn)球體

到此本文結(jié)束,如果還有什么疑問或者建議,可以多多交流,原創(chuàng)文章,文筆有限,才疏學淺,文中若有不正之處,萬望告知。

責任編輯:張燕妮 來源: ChokCoco
相關(guān)推薦

2021-04-01 06:23:24

CSS33D3D Web 動畫

2016-09-21 14:24:37

3D全景瀏覽器瀏覽器

2009-07-24 15:29:11

支持CSS3

2013-01-30 16:15:40

adobeHTML5css3

2012-04-01 15:14:52

2020-11-06 15:20:45

瀏覽器前端架構(gòu)

2021-06-09 08:30:52

CSS33D旋轉(zhuǎn)視圖3D動畫

2021-01-05 08:10:00

Css前端3D旋轉(zhuǎn)透視

2009-04-23 09:50:39

O3D3D插件

2009-04-24 09:12:26

Google瀏覽器

2012-02-24 09:11:45

jQuery

2012-02-29 09:27:36

ibmdw

2013-05-23 16:01:56

瀏覽器

2013-06-14 13:56:29

瀏覽器渲染原理

2012-05-28 14:30:46

瀏覽器蘋果

2012-02-14 16:16:55

天天瀏覽器移動瀏覽器

2018-01-19 14:39:53

瀏覽器頁面優(yōu)化

2022-02-20 14:45:33

3D動畫CSS3前端

2014-12-03 10:21:50

HTML5

2022-08-30 09:01:11

瀏覽器渲染前端
點贊
收藏

51CTO技術(shù)棧公眾號

亚洲一区二区三区在线视频| 日韩在线免费高清视频| 18岁视频在线观看| 欧美尤物美女在线| 本田岬高潮一区二区三区| 热99精品只有里视频精品| 国产美女网站视频| 国产调教精品| 欧美人狂配大交3d怪物一区| 国产天堂视频在线观看| 成年午夜在线| aaa欧美色吧激情视频| 国产精品视频网址| 天堂在线免费观看视频| 一区二区影院| 尤物九九久久国产精品的特点| 成年女人免费视频| 不卡的国产精品| 欧美性猛交xxxx乱大交| 激情五月六月婷婷| 香蕉视频网站在线观看| 久久久www成人免费毛片麻豆| 99视频在线播放| 伊人精品一区二区三区| 国产一区二区三区的电影| 久久不射热爱视频精品| 最近中文字幕在线mv视频在线| 日韩一区免费| 欧美一区二区三区性视频| 波多野结衣家庭教师视频| 色呦呦在线资源| 1区2区3区欧美| 亚洲春色在线视频| 欧美日韩国产中文字幕在线| 99免费精品在线观看| 99久久自偷自偷国产精品不卡| 在线免费看91| 日本亚洲免费观看| 国产xxx69麻豆国语对白| 国产午夜精品无码一区二区| 亚洲在线久久| www国产精品视频| 天天摸日日摸狠狠添| 神马久久一区二区三区| 亚洲三级黄色在线观看| 男生裸体视频网站| 五月综合久久| 亚洲欧美在线x视频| 美国黄色a级片| 国产成人一区二区三区影院| 亚洲欧美日韩中文在线| 免费看污片的网站| 日韩国产在线| 日韩在线视频二区| 男人操女人的视频网站| 在线国产一区二区| 欧美韩日一区二区| 久久9999久久免费精品国产| 亚洲日韩视频| 琪琪第一精品导航| 日韩黄色片网站| 日韩av一区二区三区| 国产精品视频免费观看www| 91丨porny丨在线中文| 精品亚洲成av人在线观看| 91久久极品少妇xxxxⅹ软件| 国产 日韩 欧美 精品| 成人精品高清在线| 欧美日韩国产精品一区二区| 国产小视频免费在线观看| 欧美激情一区在线观看| 综合久久国产| av蜜臀在线| 色综合咪咪久久| 男人添女人下面免费视频| 国产精品日本一区二区三区在线| 欧美白人最猛性xxxxx69交| 一级黄色免费视频| 欧美精品一区二区三区精品| 久久亚洲一区二区三区四区五区高| 午夜69成人做爰视频| 日韩视频免费| 成人高h视频在线| 亚洲国产精品无码久久| 91蝌蚪国产九色| 在线观看成人av| tube8在线hd| 日本精品视频一区二区| 91亚洲一区二区| 色愁久久久久久| 久久影院中文字幕| 亚洲天堂男人av| 国产剧情在线观看一区二区| 欧美伦理一区二区| 成人影欧美片| 一本大道久久a久久精品综合| 亚洲高清在线不卡| 五月国产精品| 欧美第一黄网免费网站| 波多野结衣黄色网址| 国产成人午夜电影网| 日韩成人av网站| 搞黄网站在线看| 欧美视频完全免费看| 国产a√精品区二区三区四区| 国产欧美日韩在线一区二区| 久久久久久久国产精品视频| 欧美激情一区二区三区免费观看| 成人一区二区三区视频在线观看| 亚洲精品9999| 偷拍自拍在线看| 欧美一级久久久| 亚洲午夜精品久久久久久高潮| 亚洲视频高清| 成人精品在线视频| 国产精品一区二区婷婷| 偷拍日韩校园综合在线| 色哟哟在线观看视频| 成人短片线上看| 国产成人av在线| 亚洲色图21p| 亚洲一区二区三区三| 99re6在线观看| 欧美亚洲激情| 国产精品成人免费电影| 日韩大胆人体| 精品久久中文字幕久久av| 俄罗斯女人裸体性做爰| 91综合在线| 国产精品主播视频| 国产精品久久一区二区三区不卡 | 亚洲激情图片| 日韩福利一区| 亚洲视频欧美视频| 日本视频在线观看免费| 99久久精品免费看| 丁香花在线影院观看在线播放| 日韩三级久久| 欧美夫妻性生活xx| 精品人妻无码一区二区色欲产成人| 国产精品电影一区二区三区| 欧美午夜性生活| 欧美日韩第一| 国产精品影院在线观看| 在线观看免费网站黄| 欧美性三三影院| 超碰人人人人人人人| 美女视频第一区二区三区免费观看网站| 日本成人三级| 日韩精选视频| 视频一区视频二区国产精品 | 日韩欧美一级片| 欧美国产精品一二三| 成人午夜又粗又硬又大| 少妇高潮毛片色欲ava片| 精品精品国产毛片在线看| 欧美亚洲一级片| 黄色在线免费观看大全| 欧美在线一区二区| chinese全程对白| 国产一区二区三区黄视频| 超碰成人免费在线| 一区二区三区韩国免费中文网站| 国产成人在线亚洲欧美| 午夜视频在线| 日韩一区二区三区在线观看 | 伦xxxx在线| 欧美一区二区三区白人| 精品视频一区二区在线观看| 26uuu亚洲综合色欧美| 男人插女人下面免费视频| 婷婷成人基地| 国产一区二区三区高清| 芒果视频成人app| www.xxxx欧美| 日本xxxxwww| 欧美亚洲国产一区二区三区va| 亚洲av无一区二区三区| 国产999精品久久久久久| 午夜精品久久久内射近拍高清 | 久久综合精品国产一区二区三区| 自拍偷拍 国产| 欧美日韩a区| 欧美日韩另类丝袜其他| www999久久| 欧美一区深夜视频| 国产精品实拍| 亚洲精品视频在线播放| 国产精品久久久久久无人区| 香蕉影视欧美成人| 自拍偷拍第9页| 99久久精品国产网站| 久久婷婷综合色| 亚洲区一区二| 亚洲AV无码成人精品一区| 六月丁香久久丫| 91久久久久久久| 一根才成人网| 久久99久久亚洲国产| 二区三区在线| 亚洲国产毛片完整版| 亚洲精品无码久久久久| 亚洲一区二区欧美日韩| 午夜国产福利视频| 91麻豆国产自产在线观看| 粗大的内捧猛烈进出视频| 免费久久99精品国产| 免费av观看网址| 欧美阿v一级看视频| 日韩三级电影| 日韩电影不卡一区| 成人激情直播| 日韩不卡在线视频| 国产中文字幕亚洲| 国产a亚洲精品| 国产suv精品一区二区| av不卡高清| 欧美激情精品久久久久久免费印度| 婷婷成人激情| 在线播放日韩专区| 免费一级在线观看播放网址| 亚洲精品久久久久| 黑人精品一区二区三区| 欧美一区二区高清| 一区二区久久精品66国产精品| 色av一区二区| 高潮毛片又色又爽免费| 欧美色视频日本高清在线观看| 久久免费视频精品| 一区二区在线观看不卡| 亚洲精品卡一卡二| 亚洲视频小说图片| 日本中文在线视频| 亚洲欧美怡红院| 少妇高潮一区二区三区喷水| 中文字幕精品一区二区精品绿巨人| 在线观看福利片| 久久先锋影音av鲁色资源网| 深爱五月激情网| 久久日韩粉嫩一区二区三区| 美国黄色a级片| 国产偷国产偷精品高清尤物 | 国产精品激情av在线播放 | 亚洲福利专区| 精品视频免费在线播放| 亚洲精品乱码| 各处沟厕大尺度偷拍女厕嘘嘘| 日韩视频二区| 午夜肉伦伦影院| 日韩精品亚洲专区| 熟妇人妻无乱码中文字幕真矢织江| 老司机精品导航| 污污视频网站免费观看| 日韩 欧美一区二区三区| 久久婷婷国产91天堂综合精品| 日本午夜精品一区二区三区电影 | avove在线观看| 欧美久久视频| 久久久免费视频网站| 日韩影院在线观看| 日韩一级免费片| 国产一区二区不卡| 亚洲av人人澡人人爽人人夜夜| 91网上在线视频| 午夜影院黄色片| 一区二区三区欧美日韩| 五月婷婷激情网| 在线观看视频一区二区欧美日韩| 中文字幕在线观看1| 日韩欧美中文字幕公布| 欧洲成人一区二区三区| 亚洲欧美日韩国产中文专区| 黄视频网站在线看| 97在线视频免费| 岛国一区二区| 99国产在线| 亚洲天堂日韩在线| 中文字幕不卡每日更新1区2区| 黄色成人在线网址| 久久黄色免费看| 国产一区二区伦理片| 美国黄色a级片| 亚洲图片激情小说| 久久艹免费视频| 555www色欧美视频| 污污网站免费在线观看| 色老头一区二区三区在线观看| 欧美一卡二卡| 国产精品久久久久久婷婷天堂| 精品亚洲a∨一区二区三区18| 久热这里只精品99re8久 | 欧美日韩一区二区三区四区不卡| 日韩视频专区| 99国产精品| 色18美女社区| 久久综合色天天久久综合图片| 久草福利资源在线| 欧美日韩国产丝袜另类| 国产女人高潮时对白| 亚洲欧美日韩一区在线| 高清电影在线免费观看| 成人av色在线观看| 免费观看不卡av| 成人性生活视频免费看| 极品少妇xxxx精品少妇偷拍| 在线观看日本中文字幕| 亚洲国产成人91porn| 一级黄在线观看| 亚洲美女在线看| 欧美草逼视频| 成人午夜在线观看| 狠狠操综合网| 乱人伦xxxx国语对白| 国产盗摄一区二区三区| 毛片视频免费播放| 91成人在线观看喷潮| 日本高清视频www| 欧美另类暴力丝袜| crdy在线观看欧美| 一级二级三级欧美| 日本91福利区| 男人天堂av电影| 欧美日韩国产精品一区二区三区四区| 亚洲精品久久久久久久久久| 久久精品人人做人人爽| 韩国精品视频在线观看| 欧美精品v日韩精品v国产精品| 亚洲午夜精品久久久久久app| 婷婷激情综合五月天| 国产精品全国免费观看高清 | 亚洲GV成人无码久久精品| 亚洲护士老师的毛茸茸最新章节| 怡红院在线播放| 91精品国产综合久久久久久丝袜 | 黄色永久免费网站| 欧美国产精品一区二区三区| 免费视频网站在线观看入口| 日韩精品免费在线播放| 麻豆免费在线| 久久综合九色欧美狠狠| 久久激情中文| 精品无码国产污污污免费网站| 色综合激情五月| www免费网站在线观看| 国产精品人成电影| 日韩片欧美片| 一级黄色免费毛片| 一区二区三区欧美日| 亚洲女人18毛片水真多| 国内精品小视频| 午夜精品福利影院| 99草草国产熟女视频在线| 国产精品美女www爽爽爽| 97超碰资源站| 欧美国产日韩一区二区| 精品素人av| 免费看a级黄色片| 亚洲色欲色欲www在线观看| a天堂在线视频| 性欧美激情精品| 操欧美老女人| 三级av免费看| 无码av免费一区二区三区试看| 黄视频在线观看免费| 91久久久久久国产精品| 亚洲成人在线| 在线观看日本中文字幕| 69av一区二区三区| 九色porny自拍视频在线播放| 欧美日韩国产综合视频在线| 久久99精品国产麻豆婷婷洗澡| 欧美黄色一区二区三区| 日韩高清av在线| 成人毛片免费| av网站手机在线观看| 国产三区在线成人av| 国产情侣激情自拍| 欧美野外猛男的大粗鳮| 午夜国产一区二区| 99re这里只有| 欧美日韩成人高清| a级片在线免费| 亚洲韩国在线| www.亚洲色图| 91精品国产综合久| 97视频在线观看视频免费视频 | 成人信息集中地欧美| 日韩视频久久| 最新一区二区三区| 日韩精品免费视频| 日韩中文字幕| 在线免费av播放| 天天av天天翘天天综合网| 亚洲免费视频一区二区三区| 国产一区免费在线观看| 久久99精品国产麻豆不卡| 青草视频在线观看免费| 欧美精品少妇videofree| 欧美极品在线观看| 亚洲av成人片无码|