国产成人无码一区二区三区在线_亚洲一区二区三区精品在线_国严精品久久久久久亚洲影视 _国产精品福利在线播放_中文字幕av导航_玉米视频成人免费看_国产v亚洲v天堂无码久久久_一区二区三区资源_免费成人深夜夜行视频_国产在线观看成人_一区二区三区产品免费精品久久75_国产国语videosex另类

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

你了解 Transition 嗎?一起來深入了解下Transition!

你了解 Transition 嗎?你可能并不了解 Transition?下面本篇文章就來通過圖文結(jié)合的方式帶大家深入了解一下Transition,希望對(duì)大家有所幫助!

你了解 Transition 嗎?一起來深入了解下Transition!

這篇文章我們深入學(xué)習(xí) Transition 動(dòng)畫。沒錯(cuò),CSS3 Transition 動(dòng)畫。你可能會(huì)問,不是很簡(jiǎn)單嗎,這什么好講的?

確實(shí),Transition 動(dòng)畫使用起來非常容易。只需要給元素加上 transition-delay, transition-duration, transition-property, transition-timing-function 屬性就可以有過濾效果。更簡(jiǎn)單的用法是直接使用簡(jiǎn)寫的 transition 屬性:

transition: <property> <duration> <timing-function> <delay>;  // transition-delay 默認(rèn)為 0 // transition-property 默認(rèn)為 all // transition-timing-function 默認(rèn)為 ease transition: 0.3s;

由于 transition 動(dòng)畫用起來幾乎沒有成本,一直以來也沒有太深入學(xué)習(xí),最近翻看源代碼和 MDN 文檔之后發(fā)現(xiàn)有些知識(shí)沒有理解到位,于是乎有了這篇文章,希望對(duì)讀者更深入了解 Transition 動(dòng)畫有所幫助。(學(xué)習(xí)視頻分享:css視頻教程)

為了盡量降低閱讀理解成本,這篇文章會(huì)寫得稍微啰嗦一點(diǎn)點(diǎn),大部分示例都會(huì)配圖 ——【多圖預(yù)警開始!】

什么是 Transition?

簡(jiǎn)單的說就是過渡動(dòng)畫,通常修改 DOM 節(jié)點(diǎn)的樣式都是立即更新在頁面上的,例如修改寬高,修改透明度,修改背景色等等。

例如當(dāng)鼠標(biāo)移動(dòng)至按鈕上時(shí),為了突出按鈕的可交互,會(huì)在 hover 時(shí)修改它的樣式,讓用戶注意到它。沒有加 transition 過渡動(dòng)畫,給用戶的感覺會(huì)很僵很生硬。

.button {   // ...   background-color: #00a8ff; }  .button:hover {   background-color: #fbc531;   transform: scale(1.2); }

你了解 Transition 嗎?一起來深入了解下Transition!

加上 transition 一行代碼之后,變化就會(huì)比較順滑。

.button {   // ...   transition: 1s; } // ...

這個(gè)例子中我們修改了 background-colortransform,結(jié)合 transition 屬性,瀏覽器就會(huì)自動(dòng)讓屬性值隨著時(shí)間變化,從舊值逐步過渡到過渡新值,視覺上就是動(dòng)畫效果。

你了解 Transition 嗎?一起來深入了解下Transition!

區(qū)分于 AnimationTransition 動(dòng)畫側(cè)重于表現(xiàn)一次過渡效果,從開始到結(jié)束的變化。而 Animation 不需要變化,可以循環(huán)播放 ▶️。

需要注意,并不是所有的屬性變化都會(huì)有過渡效果

  1. 有些 CSS 屬性只支持枚舉值,非黑即白,不存在中間狀態(tài),例如 visibility: visible; 被修改成 visibility: hidden; 不會(huì)有動(dòng)畫效果,因?yàn)椴淮嬖诳梢娪植豢梢姷闹虚g狀態(tài)。在瀏覽器上的表現(xiàn)是 duration 到了之后元素立即突變?yōu)?hidden。

    .button:hover {   //...   visibility: hidden; }

    你了解 Transition 嗎?一起來深入了解下Transition!

  2. 有些屬性雖然是可計(jì)算數(shù)值,但天生注定不能有過渡效果,例如 transition-delaytransition-duration 都是立即生效,這里值得補(bǔ)一句由于 transition-* 屬性是即時(shí)生效,這行代碼如果是 hover 時(shí)才加上,那么效果會(huì)是 hover 時(shí)有動(dòng)畫,移出時(shí)沒有動(dòng)畫。
  3. 即使是可過渡的屬性變化,也可能因?yàn)闊o法計(jì)算中間狀態(tài)而失去過渡效果。例如 box-shadow 屬性雖然支持 transition 的動(dòng)畫的,但如果從 "outset" 切換到 inset,也是突變的。

    .button {   // ...   box-shadow: 0 0 0 1px rgb(0 0 0 / 15%);   transition: 1s; }  .button:hover {   // ...   box-shadow: inset 0 0 0 10px rgb(0 0 0 / 15%); }

    你了解 Transition 嗎?一起來深入了解下Transition!
    從表現(xiàn)上看,box-shadow 的變化是 hover 上去立馬就生效了。

  4. 如果某個(gè)屬性值是連續(xù)可計(jì)算的數(shù)值,但是變化前后變成散列的枚舉值,那么過渡也不會(huì)生效。例如從 height: 100px => height: auto 是不會(huì)有動(dòng)畫的。

以上的內(nèi)容回顧了 Transition 的基本用法,下面我們來看一個(gè)在實(shí)際開發(fā)場(chǎng)景中會(huì)遇到的問題。

為什么 Transition 動(dòng)畫沒有生效?

場(chǎng)景題:假設(shè)我們現(xiàn)在接到一個(gè)自定義下拉選擇器的動(dòng)畫需求,設(shè)計(jì)師給到的效果圖如下:

你了解 Transition 嗎?一起來深入了解下Transition!

這是很常見的出現(xiàn)-消失動(dòng)畫,在很多組件庫里面都會(huì)出現(xiàn),點(diǎn)擊觸發(fā)器(按鈕)時(shí)才在頁面上渲染 Popup (下拉內(nèi)容),并且 Popup 出現(xiàn)的同時(shí)需要有漸現(xiàn)和下滑的動(dòng)畫;展開之后再次點(diǎn)擊按鈕,Popup 需要漸隱和上滑。

平時(shí)使用的時(shí)候并沒有過多注意它的實(shí)現(xiàn),不妨現(xiàn)在讓我們動(dòng)手試驗(yàn)一下。

暫時(shí)忽略 popup 的內(nèi)容,用了個(gè) div 來占位模擬,HTML 結(jié)構(gòu)很簡(jiǎn)單。

<div class="wrapper">     <div id="button"></div>     <div id="popup"></div> </div>

在點(diǎn)擊按鈕的時(shí)候,讓 popup 顯示/隱藏,然后切換 popup.active 類名。

const btn = document.querySelector("#button"); const popup = document.querySelector("#popup");  if (!popup.classList.contains("active")) {     popup.style.display = "block";     popup.classList.add("active"); } else {     popup.style.display = "none";     popup.classList.remove("active"); }

編寫 CSS 樣式,在不 active 時(shí)透明度設(shè)置為 0,向上偏移,active 時(shí)則不偏移且透明度設(shè)置為 1。

#popup {   display: none;   opacity: 0;   transform: translateY(-8px);   transition: 1s;    &.active {     opacity: 1;     transform: translateY(0%);   } }

完整代碼 在這里,看起來代碼沒什么問題,點(diǎn)擊按鈕切換的時(shí)候,popup 應(yīng)該會(huì)有動(dòng)畫過渡效果。然而實(shí)際運(yùn)行效果:

你了解 Transition 嗎?一起來深入了解下Transition!

硬邦邦地完全沒有過渡效果,這是為啥?明明已經(jīng)設(shè)置了 transition,且 opacitytranslateY 都是可計(jì)算可過渡的數(shù)值,也產(chǎn)生了變化,瀏覽器為什么不認(rèn)呢?

在查文檔之前,我們先嘗試使用萬精油 setTimeout

方案一:setTimeout 萬精油

修改 JS 代碼:

btn.addEventListener("click", () => {   if (!popup.classList.contains("active")) {     popup.style.display = "block";     setTimeout(() => {       popup.classList.add("active");     }, 0);   } else {     popup.classList.remove("active");     setTimeout(() => {       popup.style.display = "none";     }, 600);   } });

可以看到添加了 setTimeout 之后,transition 動(dòng)畫就生效了。

你了解 Transition 嗎?一起來深入了解下Transition!

隱藏時(shí)的 setTimeout 600ms 對(duì)應(yīng) CSS 中設(shè)置的 transition: 0.6s,就是動(dòng)畫完成之后才將 display 設(shè)置為 none

主要困惑的點(diǎn)在于為什么顯示的時(shí)候也需要加 setTimeout 呢?setTimeout 0 在這里起到的作用是什么?帶著問題去翻看規(guī)范文檔。

在規(guī)范文檔的 Starting of transitions 章節(jié)找到下面這段話:

When a style change event occurs, implementations must start transitions based on the computed values that changed in that event. If an element is not in the document during that style change event or was not in the document during the previous style change event, then transitions are not started for that element in that style change event.

翻譯一下,當(dāng)樣式變更事件發(fā)生時(shí),實(shí)現(xiàn)(瀏覽器)必須根據(jù)變更的屬性執(zhí)行過渡動(dòng)畫。但如果樣式變更事件發(fā)生時(shí)或上一次樣式變更事件期間,元素不在文檔中,則不會(huì)為該元素啟動(dòng)過渡動(dòng)畫。

結(jié)合瀏覽器構(gòu)建 RenderTree 的過程,我們可以很清晰地定位到問題:當(dāng)樣式變更時(shí)間發(fā)生時(shí),display: none 的 DOM 元素并不會(huì)出現(xiàn)在 RenderTree 中(style.display='block' 不是同步生效的,要在下一次渲染的時(shí)候才會(huì)更新到 Render Tree),不滿足 Starting of transitions 的條件。

你了解 Transition 嗎?一起來深入了解下Transition!

所以 setTimeout 0 的作用是喚起一次 MacroTask,等到 EventLoop 執(zhí)行回調(diào)函數(shù)時(shí),瀏覽器已經(jīng)完成了一次渲染,再加上 .active 類名,就有了執(zhí)行過渡動(dòng)畫的充分條件。

優(yōu)化方案二:精準(zhǔn)卡位 requestAnimationFrame

既然目的為了讓元素先出現(xiàn)到 RenderTree 中,和渲染相關(guān),很容易想到可以將 setTimeout 替換成 requestAnimationFrame,這樣會(huì)更精準(zhǔn),因?yàn)?requestAnimation 執(zhí)行時(shí)機(jī)和渲染有關(guān)。

if (!popup.classList.contains("active")) {     popup.style.display = "block";      requestAnimationFrame(() => {         popup.classList.add("active");     }); }

補(bǔ)充一個(gè)小插曲:在查找資料的過程中了解到 requestAnimationFrame 的規(guī)范是要求其回調(diào)函數(shù)在 Style/Layout 等階段之前執(zhí)行,起初 Chrome 和 Firefox 是遵循規(guī)范來實(shí)現(xiàn)的。而 Safari 和 Edge 是在執(zhí)行的時(shí)機(jī)是在之后。 從現(xiàn)在的表現(xiàn)上來看,Chrome 和 Firefox 也改成了在之后執(zhí)行,翻看以前的文檔會(huì)說需要嵌套兩層 requestAnimationFrame,現(xiàn)在已經(jīng)不需要了。Is requestAnimationFrame called at the right point?

優(yōu)化方案三:Force Reflow

在規(guī)范文檔中,還留意到以下這句話:

Implementations typically have a style change event to correspond with their desired screen refresh rate, and when up-to-date computed style or layout information is needed for a script API that depends on it.

意思是說,瀏覽器通常還會(huì)在兩種情況下會(huì)產(chǎn)生樣式變更事件,一是滿足屏幕刷新頻率(不就是 requestAnimationFrame?),二是當(dāng) JS 腳本需要獲取最新的樣式布局信息時(shí)。

在 JS 代碼中,有些 API 被調(diào)用時(shí),瀏覽器會(huì)同步地計(jì)算樣式和布局,頻繁調(diào)用這些 API(offset*/client*/getBoundingClientRect/scroll*/…等等)通常會(huì)成為性能瓶頸。

你了解 Transition 嗎?一起來深入了解下Transition!

然而在這個(gè)場(chǎng)景卻可以產(chǎn)生奇妙的化學(xué)反應(yīng):

if (!popup.classList.contains("active")) {   popup.style.display = "block";   popup.scrollWidth;   popup.classList.add("active"); }

注意看,我們只是 display 和 add class 之間讀取了一下 scrollWidth,甚至沒有賦值,過渡動(dòng)畫就活過來了。

你了解 Transition 嗎?一起來深入了解下Transition!

原因是 scrollWidth 強(qiáng)制同步觸發(fā)了重排重繪,再下一行代碼時(shí),popup 的 display 屬性已經(jīng)更新到 Render Tree 上了。

優(yōu)化方案四:過渡完了告訴我 onTransitionEnd

現(xiàn)在【出現(xiàn)】動(dòng)畫已經(jīng)搞明白了,在看開源庫的源碼中發(fā)現(xiàn)像 vue, bootstrap, react-transition-group 等庫都是使用了 force reflow 的方法,而 antd 所使用的 css-animte 庫則是通過設(shè)置 setTimeout。

【消失】動(dòng)畫還不夠優(yōu)雅,前面我們是直接寫死 setTimeout 600,讓元素在動(dòng)畫結(jié)束時(shí)消失的。這樣編碼可復(fù)用性差,修改動(dòng)畫時(shí)間還得改兩處地方(JS + CSS),有沒有更優(yōu)雅的實(shí)現(xiàn)?

popup.classList.remove("active");setTimeout(() => {     popup.style.display = "none"; }, 600);

文檔中也提到了 Transition Events,包括 transitionruntransitionstarttransitionendtransitioncancel,看名字就知道事件代表什么意思,這里可以用 transitionend 進(jìn)行代碼優(yōu)化。

if (!popup.classList.contains("active")) {     popup.style.display = "block";     popup.scrollWidth;     popup.classList.add("active"); } else {     popup.classList.remove("active");     popup.addEventListener('transitionend', () => {         popup.style.display = "none";     }, { once: true }) }

需要注意 transition events 同樣也有冒泡、捕獲的特性,如果有嵌套 transition 時(shí)需要留意 event.target

到這里我們已經(jīng)用原生 JS 完成了一個(gè)出現(xiàn)、消失的動(dòng)畫實(shí)現(xiàn),完整的代碼在這里。文章的最后,我們參照 vue-transition 來開發(fā)一個(gè) React Transition 的單個(gè)元素動(dòng)畫過渡的最小實(shí)現(xiàn)。

仿 v-transition 實(shí)現(xiàn)一個(gè) React Transition 組件

你了解 Transition 嗎?一起來深入了解下Transition!

根據(jù)動(dòng)畫過程拆分成幾個(gè)過程:

  • enter 階段渲染 DOM 節(jié)點(diǎn),初始化動(dòng)畫初始狀態(tài)(添加 *-enter 類名)
  • enter-active 階段執(zhí)行 transition 過渡動(dòng)畫(添加 *-enter-active 類名)
  • enter-active 過渡完成之后進(jìn)入正常展示階段(移除 *-enter-active 類名)

enter-to 和 leave-to 暫時(shí)用不上,leave 階段和 enter 基本一致也不再贅述。

直接看代碼:

export const CSSTransition = (props: Props) => {   const { children, name, active } = props;   const nodeRef = useRef<HTMLElement | null>(null);   const [renderDOM, setRenderDOM] = useState(active);    useEffect(() => {     requestAnimationFrame(() => {       if (active) {         setRenderDOM(true);         nodeRef.current?.classList.add(`${name}-enter`);         // eslint-disable-next-line @typescript-eslint/no-unused-expressions         nodeRef.current?.scrollWidth;         nodeRef.current?.classList.remove(`${name}-enter`);         nodeRef.current?.classList.add(`${name}-enter-active`);          nodeRef.current?.addEventListener("transitionend", (event) => {           if (event.target === nodeRef.current) {             nodeRef.current?.classList.remove(`${name}-enter-active`);           }         });       } else {         nodeRef.current?.classList.add(`${name}-leave`);         // eslint-disable-next-line @typescript-eslint/no-unused-expressions         nodeRef.current?.scrollWidth;         nodeRef.current?.classList.remove(`${name}-leave`);         nodeRef.current?.classList.add(`${name}-leave-active`);          nodeRef.current?.addEventListener("transitionend", (event) => {           if (event.target === nodeRef.current) {             nodeRef.current?.classList.remove(`${name}-leave-active`);             setRenderDOM(false);           }         });       }     });   }, [active, name]);    if (!renderDOM) {     return null;   }    return cloneElement(Children.only(children), {     ref: nodeRef   }); };

這個(gè)組件接收三個(gè) props,分別是

  • children 需要做過渡動(dòng)畫的 ReactElement,只允許傳一個(gè) Element
  • name 過渡動(dòng)畫的 css 類名前綴
  • active 布爾值,用于區(qū)分是進(jìn)場(chǎng)還是消失

使用方式:

<CSSTransition name="fade" active={active}>     // 一個(gè)需要做過渡動(dòng)畫的 ReactElement </CssTransition>

借助 transition-delay,加一點(diǎn)技巧實(shí)現(xiàn) stagger 效果:

你了解 Transition 嗎?一起來深入了解下Transition!

完整的示例代碼在這里,注意:這只是個(gè)快速實(shí)現(xiàn)用于演示的示例,有非常多的問題沒有考慮在內(nèi),僅可用于學(xué)習(xí)參考。

結(jié)語

原本以為非常基礎(chǔ)簡(jiǎn)單的知識(shí)點(diǎn),分分鐘可以寫完這篇文章。沒想到中途查文檔,看資料,制作演示 DEMO 還是花了不少時(shí)間。好在整理資料的過程中也理清了很多知識(shí)點(diǎn)。希望這篇文章對(duì)你熟悉 Transition 動(dòng)畫有所幫助 。

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
天天夜碰日日摸日日澡性色av| 欧美日韩国产经典色站一区二区三区| 国内成人免费视频| 亚洲日本丝袜连裤袜办公室| 欧美成人午夜电影| 欧美自拍视频在线| 国产真人做爰毛片视频直播| 成人3d动漫一区二区三区| 久久久久久久久久久久久久久国产| 色噜噜在线观看| 手机在线免费看毛片| 国产精品69久久久| 久久久999免费视频| 国产原创剧情av| 欧美成人午夜精品免费| 国产又粗又猛又黄视频| 久久99精品国产麻豆不卡| 国产欧美一区二区三区在线看蜜臀 | 成人信息集中地| 欧美精品一区二区成人| 国产sm主人调教女m视频| 美女视频免费一区| 91老师国产黑色丝袜在线| 亚洲色图丝袜美腿| 亚洲开心激情网| 91色视频在线观看| 国产嫩草在线观看| 天天干天天操天天操| 国产麻豆一精品一av一免费| 在线视频观看一区| 高清一区二区三区四区五区| 一本色道久久综合亚洲精品婷婷| 中文字幕精品久久久| 国产精品毛片一区二区在线看舒淇 | 在线日韩av永久免费观看| 国产三级视频网站| 久久午夜精品| 91久久精品网| 国产精品99久久久久久人| 国产精品人人妻人人爽人人牛| 国产又黄又爽又无遮挡| 成人黄色大片在线观看 | 蜜桃视频免费观看一区| 日韩欧美在线免费| 成人免费看片视频| 99热成人精品热久久66| 日韩不卡高清视频| 亚洲欧美激情小说另类| 国模吧一区二区| 国产一区二区在线免费播放| 国产精品乱码久久久| 欧美日韩黄色大片| 91免费看片网站| 国产一区二区视频在线免费观看| 婷婷免费在线观看| 天天操天天干天天爱| 欧美日韩视频在线观看一区二区三区 | 亚洲区一区二区三区| 久久久久国产精品夜夜夜夜夜| 久久精品日韩一区二区三区| 日韩在线视频线视频免费网站| 精品少妇一区二区三区在线| a级片在线播放| 欧美一区二区三区免费在线看| 国产在线精品二区| 老妇女50岁三级| 亚洲男人的天堂一区二区 | 精品伦精品一区二区三区视频密桃| 精品亚洲国内自在自线福利| 欧美一级一区二区| 欧美一区三区二区在线观看| 日本www在线视频| 波多野结衣视频网址| 在线播放/欧美激情| av中文字幕av| 久久亚洲国产精品一区二区| 亚洲欧美精品中文字幕在线| 免费看国产黄色片| 丁香六月综合激情| 国产精品免费福利| 精品无码久久久久| 3atv一区二区三区| av免费网站观看| 国产成人高清在线| 日韩美女视频中文字幕| 人人干在线观看| 色哟哟日韩精品| 免费看国产曰批40分钟| 极品少妇一区二区三区精品视频| 欧美在线观看网址综合| 亚洲天堂视频在线播放| 偷偷色噜狠狠狠狠的777米奇| 国产曰批免费观看久久久| 欧美第一黄网免费网站| 在线成人免费av| 亚洲最色的网站| 国产精品一区二区三区在线观 | 欧美va亚洲va在线观看蝴蝶网| 亚洲三区四区| 国产黄a三级三级看三级| 精品日韩一区二区三区| 国产一线二线三线在线观看| 国内精品不卡在线| 懂色中文一区二区三区在线视频| 国产成人精品无码高潮| 在线成人一区二区| 蜜臀av一区二区三区有限公司| 国产精品不卡一区二区三区| 久久久久综合一区二区三区| 91亚洲国产成人久久精品麻豆| 久久精品久久久久久国产 免费| 欧美三级电影在线播放| 99热这里精品| 欧美野外猛男的大粗鳮| 国产精品久久久久久久一区二区| 色在人av网站天堂精品| 天堂а√在线中文在线新版| 欧美高清videos高潮hd| 这里只有精品999| 国产成人精品在线播放| 亚洲大尺度视频| 91嫩草在线视频| 青娱乐精品视频在线| 国产精品视频免费一区二区三区| 精品一区二区三区在线观看| 久久99国产精品99久久| 久久久久久久久久久黄色| 91午夜在线观看| 亚洲国产精品久久人人爱蜜臀| 小泽玛利亚视频在线观看| 午夜久久久久久电影| 亚洲一区二区三区四区视频 | 99视频在线免费观看| 韩国欧美一区二区| 国产又粗又爽又黄的视频| 国产精品久久久久影院亚瑟| 日韩欧美中文视频| 亚洲国产成人精品电影| 日本少妇xxxxx| 欧美精品一区在线播放| 日韩福利电影在线| 亚洲最新免费视频| 黑人精品xxx一区| 懂色av蜜臀av粉嫩av永久| 91国偷自产一区二区三区的观看方式| 国产精品热久久| 日韩亚洲视频| 日韩欧美在线看| 欧美成人免费观看视频| 国产啪精品视频| 国产免费成人在线视频| 久久久久亚洲av成人网人人软件| 在线视频日本亚洲性| 巨乳诱惑日韩免费av| 97精品国产aⅴ7777| 久久成人麻豆午夜电影| 少妇网站在线观看| 日韩在线视频国产| 麻豆成人综合网| 2022中文字幕| 精品亚洲国产成av人片传媒| 亚洲老妇色熟女老太| 欧美一级视频免费看| 亚洲乱亚洲乱妇无码| 亚洲欧美日韩精品永久在线| 人妻少妇精品无码专区二区| 日韩欧美一区二区三区在线| 久久久久国产精品一区二区 | 亚洲男同性视频| 中文字幕五月天| 久久99欧美| 欧美日韩欧美一区二区| 亚洲天堂中文网| 日本一道本久久| 精品国偷自产在线视频| av不卡在线观看| 91在线无精精品白丝| 久久人人爽爽人人爽人人片av| 欧美性三三影院| 国产成人手机在线| 性鲍视频在线观看| 国产成人精品在线视频| 五月婷婷激情综合网| 国产精久久久久久| 免费观看亚洲视频| 中文字幕制服丝袜成人av| 久草国产在线观看| 最新黄色av网站| 国内精品久久久久久| 精品国产精品自拍| 国产精品乱码一区二区| 人妻 丝袜美腿 中文字幕| 91亚洲国产成人精品一区| 欧美大片免费观看| 亚洲第一综合色| 欧美美女黄色网| 91高清视频免费观看| 欧美少妇bbb| 99精品久久99久久久久| 亚洲 小说区 图片区| 欧美狂猛xxxxx乱大交3| 欧美日韩黄色一级片| 国产精品久久国产三级国电话系列| 日韩一级片免费在线观看| 东京热无码av男人的天堂| r级无码视频在线观看| 国产精品制服诱惑| 亚洲精品在线观看www| 亚洲第一福利网站| 欧美日韩国产一级二级| 国产精品久久久久久久久久久久久久久久久久 | 欧美精品18+| 久久久影院官网| 激情五月播播久久久精品| 69精品久久久| 国产精品国产精品| 欧美激情久久久| 深夜福利一区二区| 在线观看国产精品91| 亚洲成人教育av| 4438成人网| 欧美日韩午夜影院| 在线观看中文字幕不卡| 午夜精品久久久久久久99樱桃 | 色综合夜色一区| 一区二区三区高清| 亚洲最新视频在线播放| 亚洲精品你懂的| 亚洲激情图片qvod| 亚洲六月丁香色婷婷综合久久| 久久精品男人天堂av| 久久99精品国产.久久久久久| 色呦呦中文字幕| 日韩高清电影一区| 天天干天天干天天干| 懂色av一区二区三区四区 | a级大片在线观看| 中文视频一区视频二区视频三区| 亚洲视频在线观看视频| 国产成人无码精品| 五月婷婷深爱五月| 桥本有菜av在线| 国产精品美女www| 日韩欧美电影在线| 国产精品福利一区二区| 亚洲国产日韩综合久久精品| 91国偷自产一区二区三区观看| 成人免费av网站| 一区二区三区免费| 91美女片黄在线观看| 国产精品视频一区二区三区,| 亚洲天堂久久新| 国产玉足脚交久久欧美| 日本精品视频一区| 91精品综合久久久久久五月天| 亚洲午夜av久久乱码| 国产精品久久久久国产精品日日| 久久精品国产精品亚洲综合| 99热这里只有精品在线观看| 青娱乐免费在线视频| 国产伦精品一区二区三区妓女| 成人在线电影网站| 国产精品一国产精品最新章节| 色噜噜狠狠狠综合曰曰曰88av| 久久久久久久综合日本| 国产午夜精品无码一区二区| 日本精品一区二区三区在线| 亚洲片在线资源| 久久免费高清| 男人天堂中文字幕| 欧美久久久久久一卡四| 久久久国产精品视频| 视频一区在线播放| 日韩欧美亚洲另类| 亚洲精品中文字幕有码专区| 国产精品男女视频| 亚洲成人动漫在线| 欧洲永久精品大片ww免费漫画| 午夜爽爽爽男女免费观看| 日韩女优制服丝袜电影| 欧美视频第三页| 国产尤物一区二区在线| 亚洲精品国产成人久久av盗摄| 制服丝袜中文字幕一区| 污视频在线观看免费网站| 91丨porny丨探花| 91精品国产一区二区三区香蕉 | 欧美黑人猛猛猛| 最新中文字幕av| 国产日韩精品中文字无码| 91视频免费在观看| 日韩av手机在线免费观看| 色综合久久久久久| 日韩av网站电影| 热99精品里视频精品| 亚洲一卡二卡区| 波多野结衣xxxx| 亚洲一区亚洲二区| 成人av男人的天堂| 成人一区二区三| 免费一级黄色大片| 国产99久久久国产精品免费看 | 一区二区三区不卡在线观看| 亚洲女人天堂视频| 亚洲国产一区二区三区在线| 好吊色视频在线观看| 麻豆中文一区二区| 在线观看91av| 粉嫩av四季av绯色av第一区| 国产第一页视频| 中文字幕91爱爱| 国产精品久久久久影院| 日韩欧美精品在线| 91色精品视频在线| 中文字幕欧美视频| 另类综合日韩欧美亚洲| 欧美日韩国产123区| 精品中文字幕人| 婷婷久久综合网| 成人网在线免费视频| 国产亚洲精品91在线| 欧美激情亚洲天堂| 国产一级做a爱片久久毛片a| 一区二区三区美女视频| 久久露脸国产精品| 日韩欧美国产片| 美女久久一区| 日韩视频不卡中文| 欧美视频1区| 五月婷婷中文字幕| 欧美色欧美亚洲高清在线视频| 国产久一一精品| 日韩乱码人妻无码中文字幕久久| 成人激情免费网站| 自拍偷拍亚洲区| 黄色免费观看视频网站| 91国产精品一区| 亚洲国产天堂久久国产91| 无码中文字幕色专区| 老汉av免费一区二区三区| 久久久久久国产精品| 欧美日韩精品一区二区三区视频播放| 精品日韩中文字幕| 婷婷丁香激情网| 亚洲天堂成人网| 91.com在线| 国产亚洲精品7777| 日韩成人在线资源| 国产精品18久久久久久久久| 91在线免费看网站| 天天干,夜夜爽| 91精品国产自产在线观看永久| 亚洲国产成人精品综合99| 亚洲国产毛片aaaaa无费看| 国产三区精品| 国产一区二区小视频| 亚洲高清免费观看高清完整版| 少妇网站在线观看| 99精品欧美一区二区三区综合在线| 91高清在线免费观看| 全网免费在线播放视频入口| 欧美三级日本三级少妇99| 波多野结衣50连登视频| 99久久免费精品| 久久久久久国产精品一区| 欧美一级视频免费| 日本精品视频在线| 亚洲图片在线视频| 日韩在线免费观看视频| 岛国片在线免费观看| 欧美一区二区在线播放| 麻豆网站免费观看| 疯狂做受xxxx高潮欧美日本| 欧美成人免费高清视频| 国产精品天天摸av网| 精品嫩模一区二区三区| 99视频一区二区| 性欧美videosex高清少妇| 国产精品综合久久| 欧美久久电影| 国产成人av一区| 正在播放国产精品| 成人免费视频免费观看| 欧美一卡2卡3卡4卡无卡免费观看水多多 | 国产chinese精品一区二区| 日本欧美加勒比视频| 国产精品黄视频| 91午夜精品亚洲一区二区三区| 欧美成人乱码一区二区三区| 人人妻人人藻人人爽欧美一区| 欧美一级视频精品观看| 一本加勒比北条麻妃| 亚洲精品日韩在线| 在线观看免费av片| 欧美一区视频在线| 日韩电影一二三区| 亚洲日本精品| 成人欧美一区二区三区黑人麻豆| 日本xxxxxxxxxx75| 日韩欧美a级成人黄色| 亚洲一区二区三区黄色| 亚洲黄色www网站| 青青国产在线视频| 91文字幕巨乱亚洲香蕉| 91毛片在线观看| 色婷婷综合网站| 亚洲人成网站777色婷婷| 在线播放一级片| 亚洲一区二区三区久久 | 巨乳诱惑日韩免费av|