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

十個(gè)有用的 Vue.js 自定義 Hook

開(kāi)發(fā) 前端
Vue.js 是我使用的第一個(gè) JavaScript 框架。 我可以說(shuō) Vue.js 是我進(jìn)入 JavaScript 世界的第一扇門(mén)之一。

Vue.js 是我使用的第一個(gè) JavaScript 框架。 我可以說(shuō) Vue.js 是我進(jìn)入 JavaScript 世界的第一扇門(mén)之一。 

目前,Vue.js 仍然是一個(gè)很棒的框架。 我認(rèn)為有了組合 API,Vue.js 只會(huì)增長(zhǎng)得更多。 在本文中,我將向分享 10 個(gè)可以使用 Vue.js 制作的有用的自定義鉤hook。

01、使用窗口調(diào)整大小

這是一個(gè)基本的hook。 因?yàn)樗谠S多項(xiàng)目中使用,并且使用純 JavaScript 或任何框架構(gòu)建它太容易了。 

與 Vue 相同,只需幾行代碼即可構(gòu)建它。 

這是我的代碼:

import { ref, onMounted, onUnmounted } from 'vue';


export function useWindowResize() {
  const width = ref(window.innerWidth);
  const height = ref(window.innerHeight);
  const handleResize = () => {
    width.value = window.innerWidth;
    height.value = window.innerHeight;
  }


  onMounted(() => {
    window.addEventListener('resize', handleResize)
  });


  onUnmounted(() => {
    window.removeEventListener('resize', handleResize)
  })


  return {
    width,
    height
  }
}

不僅構(gòu)建簡(jiǎn)單,而且使用起來(lái)也很容易。 只需要調(diào)用這個(gè)鉤子即可獲取窗口的寬度和高度:

setup() {
    const { width, height } = useWindowResize();
}

02、使用存儲(chǔ)

您想通過(guò)將數(shù)據(jù)值存儲(chǔ)在會(huì)話(huà)存儲(chǔ)或本地存儲(chǔ)中并將該值綁定到視圖來(lái)持久保存數(shù)據(jù)嗎? 只需一個(gè)簡(jiǎn)單的hook——useStorage,一切就變得如此簡(jiǎn)單。 

我們只需要?jiǎng)?chuàng)建一個(gè)hook,返回從存儲(chǔ)中獲取的數(shù)據(jù),以及一個(gè)在我們想要更改數(shù)據(jù)時(shí)將數(shù)據(jù)存儲(chǔ)在存儲(chǔ)中的函數(shù)。 

這是我的代碼。

import { ref } from 'vue';


const getItem = (key, storage) => {
  let value = storage.getItem(key);
  if (!value) {
    return null;
  }
  try {
    return JSON.parse(value)
  } catch (error) {
    return value;
  }
}


export const useStorage = (key, type = 'session') => {
  let storage = null;
  switch (type) {
    case 'session':
      storage = sessionStorage;
      break;
    case 'local':
      storage = localStorage;
      break;
    default:
      return null;
  }
  const value = ref(getItem(key, storage));
  const setItem = (storage) => {
    return (newValue) => {
      value.value = newValue;
      storage.setItem(key, JSON.stringify(newValue));
    }
  }
  return [
    value,
    setItem(storage)
  ]
}

在我的代碼中,我使用 JSON.parse 和 JSON.stringify 來(lái)格式化數(shù)據(jù)。 

如果您不想格式化它,可以將其刪除。 這是如何使用此hook的示例。

const [token, setToken] = useStorage('token');
setToken('new token');

03、使用網(wǎng)絡(luò)狀態(tài)

這是一個(gè)有用的hook,支持檢查網(wǎng)絡(luò)連接的狀態(tài)。 為了實(shí)現(xiàn)這個(gè)hook,我們需要為“在線(xiàn)”和“離線(xiàn)”事件添加事件監(jiān)聽(tīng)器。 

在事件中,我們只是調(diào)用一個(gè)回調(diào)函數(shù),參數(shù)為網(wǎng)絡(luò)狀態(tài)。 

這是我的代碼:

import { onMounted, onUnmounted } from 'vue';


export const useNetworkStatus = (callback = () => { }) => {
  const updateOnlineStatus = () => {
    const status = navigator.onLine ? 'online' : 'offline';
    callback(status);
  }


  onMounted(() => {
    window.addEventListener('online', updateOnlineStatus);
    window.addEventListener('offline', updateOnlineStatus);
  });


  onUnmounted(() => {
    window.removeEventListener('online', updateOnlineStatus);
    window.removeEventListener('offline', updateOnlineStatus);
  })
}

只是簡(jiǎn)單易用。 

目前,我使用參數(shù)“online”/“offline”調(diào)用回調(diào)函數(shù)。 您可以將其更改為真/假或任何您想要的。

useNetworkStatus((status) => { 
    console.log(`Your network status is ${status}`);
}

04、使用復(fù)制到剪貼板

將文本復(fù)制到剪貼板是每個(gè)項(xiàng)目中都很流行的功能。 我知道我們可以創(chuàng)建一個(gè)函數(shù)來(lái)代替鉤子來(lái)做到這一點(diǎn)。 

但我喜歡數(shù)字 10,所以我決定在這篇文章中加入這個(gè)hook。 這個(gè)hook非常簡(jiǎn)單,只需返回一個(gè)支持將文本復(fù)制到剪貼板的函數(shù)即可。

function copyToClipboard(text) {
  let input = document.createElement('input');
  input.setAttribute('value', text);
  document.body.appendChild(input);
  input.select();
  let result = document.execCommand('copy');
  document.body.removeChild(input);
  return result;
}


export const useCopyToClipboard = () => {
  return (text) => {
    if (typeof text === "string" || typeof text == "number") {
      return copyToClipboard(text);
    }
    return false;
  }
}

在我的代碼中,我在函數(shù) copyToClipboard 中將邏輯復(fù)制文本放入剪貼板。 我知道我們有很多方法可以做到這一點(diǎn)。 你可以在此功能中嘗試最適合你的方法。 

至于如何使用,調(diào)用即可。

const copyToClipboard = useCopyToClipboard();
copyToClipboard('just copy');

05、使用主題

只需一個(gè)簡(jiǎn)短的鉤子即可更改網(wǎng)站的主題。 它可以幫助我們輕松切換網(wǎng)站的主題,只需用主題名稱(chēng)調(diào)用此hook即可。 這是我用來(lái)定義主題變量的 CSS 代碼示例。

html[theme="dark"] {
   --color: #FFF;
   --background: #333;
}
html[theme="default"], html {
   --color: #333;
   --background: #FFF;
}

要更改主題,我們只需要?jiǎng)?chuàng)建一個(gè)自定義掛鉤,它將返回一個(gè)通過(guò)主題名稱(chēng)更改主題的函數(shù)。 

這是我的這個(gè)鉤子的代碼:

export const useTheme = (key = '') => {
  return (theme) => {
    document.documentElement.setAttribute(key, theme);
  }
}

而且使用起來(lái)太方便了。

const changeTheme = useTheme();
changeTheme('dark');

06、使用頁(yè)面可見(jiàn)性

有時(shí),當(dāng)客戶(hù)不關(guān)注我們的網(wǎng)站時(shí),我們需要做一些事情。 為此,我們需要一些東西來(lái)讓我們知道用戶(hù)是否集中注意力。 這是一個(gè)定制的hook。 

我稱(chēng)之為 usePageVisibility,下面是該hook的代碼:

import { onMounted, onUnmounted } from 'vue';


export const usePageVisibility = (callback = () => { }) => {
  let hidden, visibilityChange;
  if (typeof document.hidden !== "undefined") {
    hidden = "hidden";
    visibilityChange = "visibilitychange";
  } else if (typeof document.msHidden !== "undefined") {
    hidden = "msHidden";
    visibilityChange = "msvisibilitychange";
  } else if (typeof document.webkitHidden !== "undefined") {
    hidden = "webkitHidden";
    visibilityChange = "webkitvisibilitychange";
  }


  const handleVisibilityChange = () => {
    callback(document[hidden]);
  }


  onMounted(() => {
    document.addEventListener(visibilityChange, handleVisibilityChange, false);
  });


  onUnmounted(() => {
    document.removeEventListener(visibilityChange, handleVisibilityChange);
  });
}

要使用這個(gè)hook,我們只需要?jiǎng)?chuàng)建一個(gè)帶有客戶(hù)端隱藏狀態(tài)(焦點(diǎn)狀態(tài))參數(shù)的回調(diào)函數(shù)。

usePageVisibility((hidden) => {
   console.log(`User is${hidden ? ' not' : ''} focus your site`);
});

07、使用視口

在第一個(gè)自定義hook中,我們構(gòu)建了useWindowRezie,它可以幫助我們查看窗口的當(dāng)前寬度和高度。 

我認(rèn)為這對(duì)于那些想要構(gòu)建適用于多種屏幕尺寸的東西的人很有幫助。 

在我處理過(guò)的案例中,我們經(jīng)常使用寬度來(lái)檢測(cè)當(dāng)前用戶(hù)設(shè)備。 它可以幫助我們?cè)谒麄兊脑O(shè)備上安裝一些東西。 

在此hook中,我將使用 useWindowResize 構(gòu)建相同的內(nèi)容,但它返回設(shè)備名稱(chēng)而不是寬度和高度值。 

這是這個(gè)hook的代碼。

import { ref, onMounted, onUnmounted } from 'vue';


export const MOBILE = 'MOBILE'
export const TABLET = 'TABLET'
export const DESKTOP = 'DESKTOP'


export const useViewport = (config = {}) => {
  const { mobile = null, tablet = null } = config;
  let mobileWidth = mobile ? mobile : 768;
  let tabletWidth = tablet ? tablet : 922;
  let device = ref(getDevice(window.innerWidth));
  function getDevice(width) {
    if (width < mobileWidth) {
      return MOBILE;
    } else if (width < tabletWidth) {
      return TABLET;
    }
    return DESKTOP;
  }


  const handleResize = () => {
    device.value = getDevice(window.innerWidth);
  }


  onMounted(() => {
    window.addEventListener('resize', handleResize);
  });


  onUnmounted(() => {
    window.removeEventListener('resize', handleResize);
  });


  return {
    device
  }
}

它是如此容易。 除了默認(rèn)的設(shè)備尺寸之外,當(dāng)我們使用包含手機(jī)和平板電腦尺寸的參數(shù)對(duì)象調(diào)用該hook時(shí),用戶(hù)可以修改它。 這是我們使用它的方式:

const { device } = useViewport({ mobile: 700, table: 900 });

08、使用OnClickOutside

目前,模態(tài)被用于許多應(yīng)用程序中。 它對(duì)于許多用例(表單、確認(rèn)、警告等)確實(shí)很有幫助。 

我們經(jīng)常用它處理的流行操作之一是用戶(hù)在模式之外單擊。 useOnClickOutside 對(duì)于這種情況是一個(gè)有用的hook。 

我們只需要一個(gè) ref 元素、回調(diào)函數(shù)并將其綁定到窗口事件中。 這是我的代碼(適用于桌面和移動(dòng)設(shè)備):

import { onMounted, onUnmounted } from 'vue';


export const useOnClickOutside = (ref = null, callback = () => {}) => {
  function handleClickOutside(event) {
    if (ref.value && !ref.value.contains(event.target)) {
      callback()
    }
  }


  onMounted(() => {
    document.addEventListener('mousedown', handleClickOutside);
  })


  onUnmounted(() => {
    document.removeEventListener('mousedown', handleClickOutside);
  });
}

正如我所說(shuō),要使用它,我們只需要使用參數(shù) ref 元素和回調(diào)函數(shù)來(lái)調(diào)用它。

<template>
    <div ref="container">View</div>
</template>
<script>
import { ref } from 'vue';
export default {
    setup() {
        const container = ref(null);
        useOnClickOutside(container, () => {
            console.log('Clicked outside'); 
        })
    }
}
</script>

09、使用滾動(dòng)到底部

除了分頁(yè)列表之外,加載更多(或延遲加載)是加載數(shù)據(jù)的一種友好方式。 特別是對(duì)于移動(dòng)設(shè)備,幾乎在移動(dòng)設(shè)備上運(yùn)行的應(yīng)用程序都會(huì)在其 UI 中加載更多負(fù)載。 為此,我們需要檢測(cè)用戶(hù)滾動(dòng)到列表底部并觸發(fā)該事件的回調(diào)。 

useScrollToBottom 是一個(gè)有用的hook來(lái)支持您這樣做。 這是我構(gòu)建該hook的代碼:

import { onMounted, onUnmounted } from 'vue';


export const useScrollToBottom = (callback = () => { }) => {
  const handleScrolling = () => {
    if ((window.innerHeight + window.scrollY) >= document.body.scrollHeight) {
      callback();
    }
  }


  onMounted(() => {
    window.addEventListener('scroll', handleScrolling);
  });


  onUnmounted(() => {
    window.removeEventListener('scroll', handleScrolling);
  });
}

在我的hook中,我通過(guò)條件“((window.innerHeight + window.scrollY) >= document.body.scrollHeight)”檢測(cè)到底部。 

我們有很多方法來(lái)檢測(cè)它。 如果您的項(xiàng)目符合其他條件,我們就使用它們。 以下是如何使用此hook的示例:

useScrollToBottom(() => { console.log('Scrolled to bottom') })

10、使用定時(shí)器

最后,我們來(lái)到最后一個(gè)鉤子。 這個(gè)鉤子的代碼比其他鉤子要長(zhǎng)一些。 useTimer 將支持我們運(yùn)行帶有一些選項(xiàng)的計(jì)時(shí)器,例如開(kāi)始、暫停/恢復(fù)、停止。 

為此,我們需要使用 setInterval 方法,在該方法中,我們將推送處理函數(shù)。 在那里,我們需要檢查計(jì)時(shí)器的暫停狀態(tài)。 

如果計(jì)時(shí)器沒(méi)有暫停,我們只需要調(diào)用一個(gè)回調(diào)函數(shù),該函數(shù)由用戶(hù)作為參數(shù)傳遞。 

為了支持用戶(hù)了解該計(jì)時(shí)器的當(dāng)前暫停狀態(tài),除了 useTimer 操作之外,還為他們提供一個(gè)變量 isPaused ,其值作為計(jì)時(shí)器的暫停狀態(tài)。 

這是我構(gòu)建該hook的代碼:

import { ref, onUnmounted } from 'vue';


export const useTimer = (callback = () => { }, step = 1000) => {
  let timerVariableId = null;
  let times = 0;
  const isPaused = ref(false);


  const stop = () => {
    if (timerVariableId) {
      clearInterval(timerVariableId);
      timerVariableId = null;
      resume();
    }
  }


  const start = () => {
    stop();
    if (!timerVariableId) {
      times = 0;
      timerVariableId = setInterval(() => {
        if (!isPaused.value) {
          times++;
          callback(times, step * times);
        }
      }, step)
    }
  }


  const pause = () => {
    isPaused.value = true;
  }


  const resume = () => {
    isPaused.value = false;
  }


  onUnmounted(() => {
    if (timerVariableId) {
      clearInterval(timerVariableId);
    }
  })


  return {
    start,
    stop,
    pause,
    resume,
    isPaused
  }
}

這是使用 useTimer hook的一種方法:

function handleTimer(round) {      
    roundNumber.value = round;    
}
const { 
    start,
    stop,
    pause,
    resume,
    isPaused
} = useTimer(handleTimer);

到這里,我已經(jīng)跟大家分享了10 個(gè)有用的 Vue.js hook。 我認(rèn)為它們的構(gòu)建和使用都很簡(jiǎn)單。 我只是為那些想要在 Vue.js 中使用這些鉤子的人提供一些注釋。

請(qǐng)記住刪除要添加到窗口的事件。 Vue 為我們提供了一個(gè)有用的組合 API onUnmounted ,它可以幫助我們?cè)谛遁dhook之前運(yùn)行我們的操作。 

在我構(gòu)建的每個(gè)鉤子中,我總是刪除 onUnmounted 中的事件偵聽(tīng)器。

僅在真正需要時(shí)才使用反應(yīng)變量。 如果您想使用一個(gè)存儲(chǔ)某些內(nèi)容的變量,并且希望在數(shù)據(jù)更改時(shí)同步其數(shù)據(jù),那么,讓我們使用反應(yīng)式變量。 

但如果它只是一個(gè)在我們的hook中存儲(chǔ)數(shù)據(jù)的變量(計(jì)數(shù)器、標(biāo)志......),我認(rèn)為你不需要使用反應(yīng)變量。

如果可以的話(huà),不要在鉤子中進(jìn)行硬編碼(設(shè)置固定值)。 

我認(rèn)為我們只需要將邏輯存儲(chǔ)在我們的hook中。 關(guān)于配置值,我們應(yīng)該讓用戶(hù)填寫(xiě)它(例如:useViewport)。

最后,在我的文章中,我與您分享了10 個(gè)有用的 Vue 自定義hook,我希望它們對(duì)您有所幫助。 Vue.js 是一個(gè)很棒的框架,我希望你可以用它構(gòu)建更多很棒的東西。 

責(zé)任編輯:華軒 來(lái)源: web前端開(kāi)發(fā)
相關(guān)推薦

2022-04-08 08:11:44

自定義鉤子Vuejs

2021-09-18 10:07:23

開(kāi)發(fā)技能代碼

2009-09-03 10:08:27

JavaScript自

2024-04-02 08:31:43

2023-01-17 16:43:19

JupyterLab技巧工具

2024-01-03 08:53:35

JavaScrip編程語(yǔ)言NodeJS

2024-02-01 12:53:00

PandasPython數(shù)據(jù)

2022-06-06 09:28:36

ReactHook

2025-07-01 09:46:30

2023-12-21 09:00:21

函數(shù)React 組件useEffect

2012-01-17 13:54:02

PHP

2021-02-23 08:01:01

HooksReact架構(gòu)

2023-02-22 16:43:05

Web開(kāi)發(fā)github

2019-09-26 14:20:27

JavaScript代碼編程語(yǔ)言

2012-12-27 09:56:34

IaaSPaaS數(shù)據(jù)庫(kù)

2023-08-02 16:14:04

2020-12-28 10:10:04

Vue自定義指令前端

2019-05-29 14:23:53

Vue.js組件通信

2022-02-22 13:14:30

Vue自定義指令注冊(cè)

2023-06-09 10:27:13

Vue開(kāi)源
點(diǎn)贊
收藏

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

欧美区亚洲区| 欧美视频在线播放一区| 亚洲人辣妹窥探嘘嘘| 国内毛片毛片毛片毛片| 波多野结衣在线播放一区| 亚洲无人区一区| 在线免费观看羞羞视频一区二区| 91视频 - 88av| 国产精品久久久久久免费免熟 | 亚洲精品中文字幕乱码无线| 秋霞av在线| 日本欧美高清| 亚洲一区二区视频| 欧美日韩中文国产一区发布| 国产亚洲第一页| 欧美区一区二区| 亚洲天堂2016| 91亚洲精华国产精华| www久久久久久久| 麻豆精品蜜桃| 国产欧美视频一区二区| 庆余年2免费日韩剧观看大牛| 中文在线观看免费视频| av有码在线观看| 成人国产精品免费观看视频| 欧美激情二区三区| 中文字幕一区二区三区人妻在线视频| 在线中文字幕电影| 国产91精品精华液一区二区三区 | 欧美性爽视频| 国产 日韩 欧美大片| 国产成人精品在线| 亚洲黄色小说视频| 欧美成人一二区| 日韩一区欧美一区| 91久久夜色精品国产网站| 97久久久久久久| 国产尤物久久久| 精品视频一区二区三区免费| 一区二区免费电影| 国产v在线观看| 美日韩一区二区三区| 久久视频免费观看| 美女黄色一级视频| 欧美午夜三级| 中文字幕视频一区| 日本一区免费在线观看| 中文字幕乱码人妻二区三区| 99久久夜色精品国产亚洲96| 日韩一区二区高清| 国产中文字幕二区| 成人免费视频| 国产精品99久| 热久久免费视频精品| 久久精品视频国产| 精品国产乱码久久久| 精品视频1区2区3区| 日韩福利视频在线| 肉肉视频在线观看| 久久综合色8888| 成人免费视频网| 狠狠躁夜夜躁人人爽天天高潮| 久久最新网址| 欧美变态凌虐bdsm| 无遮挡又爽又刺激的视频| 免费在线毛片网站| 99久久精品99国产精品| 国产专区精品视频| 国产在线观看黄色| 欧美福利一区| 在线观看不卡av| 一级免费黄色录像| 久久99蜜桃| 在线播放精品一区二区三区| 国产精品视频一区二区在线观看| 欧美男男freegayvideosroom| 亚洲大胆美女视频| 超碰91在线播放| 国产韩日精品| 欧美日韩精品一区二区三区| 国产91在线视频观看| a级影片在线观看| 国产视频一区二区三区在线观看| 国产a一区二区| 一女二男一黄一片| 日本不卡中文字幕| 久久久在线免费观看| 日本免费网站视频| 欧美激情视频一区二区三区免费| 欧美—级a级欧美特级ar全黄| 五月婷婷六月香| 久久99国内| 久久精品99国产精品酒店日本| aa片在线观看视频在线播放| 在线播放一区二区精品视频| 91超碰这里只有精品国产| 福利在线一区二区三区| 一二三四视频在线中文| 亚洲五月六月丁香激情| 国模杨依粉嫩蝴蝶150p| 国产电影一区二区| 欧美男男青年gay1069videost| 久久精品香蕉视频| 无人区乱码一区二区三区| 欧美精品tushy高清| 亚洲av无码一区东京热久久| 欧美视频精品全部免费观看| 亚洲精品国产精品久久清纯直播| 亚洲熟妇一区二区| 精品一区二区男人吃奶| 精品精品国产高清a毛片牛牛| 性欧美丰满熟妇xxxx性仙踪林| 久久99精品久久久久久欧洲站| 亚洲色图欧美制服丝袜另类第一页| 国内精品久久99人妻无码| 久久久人成影片免费观看| 日韩有码在线观看| 久久国产高清视频| 国产精品一二| 国产成人欧美在线观看| www.色呦呦| 成人综合激情网| 国产欧美日韩在线播放| 色欲av伊人久久大香线蕉影院| 懂色一区二区三区免费观看| 少妇特黄a一区二区三区| av网站大全在线观看| 最新久久zyz资源站| 国模吧无码一区二区三区| 日韩精品视频中文字幕| 在线精品国产欧美| 精品人妻无码一区二区性色| 天堂在线一区二区| 国产欧美中文字幕| 奇米影视888狠狠狠777不卡| 亚洲午夜精品网| 日本成人在线免费| 伊人久久大香线蕉精品组织观看| 久久精品视频在线观看| 国产在线一级片| 国产最新精品免费| 国产精品一区在线观看| 你懂的在线观看视频网站| 国产精品妹子av| 超级碰在线观看| 擼擼色在线看观看免费| 欧美伊人精品成人久久综合97 | 日韩国产在线播放| 欧美性猛交xxxx乱| 欧美中文字幕| 91麻豆桃色免费看| 1024国产在线| 欧美视频一二三区| 欧洲性xxxx| 蜜臀av性久久久久av蜜臀妖精| 日韩av高清在线播放| 日本欧美韩国| 一本色道久久88综合亚洲精品ⅰ | 日韩电影一二三区| 91在线精品观看| 九色视频网站在线观看| 亚洲欧美电影院| 国产三区在线视频| 国产精品3区| 欧美精品在线观看| 精品黑人一区二区三区| 国产一区二区在线视频| 蜜桃av噜噜一区二区三区| 男人的天堂在线视频免费观看| 欧美日韩亚洲高清一区二区| 免费成人美女女在线观看| 激情成人午夜视频| 成人午夜视频免费观看| 美腿丝袜亚洲图片| 国产91在线播放| 亚洲av无码乱码国产精品| 国产亚洲欧美中文| 亚洲成人天堂网| 亚洲素人在线| 97香蕉超级碰碰久久免费软件| 亚洲天堂网在线视频| 99re6这里只有精品视频在线观看| av女优在线播放| 成人在线啊v| 欧美精品久久久久久久免费观看| 少妇精品高潮欲妇又嫩中文字幕| 欧美视频免费在线| 国模私拍在线观看| 欧美搞黄网站| 精品欧美国产| www欧美xxxx| 日韩一区二区三区电影在线观看| 国产精品不卡av| 国产午夜精品美女毛片视频| 欧美一级特黄aaa| 日韩一区三区| 国产999精品久久久影片官网| 91美女视频在线| 精品久久五月天| 亚洲精品国产欧美在线观看| 亚洲三级在线免费观看| 免费成人深夜夜行p站| 久久精品国产精品亚洲红杏| 亚洲国产日韩综合一区| 亚洲成人一区在线观看| 欧美另类极品videosbest最新版本| 亚洲影视一区二区| 午夜久久久久久久久久一区二区| av在线天堂网| 日本美女一区二区| 国产精品12345| 在线成人直播| 日韩亚洲视频在线| 久久动漫网址| 亚洲影影院av| 毛片在线网址| 色偷偷9999www| 国产又粗又黄又爽的视频| 天天av天天翘天天综合网色鬼国产| 免费不卡的av| 国产一区二区精品在线观看| av视屏在线播放| 日韩午夜激情| 欧美日韩在线观看一区二区三区| 九九99久久精品在免费线bt| 国产精品福利观看| 国产成人高清精品| 亚洲性生活视频| 超碰在线免费97| 欧美日韩在线视频观看| 一区二区三区伦理片| 成人午夜av影视| 三上悠亚 电影| 亚洲少妇一区| 日韩a级在线观看| 九九综合九九| 精品乱色一区二区中文字幕| gogo人体一区| 日本免费在线精品| 黄色漫画在线免费看| 亚洲性视频网站| 日色在线视频| 日韩av在线网址| 四季av日韩精品一区| 欧美成人精品高清在线播放| av在线资源观看| 日韩一级二级三级| av网站在线观看免费| 欧美一区二区三区在线视频| 日本熟妇成熟毛茸茸| 欧美国产综合一区二区| 97人妻精品一区二区免费| 韩国v欧美v亚洲v日本v| 蜜臀一区二区三区精品免费视频| 国产精品成人一区二区网站软件| 久久综合九色欧美狠狠| 五月综合久久| 91亚洲一区精品| 欧美电影院免费观看| 亚洲综合在线小说| 日本精品一区二区三区在线观看视频| 97se视频在线观看| 黑色丝袜福利片av久久| 久久狠狠久久综合桃花| 精品成人18| 99精品国产一区二区| 免费在线观看一区| 国产精品十八以下禁看| 韩日毛片在线观看| 日本高清视频一区| 日本在线精品| 成人精品一区二区三区电影免费| 日韩精品一区国产| 国产日韩欧美一区二区三区四区| 国产精品自在| 亚洲一区二区三区在线免费观看| 玖玖玖电影综合影院| 国产伦精品一区二区三区视频免费| 香蕉久久99| 夜夜爽99久久国产综合精品女不卡 | 免费在线观看的电影网站| 97超级碰碰人国产在线观看| 国产三区在线观看| 精品无码久久久久久国产| www.四虎在线观看| 亚洲精品久久在线| 91激情在线| 欧美精品18videos性欧美| 欧美成人黑人| 97在线视频一区| 成人交换视频| 国产美女扒开尿口久久久| 性孕妇free特大另类| 国产精品久久久久久亚洲影视| 国产999精品在线观看| 久久久人人爽| 亚洲一区二区三区| 青青青在线播放| 久久国产精品免费| 在线观看av网页| 岛国精品在线播放| av免费播放网站| 亚洲va欧美va人人爽午夜| 一区二区视频免费| 日韩av在线网站| 羞羞的视频在线观看| 国产精品久久久久久久久久久新郎 | 一本在线免费视频| 性做久久久久久久免费看| 国产精品视频久久久久久| 亚洲毛片在线免费观看| 瑟瑟在线观看| 伦理中文字幕亚洲| 蜜桃精品在线| 国产精品主播视频| 牛牛精品成人免费视频| 黄色一级视频播放| 欧美日韩一卡| 伊人网在线综合| 国产日本欧美一区二区| 亚洲黄色三级视频| 日韩欧美视频在线| 全国男人的天堂网| 精品无人区乱码1区2区3区在线| 成年人网站在线| 国产精品看片资源| 国产成人影院| 波多野结衣家庭教师在线| 丰满少妇久久久久久久| 综合五月激情网| 亚洲成人精品在线观看| 91精品国产综合久久久蜜臀九色| 日韩亚洲欧美一区| 免费av网站在线看| 国产精品自拍偷拍| 不卡中文一二三区| 成人精品小视频| 久久亚洲一区二区三区四区| 国产成人免费看| 亚洲韩国日本中文字幕| 91豆花视频在线播放| 国产精品免费视频一区二区| 欧美日韩亚洲一区在线观看| 中国男女全黄大片| 亚洲自拍与偷拍| 国产成人无码专区| 亚洲精品少妇网址| 亚洲www.| 亚洲图片欧洲图片日韩av| 青青草91视频| 免费一级suv好看的国产网站| 欧美日韩一级二级三级| 视频一区二区三区不卡| 久久乐国产精品| 国产精品对白| 啊啊啊一区二区| 国产视频一区二区在线观看| 中文字幕一区二区在线视频| 精品国产视频在线| 清纯唯美激情亚洲| 日本精品久久久久久久久久| 99国产精品一区| 天天干天天插天天射| 日韩中文av在线| 亚洲综合色婷婷在线观看| 青青青青草视频| 久久综合狠狠综合久久综合88| 国产情侣免费视频| 免费97视频在线精品国自产拍| 婷婷综合国产| 男人亚洲天堂网| 中文字幕一区二区三区不卡在线| 国产www在线| 伊人激情综合网| 麻豆国产精品| 欧美老熟妇喷水| 欧美激情在线一区二区三区| 国产99久一区二区三区a片| 国内伊人久久久久久网站视频 | 免费黄色片视频| 亚洲精品第一国产综合精品| 制服诱惑亚洲| 红桃一区二区三区| 91女神在线视频| 日韩成人av毛片| 国产一区二区三区视频在线观看| 精品国产一区二区三区性色av | 男人av资源站| 欧美精品一区二区三区视频| 精品自拍一区| 国产在线视频欧美一区二区三区| 日韩成人一区二区三区在线观看| 亚洲怡红院在线观看| 亚洲第一福利视频| 成人国产精品一区二区免费麻豆| 人妻激情另类乱人伦人妻| 国产美女精品在线| 国偷自拍第113页| 久久中文精品视频| 九九热爱视频精品视频|