精品欧美一区二区三区在线观看 _久久久久国色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)

91av资源在线| 99久在线精品99re8热| 国产91亚洲精品久久久| 国产精品你懂的在线| 91成人免费观看| 国产污视频在线看| 久久不卡国产精品一区二区| 欧美日韩精品一区二区三区| 成人av在线不卡| 韩国福利在线| 国产成人亚洲综合a∨婷婷图片| 97超级碰碰人国产在线观看| 日本护士做爰视频| 日韩美女在线看免费观看| 中文字幕日本不卡| 国产在线资源一区| 一二三四区视频| 亚洲中字黄色| 欧美日韩高清在线观看| 日韩欧美黄色网址| 国产精品调教| 制服丝袜中文字幕亚洲| 欧美精品色婷婷五月综合| 成年视频在线观看| 久久久久成人黄色影片| 国产精品二区三区| 97精品久久人人爽人人爽| 夜夜精品视频| 欧美交受高潮1| 国产视频精品免费| 精品产国自在拍| 亚洲国产天堂久久综合网| 久久久久亚洲av无码麻豆| 日本精品另类| 色综合色综合色综合| 黄色激情在线视频| 成人在线观看免费网站| 欧美激情一区二区三区全黄 | 麻豆亚洲av成人无码久久精品| 国产乱码精品一区二区亚洲 | 亚洲三级国产| 欧美精品手机在线| 日本一级片免费| 日本久久精品| 一区二区三区高清国产| 日韩网站在线播放| 国产日韩三级| 亚洲第一中文字幕在线观看| 午夜诱惑痒痒网| 国产精品久久久久久久久久久久久久久 | 日本成人三级电影网站| 欧美女子与性| 2020国产精品自拍| 欧美精品在线一区| 你懂的视频在线播放| 9l国产精品久久久久麻豆| 国产成人精品日本亚洲11| 性做久久久久久久久久| 国产乱色国产精品免费视频| 亚洲va码欧洲m码| 国产免费高清av| 国产麻豆日韩欧美久久| 91成人免费观看| 亚洲av无码片一区二区三区| 丁香婷婷综合网| 久久av免费观看| 可以免费看污视频的网站在线| 久久久99久久| 一区二区三区三区在线| 国产在线69| 夜夜夜精品看看| 精品少妇在线视频| 亚洲黄色免费看| 欧美综合亚洲图片综合区| 狠狠躁狠狠躁视频专区| 91麻豆精品国产综合久久久 | 亚洲国产国产亚洲一二三| 久久久久国色av免费观看性色| 特级片在线观看| 激情久久久久久| 欧美影院在线播放| 中文字幕有码无码人妻av蜜桃| 久久电影国产免费久久电影| 91中文字幕在线| 日韩在线观看视频一区二区三区 | 久久综合给合久久狠狠色| 黄色在线视频观看网站| 国产精品麻豆一区二区| 免费一级淫片aaa片毛片a级| 欧美办公室脚交xxxx| 欧美视频一区二区| 亚洲成人福利视频| 欧美**字幕| 久久伊人精品视频| 中文字幕一区二区三区精品| 日本中文字幕一区二区视频| 91大片在线观看| 青春草在线观看 | 成人毛片视频在线观看| 欧美lavv| 五月天激情在线| 一本色道综合亚洲| 欧美高清精品一区二区| 欧美交a欧美精品喷水| 深夜福利91大全| 国产无码精品视频| 美女视频黄频大全不卡视频在线播放 | 日本免费观看视| 美国十次了思思久久精品导航| 99久久一区三区四区免费| 九色视频在线观看免费播放| 一区二区三区在线播| 免费av网址在线| 6080成人| 色青青草原桃花久久综合 | 99这里有精品| 成人网欧美在线视频| 三区在线视频| 亚洲一区二区三区四区在线观看| 九热视频在线观看| 人人精品视频| 欧美另类第一页| 在线免费看av的网站| 久久综合狠狠综合久久激情| 超碰人人爱人人| 国产一区一一区高清不卡| 亚洲成人久久网| 国产黄色的视频| 久久99精品国产.久久久久久 | 亚洲一区 二区 三区| 日韩免费高清在线观看| 四季av日韩精品一区| 亚洲精品综合在线| 亚洲欧美日韩精品一区| 久久91精品| 91干在线观看| 欧美特黄一级视频| 一区二区在线观看免费| 91av视频免费观看| 不卡中文字幕| 国产激情久久久| 亚洲色偷精品一区二区三区| 亚洲成人自拍一区| 无套内谢丰满少妇中文字幕| 色综合天天综合网中文字幕| 国产精品成久久久久三级| 欧美日韩在线精品一区二区三区激情综| 亚洲午夜在线电影| 熟妇女人妻丰满少妇中文字幕| 久久精品99久久无色码中文字幕| 国产97在线亚洲| 黄色av网站在线| 日本精品视频一区二区| 右手影院亚洲欧美| 久久精品亚洲一区二区| 久艹在线免费观看| 精品国产一区二区三区四| 国产一区二区影院| 中文字幕中文字幕在线中心一区| 欧美在线va视频| 国产亚洲精品va在线观看| 在线视频一区二区三区四区| 91免费观看视频在线| 成年网站在线免费观看| 中文字幕av一区二区三区人| 热re91久久精品国99热蜜臀| 可以在线观看的黄色| 91官网在线观看| 欧美日韩国产黄色| 美女精品一区二区| 中文字幕欧美日韩一区二区三区| 欧美亚洲黄色| 久久国产精品久久久| www.国产三级| 精品福利在线看| 在线免费观看麻豆| 蜜桃久久精品一区二区| 中文精品一区二区三区| 高清久久一区| 国内精品久久久久影院优 | 男人av在线播放| 亚洲欧美另类人妖| 一级特黄aaaaaa大片| 亚洲另类色综合网站| 五月天丁香社区| 三级不卡在线观看| 四虎影院一区二区| 精品精品精品| 国产精品精品久久久久久| 国产一区久久精品| 亚洲国产精品久久久久秋霞蜜臀| av一级在线观看| 亚洲男女毛片无遮挡| 午夜视频在线观看国产| 免费av成人在线| 欧美交换配乱吟粗大25p| 日本欧美三级| 成人欧美一区二区三区在线湿哒哒 | 国产视频一区二区三区在线观看| 日本不卡一区二区在线观看| 精品成人在线| 亚洲啪啪av| 国产精品视频3p| 91精品国产综合久久久久久久久| 成人性生交大片免费看在线播放| 亚洲欧洲高清在线| 99热这里只有精品99| 色婷婷精品大在线视频| 久久久无码精品亚洲国产| 国产午夜精品久久| a级片在线观看视频| 美女精品一区二区| 女人和拘做爰正片视频| 在线看片不卡| 亚洲第一在线综合在线| 国产区精品视频在线观看豆花| 国产日韩av在线播放| 久草在线中文最新视频| 久久综合88中文色鬼| 国产毛片在线| 亚洲精品中文字幕av| 蜜桃av中文字幕| 日韩一级高清毛片| 亚洲一区在线观| 色综合色综合色综合| 91av在线免费视频| 亚洲一区影音先锋| 国精产品一区一区二区三区mba | 欧美性xxxx69| 国产精品一区二区三区美女| 91精品一区二区| julia一区二区三区中文字幕| 91精品国产91久久久久久不卡| av毛片在线免费| www.亚洲一区| 午夜在线免费观看视频| 国产亚洲人成网站在线观看| 视频国产一区二区三区| 亚洲国产精品大全| 亚洲爱情岛论坛永久| 9191国产精品| 91亚洲国产成人久久精品麻豆| 色噜噜久久综合| www.国产一区二区| 欧美日韩另类字幕中文| 国产成人亚洲精品自产在线| 五月天亚洲精品| 精品少妇一二三区| 亚洲一区二区三区中文字幕在线| 五月婷婷一区二区| 亚洲午夜精品在线| 久久精品视频8| 亚洲成人精品一区二区| 国产成人啪精品午夜在线观看| 有码一区二区三区| 久久久国产成人| 亚洲国产成人porn| www.av麻豆| 色综合网色综合| 五月婷婷激情视频| 欧美性一二三区| 夜夜躁日日躁狠狠久久av| 欧美亚洲愉拍一区二区| 在线观看国产成人| 日韩一区二区在线免费观看| 国产91视频在线| 亚洲精品一区二区三区精华液| 日韩在线视频第一页| 亚洲精品成a人在线观看| 色中色在线视频| 中文字幕亚洲欧美日韩在线不卡| 在线播放麻豆| 欧美成人一二三| 98色花堂精品视频在线观看| 国产91精品久久久| 99精品在免费线偷拍| 成人激情春色网| 成人免费直播在线| 欧美日韩在线观看一区| 日韩一区二区在线| 久久久99精品视频| 亚洲一区图片| 久久这里只精品| 国产sm精品调教视频网站| 四季av综合网站| 国产日产欧美一区二区三区 | 68国产成人综合久久精品| 国产人妻人伦精品| 宅男噜噜噜66一区二区| 美女少妇一区二区| 不卡视频一二三四| 人人爽人人爽人人片| 亚洲黄网站在线观看| 久久精品国产成人av| 欧美日韩一卡二卡三卡| 懂色av一区二区三区四区| 亚洲天堂男人天堂女人天堂| a级影片在线观看| 日本亚洲欧洲色α| 国产精品一区二区三区av| 另类欧美小说| 亚州av乱码久久精品蜜桃| 日日橹狠狠爱欧美超碰| 精品一区二区在线视频| 黄色国产在线观看| ...av二区三区久久精品| 欧美亚洲精品天堂| 欧美一区中文字幕| 国产一级免费在线观看| 欧美猛少妇色xxxxx| av成人在线看| 精品综合在线| 中文字幕免费一区二区| 91看片就是不一样| 成人av免费观看| 老熟妇高潮一区二区三区| 色狠狠一区二区| 高清毛片aaaaaaaaa片| 日韩在线观看你懂的| 中文字幕乱码在线播放| 国产成人精品福利一区二区三区 | 久久久不卡网国产精品一区| 久久精品国产亚洲AV无码麻豆 | 日产精品一区二区| 六月丁香激情网| 成人涩涩免费视频| 高h视频免费观看| 欧美色网一区二区| 九九九伊在人线综合| 国内精品中文字幕| 日本在线一区二区三区| 国产精品88久久久久久妇女 | 欧美日韩亚洲精品一区二区三区| av片免费播放| 久久视频在线视频| 日韩一区中文| 五月天亚洲综合| 天堂精品中文字幕在线| 久久久久久久久免费看无码| 亚洲国产精品人人做人人爽| www五月婷婷| 欧美肥老妇视频| 亚洲三区欧美一区国产二区| 国产精品88久久久久久妇女| 国产在线视视频有精品| 国产高清视频免费在线观看| 欧美日韩精品一区二区三区| 在线观看黄av| 国产一区二区视频在线观看| 欧美成人激情| 亚洲妇熟xx妇色黄蜜桃| 亚洲四区在线观看| 国产www免费观看| 欧美精品做受xxx性少妇| 日韩区一区二| 免费看欧美黑人毛片| 成人高清视频免费观看| 日韩女同强女同hd| 国产视频精品在线| 大胆人体一区| 日韩一本精品| 国产一区二区三区四区五区美女| 成人免费精品动漫网站| 欧美一区二区在线看| 欧美24videosex性欧美| 国产富婆一区二区三区| 日韩视频一区| 中文字幕免费看| 欧美老女人在线| 性国产高清在线观看| 国产成人看片| 石原莉奈在线亚洲三区| 国产主播av在线| 欧美一区二区视频观看视频| 黄页网站大全在线免费观看| 久久99欧美| 麻豆成人在线观看| 亚洲av鲁丝一区二区三区| 亚洲成av人片在线观看香蕉| 日韩不卡免费高清视频| 亚洲人成人77777线观看| 国产精品正在播放| 日韩乱码人妻无码中文字幕| 亚洲片国产一区一级在线观看| 婷婷久久免费视频| 欧美一级视频免费看| 国产色产综合色产在线视频| 国产精品久久欧美久久一区| 国产+人+亚洲| 欧美日韩在线观看视频小说| 永久看看免费大片| 欧美日韩在线第一页| 男人的天堂在线视频免费观看 | 99在线看视频| 亚洲欧美日韩精品一区二区| 制服丨自拍丨欧美丨动漫丨| 精品99久久久久久| 久久女人天堂| 亚洲 欧美 日韩 国产综合 在线 | www.av视频在线观看|