久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

開發(fā)效率翻倍的Web API使用技巧

瀏覽:297日期:2022-06-09 16:29:24
目錄
  • 引言
  • Clipboard API(剪切板)
  • Fullscreen API(進入/退出全屏)
  • Online State API(網(wǎng)絡(luò)狀態(tài))
  • Page Visibility API(頁面顯示)
  • Screen Orientation API(頁面方向)
  • Battery API(電池信息)
  • Web Share API(分享)
  • ImageCapture API(圖片抓取)
  • Selection API(文本選區(qū))
  • Performance API(性能檢測)
  • Geolocation API(獲取位置)
  • Broadcast Channel API(跨頁面通信)
  • Vibration API(設(shè)備振動)
  • Srceen Capture API(視頻截圖)
  • Intersection Observer API(元素監(jiān)聽)

引言

隨著瀏覽器的日益壯大,瀏覽器自帶的功能也隨著增多,在 Web 開發(fā)過程中,我們經(jīng)常會使用一些 Web API 增加我們的開發(fā)效率。

Clipboard API(剪切板)

剪切板 API 快速將內(nèi)容復(fù)制到剪切板上,下面是一鍵復(fù)制的方法:

const onClipText = (text) => {
    handleCopyValue(text)
.then(() => {
    alert("復(fù)制成功");
})
.catch(() => {
    alert("自動復(fù)制失敗,請手動復(fù)制");
});
};
const handleCopyValue = (text) => {
    //瀏覽器禁用了非安全域的 navigator.clipboard 對象
    //在線上環(huán)境會報錯 TypeError: Cannot read properties of undefined (reading "writeText")
    if (!navigator.clipboard && window.isSecureContext) {
return navigator.clipboard.writeText(text);
    } else {
// 判斷是否支持拷貝
if (!document.execCommand("copy")) return Promise.reject();
// 創(chuàng)建標(biāo)簽,并隱藏
const textArea = document.createElement("textarea");
textArea.style.position = "fixed";
textArea.style.top = textArea.style.left = "-100vh";
textArea.style.opacity = "0";
textArea.value = text;
document.body.appendChild(textArea);
// 聚焦、復(fù)制
textArea.focus();
textArea.select();
return new Promise((resolve, reject) => {
    // 不知為何,必須寫這個三目,不然copy不上
    document.execCommand("copy") ? resolve() : reject();
    textArea.remove();
});
    }
};

執(zhí)行onClipText方法,即可將想復(fù)制內(nèi)容,復(fù)制到用戶的剪切板上。

Fullscreen API(進入/退出全屏)

Fullscreen API 用于在 Web 應(yīng)用程序中開啟全屏模式,使用它就可以在全屏模式下查看頁面/元素。在安卓手機中,它會溢出瀏覽器窗口和安卓頂部的狀態(tài)欄(顯示網(wǎng)絡(luò)狀態(tài)、電池狀態(tài)等的地方)。

下面是一個 Fullscreen API 的例子:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Fullscreen API Example</title>
  </head>
  <body>
    <div id="booktext">
       <h1>正能量先鋒</h1>
<p>在今天這個快節(jié)奏、競爭激烈的時代里,我們時常會面臨一些挑戰(zhàn)和困難,有時甚至?xí)屛覀兏械浇^望和沮喪。但我們應(yīng)該時刻銘記,每一個困難背后都有無限的機會和可能。</p>
       <button onclick="toggleFullscreen()">進入/退出沉浸式閱讀</button>
    </div>
    <script>
      var bookText = document.getElementById("booktext");
      function toggleFullscreen() {
if (document.fullscreenElement) {
  document.exitFullscreen();
} else {
  bookText.requestFullscreen().catch(err => {
    console.log(`Error attempting to enable full-screen mode: ${err.message} (${err.name})`);
  });
}
      }
    </script>
  </body>
</html>

上面的例子展示了如何通過 Fullscreen API 實現(xiàn)一個視頻全屏播放的功能。

在 HTML 中,我們定義了一個視頻播放器,使用 controls 屬性添加了播放器的控制欄。同時,我們也定義了一個按鈕,點擊該按鈕可以全屏播放視頻。

在 JavaScript 中,我們首先通過 getElementById 獲取到視頻容器,然后通過 querySelector 獲取到視頻元素本身。接著,定義了一個 toggleFullscreen 函數(shù)來監(jiān)聽按鈕的點擊事件,并根據(jù)當(dāng)前全屏狀態(tài)調(diào)用 requestFullscreen 或 exitFullscreen 來切換全屏狀態(tài)。

需要注意的是,requestFullscreen 方法可能會被瀏覽器阻止,例如因為用戶未授權(quán)。因此在實際使用中,我們需要使用 catch 方法來捕獲 requestFullscreen 方法的調(diào)用錯誤信息。

Online State API(網(wǎng)絡(luò)狀態(tài))

就是獲取當(dāng)前的網(wǎng)絡(luò)狀態(tài),同時也有對應(yīng)的事件去響應(yīng)網(wǎng)絡(luò)狀態(tài)的變化。

window.addEventListener("online", onlineHandler); // 聯(lián)網(wǎng)時
window.addEventListener("offline", offlineHandler); // 斷網(wǎng)時

比如很常見的一個需求,斷網(wǎng)時提示,網(wǎng)絡(luò)恢復(fù)時刷新。

實現(xiàn)斷網(wǎng)重連:

const onlineHandler = () => {
    window.location.reload();
};
const offlineHandler = () => {
    alert("網(wǎng)絡(luò)異常,請檢查您的網(wǎng)絡(luò)");
};
window.addEventListener("online", onlineHandler);
window.addEventListener("offline", offlineHandler);

這樣就可以監(jiān)聽用戶的網(wǎng)絡(luò)狀態(tài),如網(wǎng)絡(luò)鏈接、斷開時可以對用戶進行提示以及做相應(yīng)的邏輯處理。

Page Visibility API(頁面顯示)

我們可以用document.visibitilityState來監(jiān)聽網(wǎng)頁可見度,是否卸載..

在手機和電腦上都會現(xiàn)這種情況,比如頁面中有一個視頻正在播放,然后在切換tab頁后給視頻暫停播放,或者有個定時器輪詢,在頁面不顯示的狀態(tài)下停止無意義的輪詢等等。

比如一個視頻的例子來展示:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Fullscreen API Example</title>
  </head>
  <body>
 <video id="vs" src="https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.webm" controls>
 </video>
<script>
const video = document.getElementById("vs")
window.addEventListener("visibilitychange",() => {
    // 通過這個方法來獲取當(dāng)前標(biāo)簽頁在瀏覽器中的激活狀態(tài)。
    switch(document.visibilityState){
case"prerender": // 網(wǎng)頁預(yù)渲染 但內(nèi)容不可見
case"hidden":    // 內(nèi)容不可見 處于后臺狀態(tài),最小化,或者鎖屏狀態(tài)
video.puase()
case"visible":   // 內(nèi)容可見
video.play()
case"unloaded":  // 文檔被卸載
video.destory()
    }
});
</script>
</body>
</html>

這個API的用處就是用來響應(yīng)我們網(wǎng)頁的狀態(tài),如果這個標(biāo)簽頁顯示則視頻就開始播放,隱藏就暫停,關(guān)閉就卸載。

Screen Orientation API(頁面方向)

我們可以通過以下代碼來演示如何使用Screen Orientation API來控制頁面的方向:

// 獲取屏幕方向?qū)ο?const orientation = screen.orientation;
// 監(jiān)聽屏幕方向變化事件
orientation.addEventListener("change", () => {
  console.log(`屏幕方向變?yōu)椋?{orientation.type}`);
});
// 鎖定屏幕方向為橫屏
orientation.lock("landscape").then(() => {
  console.log("屏幕方向已鎖定為橫屏");
}).catch((err) => {
  console.log(`鎖定屏幕方向失敗:${err}`);
});
// 解鎖屏幕方向
orientation.unlock();

在這段代碼中,我們首先通過screen.orientation獲取了屏幕方向?qū)ο螅⑼ㄟ^addEventListener方法監(jiān)聽了屏幕方向變化事件。然后,我們使用lock方法將屏幕方向鎖定為橫屏,并在鎖定成功后打印了一條消息。最后,我們使用unlock方法解鎖了屏幕方向。

需要注意的是,lock方法可能會在某些設(shè)備上無法生效,因此我們需要在實際使用中進行兼容性測試。

Battery API(電池信息)

以下是一個使用 Battery API 的簡單示例:

<!DOCTYPE html>
<html>
<head>
    <title>Web Battery API Example</title>
</head>
<body>
    <h1>Web Battery API Example</h1>
    <div id="battery-status">
<p>當(dāng)前電量: <span id="battery-level"></span></p>
<p>電池狀態(tài): <span id="battery-status"></span></p>
    </div>
    <script>
// 獲取電池信息
navigator.getBattery().then(function(battery) {
    // 更新電量信息
    updateBatteryStatus(battery);
    // 監(jiān)聽電池信息變化
    battery.addEventListener("levelchange", function() {
updateBatteryStatus(battery);
    });
    battery.addEventListener("chargingchange", function() {
updateBatteryStatus(battery);
    });
});
// 更新電量信息
function updateBatteryStatus(battery) {
    document.querySelector("#battery-level").textContent = battery.level * 100 + "%";
    document.querySelector("#battery-status").textContent = battery.charging ? "正在充電" : "未充電";
}
    </script>
</body>
</html>

這個例子展示了如何使用Web Battery API來獲取電池的狀態(tài)信息,并在頁面上顯示當(dāng)前電量和電池狀態(tài)。

在這個例子中,我們使用了navigator.getBattery()方法來獲取電池信息,并使用battery.addEventListener()方法來監(jiān)聽電池信息變化。最后,我們使用updateBatteryStatus()函數(shù)來更新電量信息并在頁面上顯示。

Web Share API(分享)

以下是一個簡單的Web Share API例子:

// 獲取分享按鈕元素
const shareButton = document.querySelector("#share-button");
// 添加點擊事件監(jiān)聽器
shareButton.addEventListener("click", async () => {
  try {
    // 檢查瀏覽器是否支持Web Share API
    if (navigator.share) {
      // 調(diào)用Web Share API分享
      await navigator.share({
title: "分享標(biāo)題",
text: "分享描述",
url: "分享鏈接"
      });
    } else {
      // 如果不支持,顯示提示信息
      alert("該瀏覽器不支持Web Share API");
    }
  } catch (error) {
    // 處理異常情況
    console.error("分享失敗:", error);
  }
});

這個例子假設(shè)頁面中有一個id為share-button的分享按鈕元素。當(dāng)用戶點擊該按鈕時,代碼會檢查瀏覽器是否支持Web Share API,如果支持則調(diào)用該API進行分享,否則顯示一個提示信息。

navigator.share方法中,我們可以傳遞一個包含titletexturl等屬性的對象,用于指定分享內(nèi)容的標(biāo)題、描述和鏈接。如果用戶選擇分享,系統(tǒng)會彈出一個分享對話框,讓用戶選擇分享方式(例如通過社交媒體、電子郵件等方式分享)。

如果用戶取消分享,則navigator.share方法會返回一個Promise對象,其狀態(tài)為rejected。我們可以通過捕獲該Promise對象的異常來處理分享失敗的情況。

ImageCapture API(圖片抓取)

以下提供一個基本的Web ImageCapture API示例,如下所示:

HTML代碼:

<!DOCTYPE html>
<html>
  <head>
    <title>Web ImageCapture API Demo</title>
  </head>
  <body>
    <h1>Web ImageCapture API Demo</h1>
    <video id="video" width="640" height="480" autoplay></video>
    <br>
    <button id="capture-btn">Capture Image</button>
    <br>
    <canvas id="canvas" width="640" height="480"></canvas>
    <br>
    <img id="captured-img">
  </body>
</html>

JavaScript代碼:

// 獲取視頻和按鈕元素
const video = document.getElementById("video");
const captureBtn = document.getElementById("capture-btn");
// 獲取畫布和圖像元素
const canvas = document.getElementById("canvas");
const img = document.getElementById("captured-img");
// 獲取視頻流
navigator.mediaDevices.getUserMedia({ video: true })
  .then(stream => {
    video.srcObject = stream;
    video.play();
  })
  .catch(error => {
    console.log(error);
  });
// 設(shè)置ImageCapture
let imageCapture;
const track = video.srcObject.getVideoTracks()[0];
imageCapture = new ImageCapture(track);
// 添加事件監(jiān)聽器
captureBtn.addEventListener("click", () => {
  // 拍照
  imageCapture.takePhoto()
    .then(blob => {
      // 將照片顯示在畫布上
      const url = URL.createObjectURL(blob);
      canvas.getContext("2d").drawImage(img, 0, 0);
      // 將照片顯示在圖像元素中
      img.src = url;
    })
    .catch(error => {
      console.log(error);
    });
});

這個示例將顯示一個視頻元素和一個“Capture Image”按鈕。當(dāng)用戶點擊按鈕時,它將使用ImageCapture API拍攝照片,并在畫布和圖像元素中顯示照片。

請注意,此示例僅適用于支持MediaStreamTrack和ImageCapture API的瀏覽器。

Selection API(文本選區(qū))

下面是一個Web Selection API的例子,如下所示:

HTML代碼:

<!DOCTYPE html>
<html>
<head>
    <title>Web Selection API Example</title>
    <style>
.highlight {
    background-color: yellow;
}
    </style>
</head>
<body>
    <h1>Web Selection API Example</h1>
    <p>Select text in the paragraph below to see the API in action.</p>
    <p id="demo">The Web Selection API allows you to retrieve and manipulate text selections made by the user.</p>
</body>
</html>

JavaScript代碼(web-selection-api.js):

// 獲取文本節(jié)點
const demoEl = document.getElementById("demo");
// 監(jiān)聽文本節(jié)點的選擇事件
demoEl.addEventListener("mouseup", handleSelection);
// 處理選擇事件
function handleSelection() {
    // 獲取用戶選擇的文本
    const selection = window.getSelection();
    const selectedText = selection.toString();
    // 如果選擇的文本不為空
    if (selectedText) {
// 創(chuàng)建一個新的高亮節(jié)點
const highlightEl = document.createElement("span");
highlightEl.classList.add("highlight");
// 將高亮節(jié)點插入到選擇范圍中
const range = selection.getRangeAt(0);
range.surroundContents(highlightEl);
// 取消選擇
selection.removeAllRanges();
    }
}

這個例子演示了如何使用Web Selection API來獲取用戶選擇的文本,并將其高亮顯示。

當(dāng)用戶在頁面上選擇文本時,會觸發(fā)mouseup事件,然后調(diào)用handleSelection函數(shù)來處理選擇事件。

handleSelection函數(shù)中,我們首先使用window.getSelection()方法獲取用戶選擇的文本,然后檢查是否選擇了文本。

如果選擇了文本,我們創(chuàng)建一個新的span元素,并將其添加到選擇范圍中,然后使用removeAllRanges()方法取消選擇。最后,我們使用CSS樣式將高亮顯示的文本突出顯示。

Performance API(性能檢測)

以下是一個使用 Web Performance API 的例子:

// 測量頁面加載時間
const startTime = window.performance.now();
window.addEventListener("load", () =&gt; {
  const loadTime = window.performance.now() - startTime;
  console.log(`頁面加載時間為:${loadTime} 毫秒`);
});
// 測量網(wǎng)絡(luò)時間
const resourceUrl = "https://example.com/resource";
fetch(resourceUrl)
  .then(response =&gt; {
    const fetchTime = window.performance.now() - startTime;
    console.log(`請求時間為:${fetchTime} 毫秒`);
    // 獲取網(wǎng)絡(luò)時間信息
    const entry = performance.getEntriesByName(resourceUrl)[0];
    const start = entry.fetchStart;
    const end = entry.responseEnd;
    console.log(`DNS 查詢時間為:${entry.domainLookupEnd - entry.domainLookupStart} 毫秒`);
    console.log(`TCP 握手時間為:${entry.connectEnd - entry.connectStart} 毫秒`);
    console.log(`TLS 握手時間為:${entry.secureConnectionStart ? entry.connectEnd - entry.secureConnectionStart : "N/A"} 毫秒`);
    console.log(`請求時間為:${entry.responseStart - entry.requestStart} 毫秒`);
    console.log(`響應(yīng)時間為:${entry.responseEnd - entry.responseStart} 毫秒`);
    console.log(`傳輸大小為:${entry.transferSize} 字節(jié)`);
  });

在這個例子中,我們使用了 Web Performance API 提供的 performance 對象來測量頁面加載時間和使用 fetch() 方法獲取資源的網(wǎng)絡(luò)時間。我們還使用了 getEntriesByName() 方法來檢索資源的網(wǎng)絡(luò)時間信息。

Geolocation API(獲取位置)

以下是一個使用 Geolocation API 獲取用戶當(dāng)前位置信息的示例代碼:

// 檢查瀏覽器是否支持 Geolocation API
if ("geolocation" in navigator) {
  // 獲取用戶當(dāng)前位置信息
  navigator.geolocation.getCurrentPosition(
    (position) => {
      const { latitude, longitude } = position.coords;
      console.log(`您的緯度為:${latitude},經(jīng)度為:${longitude}`);
    },
    (error) => {
      switch (error.code) {
case error.PERMISSION_DENIED:
  console.log("用戶拒絕了位置請求");
  break;
case error.POSITION_UNAVAILABLE:
  console.log("無法獲取位置信息");
  break;
case error.TIMEOUT:
  console.log("請求超時");
  break;
default:
  console.log("發(fā)生未知錯誤");
      }
    }
  );
} else {
  console.log("您的瀏覽器不支持 Geolocation API");
}

在這個例子中,我們首先檢查瀏覽器是否支持 Geolocation API

如果支持,則調(diào)用 navigator.geolocation.getCurrentPosition() 方法獲取用戶當(dāng)前位置信息。該方法接受兩個回調(diào)函數(shù)作為參數(shù):一個成功的回調(diào)函數(shù)和一個失敗的回調(diào)函數(shù)。

如果獲取位置信息成功,則成功的回調(diào)函數(shù)將被調(diào)用,并傳遞包含位置信息的對象作為參數(shù)。否則將調(diào)用失敗的回調(diào)函數(shù),并傳遞一個描述錯誤的對象作為參數(shù)。

Broadcast Channel API(跨頁面通信)

下面是一個使用 Broadcast Channel API 實現(xiàn)簡單的跨窗口通信的例子:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Broadcast Channel API Example</title>
  </head>
  <body>
    <div id="message"></div>
    <input type="text" id="input-message">
    <button onclick="sendMessage()">Send Message</button>
    <script>
      const channel = new BroadcastChannel("my-channel"); // 創(chuàng)建一個廣播通道對象
      function sendMessage() {
const inputMessage = document.getElementById("input-message");
const message = inputMessage.value;
channel.postMessage(message); // 將消息發(fā)送到廣播通道中
inputMessage.value = ""; // 清空輸入框內(nèi)容
      }
      channel.onmessage = (event) => {
const message = event.data;
const messageDiv = document.getElementById("message");
messageDiv.innerHTML = message;
      }
    </script>
  </body>
</html>

上面的例子展示了如何使用 Broadcast Channel API 實現(xiàn)在兩個窗口之間進行文本消息的雙向通信。

在 HTML 中,我們定義了一個輸入框和一個按鈕,用于輸入和發(fā)送消息。我們還定義了一個 div 元素,用于展示接收到的消息。

在 JavaScript 中,我們創(chuàng)建了一個名為 my-channel 的廣播通道對象,并定義了一個 sendMessage 函數(shù),該函數(shù)將輸入框中的文本消息發(fā)送到廣播通道中。

同時,我們在 channel 對象上通過 onmessage 方法監(jiān)聽廣播通道上的消息,一旦有消息發(fā)送到該通道,就會觸發(fā)該方法,在該方法中將接收到的消息展示在 div 元素中。

需要注意的是,廣播通道的名字需要保持一致,才能實現(xiàn)不同窗口之間的通信。

Vibration API(設(shè)備振動)

以下是一個簡單的Web Vibration API例子:

<!DOCTYPE html>
<html>
<head>
    <title>Web Vibration API Example</title>
</head>
<body>
    <h1>Web Vibration API Example</h1>
    <button onclick="vibrate()">Vibrate</button>
    <script>
function vibrate() {
    if ("vibrate" in navigator) {
navigator.vibrate(1000); // 1秒鐘的震動
    } else {
alert("Vibration API not supported in this browser.");
    }
}
    </script>
</body>
</html>

這個例子中,當(dāng)用戶點擊"Vibrate"按鈕時,瀏覽器會嘗試通過Web Vibration API來觸發(fā)設(shè)備的震動功能。

如果設(shè)備支持Web Vibration API,則會進行1秒鐘的震動,否則會彈出一個警告框提示用戶該功能不被支持。

Srceen Capture API(視頻截圖)

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Web Screen Capture API Example</title>
</head>
<body>
    <h1>Web Screen Capture API Example</h1>
    <button id="start-capture">Start Capture</button>
    <button id="stop-capture">Stop Capture</button>
    <canvas id="canvas" width="640" height="480"></canvas>
    <script>
// 獲取DOM元素
const startCaptureBtn = document.getElementById("start-capture");
const stopCaptureBtn = document.getElementById("stop-capture");
const canvas = document.getElementById("canvas");
// 獲取媒體流(屏幕共享)并將其渲染到canvas中
async function startCapture() {
    try {
const mediaStream = await navigator.mediaDevices.getDisplayMedia();
const context = canvas.getContext("2d");
context.drawImage(video, 0, 0, canvas.width, canvas.height);
    } catch(err) {
console.error("Error: " + err);
    }
}
// 停止捕獲并停止媒體流
function stopCapture() {
    const tracks = mediaStream.getTracks();
    tracks.forEach(track => track.stop());
}
// 注冊按鈕單擊事件
startCaptureBtn.addEventListener("click", startCapture);
stopCaptureBtn.addEventListener("click", stopCapture);
    </script>
</body>
</html>

這個例子中,頁面上有兩個按鈕,一個用于開始捕獲屏幕,另一個用于停止捕獲。捕獲的內(nèi)容被呈現(xiàn)在一個畫布上。

在 startCapture() 函數(shù)中,我們使用 navigator.mediaDevices.getDisplayMedia() 方法獲取屏幕共享的媒體流,并將其渲染到canvas上。在 stopCapture() 函數(shù)中,我們停止所有媒體流的所有軌道,以結(jié)束捕獲過程。

Intersection Observer API(元素監(jiān)聽)

以下是一個示例,演示了如何使用 Intersection Observer API 在元素進入視口時進行檢測:

<!DOCTYPE html>
<html>
  <head>
    <title>Intersection Observer Example</title>
    <style>
      .box {
width: 100px;
height: 100px;
background-color: green;
margin-bottom: 50px;
      }
      .visible {
background-color: red;
      }
    </style>
  </head>
  <body>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <script>
      const boxes = document.querySelectorAll(".box");
      const options = {
rootMargin: "0px",
threshold: 0.5
      };
      const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
  if (entry.isIntersecting) {
    entry.target.classList.add("visible");
  } else {
    entry.target.classList.remove("visible");
  }
});
      }, options);
      boxes.forEach(box => {
observer.observe(box);
      });
    </script>
  </body>
</html>

在這個示例中,我們首先選擇所有具有“box”類的元素。然后,我們創(chuàng)建一個帶有0像素的rootMargin和0.5的閾值的IntersectionObserver實例。這意味著當(dāng)元素的50%位于視口內(nèi)時,它將被視為可見。

然后,我們循環(huán)遍歷每個盒子元素,并在我們的觀察者實例上調(diào)用observe方法,將盒子元素作為參數(shù)傳遞。

最后,在IntersectionObserver實例的回調(diào)函數(shù)中,我們檢查每個條目是否與視口相交。如果是,則將“visible”類添加到條目的目標(biāo)元素中,否則將其刪除。

參考

  • web-api-examples
  • MDN-Web APIs
  • 你(可能)不知道的 web api

以上就是開發(fā)效率翻倍的Web API使用技巧的詳細內(nèi)容,更多關(guān)于Web API使用技巧的資料請關(guān)注其它相關(guān)文章!

標(biāo)簽: JavaScript
主站蜘蛛池模板: 免费成人毛片 | 中文字幕在线视频精品 | 久久一区二区三区四区五区 | 爱爱精品| 国产一级网站 | 91精品中文字幕一区二区三区 | av免费在线播放 | 一区二区在线 | 华人黄网站大全 | 国产精品久久久久久久久免费 | 久久88| 蜜桃臀一区二区三区 | 一区二区成人 | 国产v日产∨综合v精品视频 | 美女视频久久 | 欧美一级艳片视频免费观看 | 亚洲欧美v国产一区二区 | 夜夜爽99久久国产综合精品女不卡 | 国产在线高清视频 | 久久69精品久久久久久久电影好 | 国产精品毛片久久久久久久 | 伊人网在线视频观看 | 国产成人精品一区二区三区在线 | 日韩欧美国产一区二区三区 | 国产在线观看高清 | 国产91久久精品一区二区 | 一区二区三区在线免费观看 | 午夜影院a| 先锋影音在线观看 | 天天干夜夜操 | 中文字幕一区二区三区不卡 | 伊人春色在线播放 | 欧美精品成人一区二区三区四区 | av在线播放国产 | 国产精品一区二区三区在线免费观看 | 国产精品毛片一区二区在线看 | 国产最新精品 | 国产男人天堂 | 国产成人网 | 天堂网中文在线 | 国产精品久久久久久久久久久久午夜片 | 欧美一级免费播放 | 完全免费av | 日韩精品一区二区三区中文字幕 | 国产精品色婷婷亚洲综合看 | 性色av网 | 国产精品1区2区3区 欧美 中文字幕 | 亚洲一区二区三区在线免费观看 | 欧美日韩在线一 | 久色| 日韩av中文在线 | 久草成人| 四虎影院网 | 欧美日韩一区二区三区在线观看 | 伊人伊人 | 伊人在线 | 国产精品久久一区二区三区 | 一级免费在线视频 | 日韩免费激情视频 | 男女网站在线观看 | 欧美国产视频一区 | www.麻豆视频 | 亚洲免费资源 | 操人网| 有码在线 | 日本涩涩网站 | 丁香五月网久久综合 | 亚洲精品成人 | 日韩精品专区 | 国产精品久久久久毛片软件 | 欧美成视频 | 国产精品久久久久久中文字 | 国产亚洲一区二区三区在线观看 | 97色在线观看免费视频 | 精品视频在线观看一区二区 | 99热精品国产 | 欧美一区永久视频免费观看 | 成人在线视频网站 | 日本免费xxxx | 中文字幕国产 | 51国产午夜精品免费视频 | 黄色一级免费看 | a毛片毛片av永久免费 | 一区二区三区在线免费 | 骚视频在线观看 | 久久不卡 | 精品久久久久久久久久久久包黑料 | 狠狠色狠狠色合久久伊人 | 视频1区2区 | av国产精品 | 欧美视频区 | 婷婷五月色综合香五月 | 国产精品亚欧美一区二区 | 成人羞羞在线观看网站 | 国产伦精品一区二区三区四区视频 | 久久久久一区二区 | 在线中文日韩 | 亚洲一区二区在线 | 欧美理论片在线观看 | 一区二区三区在线播放 | 亚洲精品视频在线观看免费视频 | 亚洲一区二区三区免费观看 | 久久九| 中字一区 | 国产成人一区 | 亚洲精品一区二三区不卡 | 午夜精品在线 | 国产一区二区三区视频在线观看 | 日韩精品久久久久久 | www.成人| 日韩av入口 | 色综合色| 亚洲欧洲日韩 | 51国产午夜精品免费视频 | 亚洲 欧美 日韩在线 | 一区免费观看 | 天天爱爱网| 久久久久国产精品 | 国产高清亚洲 | 亚洲中午字幕 | 精品国产不卡一区二区三区 | 一级片免费视频 | www.久久久久| 久草 在线| 国产精品美女久久久久aⅴ国产馆 | 在线看av网址 | 欧美性一区二区 | 国产精品久久一区二区三区 | 成人精品一区二区三区 | 国产精品日韩在线观看 | 免费毛片视频 | 九九天堂网 | 九九视频这里只有精品 | 一区自拍| 精品乱码久久久 | 看免费毛片 | 国产日韩欧美亚洲 | 日本一区二区高清不卡 | 成人亚洲在线观看 | 欧美日韩精品在线 | 免费一区二区 | 黄色一级毛片 | 在线观看日韩av | 成人情趣视频 | 一区二区视频在线 | 成人午夜精品久久久久久久蜜臀 | 一区二区三区亚洲视频 | 久久9999久久 | 免费成人在线观看视频 | 国产三级在线观看 | 久草精品视频 | 国产精品国产成人国产三级 | 国产精品网站在线观看 | 亚洲网站在线免费观看 | 天天干夜干| 精品福利av导航 | 日韩手机在线观看 | 国产一区二区三区在线免费观看 | 午夜一区二区三区在线观看 | h片在线看| 成人高清| 国产高清不卡在线 | 日本久久精品视频 | 久草在线在线精品观看 | 在线播放亚洲 | 久久午夜电影院 | 黄色毛片在线观看 | 一区二区三区在线观看国产 | 国产成人在线视频 | 久久久国产精品 | 国产成人aⅴ | 99精品欧美一区二区三区 | 欧美三级视频 | 国产精品永久免费自在线观看 | 亚洲欧美综合乱码精品成人网 | 一级一片免费看 | 国产精品久久免费视频 | 日韩高清在线一区 | 日日夜夜天天 | 亚洲国产高清在线 | 亚洲一区欧美一区 | 久久久www成人免费无遮挡大片 | 99国产精品久久久 | 久久久久国产成人精品亚洲午夜 | 免费黄色网止 | 一级黄色毛片 | 国产激情偷乱视频一区二区三区 | 欧美日本国产一区 | 69日影院| 国产一区在线视频 | 午夜视频91| www.久久99 | 国产激情视频 | 中文字幕av一区二区三区 | 97国产在线 | 久草电影网 | 欧美一区2区三区4区公司二百 | 欧美日韩电影一区 | 白浆视频在线观看 | 精品久久av | 中国黄色在线视频 | 亚洲精品乱码久久久久久久久 | 欧美成人小视频 | 99热这里有精品 | 亚洲欧美aa | 日韩在线观看 | 黄色大片视频网站 | 国产一区二区精品久久 | 亚洲精品久久久久久久久久久久久 | 日本亚洲最大的色成网站www | 成人国产一区 | 999这里只有是极品 免费的一级黄色片 | 国产亚洲精品成人av久久影院 | 亚洲精品一二三区 | 奇米成人 | 1000部精品久久久久久久久 | 国产精品自产拍在线观看桃花 | 一区二区精品 | 国产精品成人国产乱一区 | 久久久久国产精品www | 在线看国产| 精品一区二区在线观看 | 色偷偷噜噜噜亚洲男人 | 久久久久国产精品一区二区 | 国产婷婷在线视频 | 国产亚洲欧美一区二区 | 久久丁香 | а天堂中文最新一区二区三区 | 成人精品免费视频 | 国产成人精品一区二区三区视频 | 久久一| 久久人人av| 亚洲男人的天堂网站 | 色综合久久网 | 99免费看 | 国产在线精品视频 | 99国产精品久久久久老师 | 成人久久精品 | 国产成人免费在线 | 性欧美精品高清 | 中文av字幕| 精品美女在线 | 欧美成人一级 | 国产精品女同一区二区久久夜 | 夜夜视频| 国产精品成av人在线视午夜片 | 不卡免费在线视频 | 韩日一区 | 国产中文字幕亚洲 | 国产精品国产 | 成人h动漫在线看 | 亚洲视频一区二区 | 国产视频一区在线 | 国产日韩欧美 | 久久波多野结衣 | 日韩国产一区二区三区 | 久久成人国产精品 | 黄色91| av看片 | 亚洲一区 中文字幕 | 欧美国产一区二区 | 日韩三区 | 亚洲第一精品在线 | 成人免毛片 | 欧美日韩黄色一级片 | 久久久影视 | www.毛片 | 国产网址在线 | 夜本色| 亚洲电影一区二区 | 日韩在线一区二区三区 | 亚洲黄色成人 | 国产一区二区久久 | 天天操,夜夜操 | 亚洲精区 | 欧美专区中文字幕 | 亚洲午夜精品 | 婷婷综合网 | 国产精品久久久久久久久久久久久 | 日韩精品视频在线 | 日韩精品一区二区在线观看视频 | 国产伦精品一区二区 | 中文字幕乱码一区二区三区 | 91日韩欧美 | 欧美精品1| 爱草在线 | 久久精品久久久久 | 黄网站在线播放 | 三级无遮挡污在线观看 | 免费福利视频一区 | 精品国产精品国产偷麻豆 | 九九九久久久 | 国产精品中文字幕在线观看 | 久一在线| 日本在线小视频 | 欧美日韩一区二区视频在线观看 | 国产一区二区三区四区五区 | 婷婷激情综合 | 在线看国产 | 日韩免费高清视频 | 伊人青青草| 国产精品久久久久久久久久 | 777kkk999成人ww| 国产网站视频 | 99精品视频免费在线观看 | 久久国产精品一区二区三区 | 国产综合视频 | 一区二区三区四区久久 | 99re6热在线精品视频播放 | 美女扒开尿口来摸 | 欧美一级欧美三级在线观看 | 天天天堂 | 中文无吗 | 婷婷精品视频 | 国产精品久久久久久久久免费 | 欧美日韩中文字幕 | 中文字幕一区二区三区四区不卡 | 日韩五月 | 亚洲精色 | www.欧美亚洲 | 欧美日韩国产一区二区 | 成人网电影 | 精品 99 | 亚洲第一中文字幕 | 欧美成人一区二区三区片免费 | 国产高清视频在线 | 精品欧美黑人一区二区三区 | 最新黄色网址在线播放 | 天天综合91 | 精品亚洲永久免费精品 | 亚洲精品中文视频 | 天天干人人 | 理论片87福利理论电影 | 欧美成人精品在线观看 | 久久亚洲一区 | 99er视频| 日韩久久一区二区 | www.精品 | 国产精品成人在线 | 爱草在线 | 在线一区视频 | 中文字幕高清一区 | 日韩av免费在线观看 | 在线一区观看 | 午夜在线电影 | 亚洲精选久久 | 国产精品二区一区 | 中文字幕在线观看av | 欧美一级毛片久久99精品蜜桃 | 国产精品久久一区二区三区 | 亚洲精品国精品久久99热 | 九九99九九| 91精品国产91久久久久久不卡 | 国产97久久 | av天天干| 色吧av| 精品国产一区av | 91高清视频| 久久日本视频 | 欧美激情在线播放 | 成人h视频在线观看 | 色吊丝2288sds中文字幕 | 精品美女在线观看视频在线观看 | 日韩免费在线观看视频 | 一区二区免费视频观看 | 成人欧美一区二区三区在线观看 | 国产成人精品免费视频大全最热 | 99精品免费观看 | 97视频在线免费观看 | 韩国电影久久 | 亚洲成人精品在线观看 | 国产剧情一区二区 | 欧美狠狠操 | 成人精品一区二区三区 | 91在线高清观看 | 国产69精品久久久久观看黑料 | 久久在线| 国产欧美日韩一区 | 亚洲成人av| 中文字幕一区二区三 | 啵啵影院午夜男人免费视频 | 久久亚洲国产精品 | 亚洲精品乱码8久久久久久日本 | 欧美综合在线观看 | 亚洲精品一区二区三区樱花 | www操com| 香蕉视频一级片 | 免费观看一区二区三区 | 大胆裸体gogo毛片免费看 | 国产一区二区三区91 | 97精品一区 | 天堂成人国产精品一区 | 欧美性猛交一区二区三区精品 | 伊人一二三区 | 青青草免费在线 | 久久久久久中文字幕 | 国产成人免费在线 | 国产高清精品一区 | 国产精品久久久久久久午夜片 | 福利视频网站 | av免费网站| 欧美日韩一区在线观看 | 美女视频一区 | 中文字幕乱码一区二区三区 | 亚洲国产精品久久人人爱 | 91偷拍精品一区二区三区 | 成人中文网 | 国产三级在线观看 | 九色视频网站 | 红色av社区 | 黄色免费高清视频 | 午夜资源 | 美女国产 | 韩国精品在线 | 精品视频一区二区在线 | 国产精品18久久久久久久久久久久 | 亚洲国产精品久久人人爱 | 中文字幕日韩专区 | 中文字幕在线观看 | 国产精品自拍视频 | 天天摸夜夜摸爽爽狠狠婷婷97 | 国产日产精品一区二区三区四区 | 一区二区三区四区不卡视频 | av中文字幕在线观看 | 欧美日韩免费在线 | 亚洲一区中文 | 一级免费片 | 综合伊人 | 一级做a爰片毛片 | 久久久久中文 | 久久99爱视频 | 亚洲一区不卡在线 | 亚洲国产婷婷香蕉久久久久久99 | 国产精品亲子伦av一区二区三区 | 成人精品 | 久久久网 | 色吧av | 91亚洲视频| 一呦二呦三呦国产精品 | 日韩在线精品 | 国产一区二区三区在线免费观看 | 国产中文字幕一区二区三区 | 久草日韩 | 成人国产在线 | 三区视频 | 精品久久中文字幕 | 成人久久18免费观看 | 99精品国产在热久久 | 久久久久国产一级毛片高清版小说 | 欧美成人一区二免费视频软件 | 日本精品一区二区三区在线观看 | 日本不卡一区二区 | 午夜av电影 | 日韩精品一区二区三区 | 亚洲午夜精品一区二区三区 | 日本一区二区在线视频 | 一级片手机免费看 | 精品国产乱码久久久久久影片 | 国产成人99| a毛片| 免费国产视频在线观看 | 中文字幕一区二区三 | 一区二区中文字幕 | 欧美日韩一区二区不卡 | 日韩一级| 国产乱码精品一区二区三区忘忧草 | 日韩视频中文字幕 | 在线观看免费国产 | 久久九 | 国产亚洲精品美女久久久久久久久久 | 国产目拍亚洲精品99久久精品 | 日韩成人精品在线观看 | 久久久久黄 | 美女黄网站视频免费 | 在线国产视频 | 黄色免费网址大全 | 亚洲欧美日韩在线 | 美日韩在线| 亚洲国产免费 | 精品国产影院 | 国产视频一区二区三区四区 | 一区二区三区国产亚洲网站 | 亚洲成人精品在线观看 | 国产精品日韩三级 | 欧美久久免费 | 西西做爰免费视频 | 国产色网站 | 日韩久久一区 | 久久国产欧美日韩精品 | 日韩电影中文字幕 | 亚洲永久免费 | 成人精品视频一区二区三区 | 成人高清在线 | 精品久久久久香蕉网 | aa毛片| 91香蕉| 色69av| 精品免费久久久久久久苍 | 骚视频在线观看 | 亚洲最黄视频 | 欧美第一页 | 亚洲国产精品一区二区久久 | 色综合天天综合网国产成人网 | 亚洲高清视频在线观看 | 久久久久久影院 | 国产免费高清 | 国产精品成人3p一区二区三区 | 日韩色视频 | 精品国产一区二区三区久久久蜜臀 | www久久精品 | 天天看天天爽 | 欧美怡红院视频一区二区三区 | 黄色片在线 | 欧美精产国品一二三区 | 福利二区| 欧美精品久久久久久久久老牛影院 | 亚洲视频一区二区 | 精品国产91乱码一区二区三区 | 精品人伦一区二区三区蜜桃视频 | 国产精品有限公司 | 激情久久久久 | 欧美一级视频在线观看 | 亚洲一一在线 | 99精品国产高清一区二区麻豆 | 久久久夜夜夜 | 亚洲成年人网站在线观看 | 成人在线播放 | 亚洲一区二区中文 | 看亚洲a级一级毛片 | 四虎永久免费在线 | 中文字幕一区二区三区四区 | 国产精品久久久久久亚洲调教 | 成人在线视频免费观看 | 精品日韩欧美 | 国产精品久久久久久久久久妇女 | 久久精品中文字幕 | 免费在线一区二区三区 | 欧美.com | 99久久精品国产一区二区三区 | 在线成人av | 综合久久久| 亚洲国产日韩在线 | 国产激情精品一区二区三区 | 日韩中文视频 | 亚洲精品视频一区 | 久久精品国产99 | 成人免费毛片高清视频 | 四虎网址 | 午夜在线视频 | 99re在线观看视频 | 久久久久9999国产精品 | 日韩一区二区三区在线视频 | 中文字幕一区二区三区乱码图片 | 一级片在线观看 | 亚洲精品国精品久久99热 | 艹逼逼视频 | 国内精品视频 | jlzzjlzz亚洲日本少妇 | 日韩一二三区在线观看 | 亚洲精品成人av | 国产视频久久 | 大胸av | 国产精品久久久爽爽爽麻豆色哟哟 | 99热在线精品免费 | 秋霞电影院午夜伦 | 欧美第一页 | 欧美天天 | 国产网站在线 | 成人中文网 | 日韩av免费在线观看 | 午夜视频在线观看网站 | 久久人人网 | 久久成人一区二区 | 欧美久久不卡 | 在线免费观看毛片 | 精品无人乱码一区二区三区的优势 | 亚洲成人在线视频网站 | 欧日韩毛片 | 中文字幕在线综合 | 久久91| 国产精品久久久久久久福利院 | 久久成人国产精品 | 久久精品综合 | vagaa欧洲色爽免影院 | 在线免费黄色小视频 | 久久国产视频精品 | 淫片一级国产 | 国产一区二区三区高清 | 一区二区三区在线免费观看 | 一区二区日韩在线观看 | 久久久www成人免费精品 | 国产精品美女久久久久aⅴ国产馆 | 日韩免费视频 | 美女操网站 | 精品一区二区三区免费视频 | 午夜精品一区二区三区在线视频 | 男女羞羞视频免费在线观看 | 久久精品手机视频 | 亚洲精品专区 | 五月婷婷导航 | 亚洲天堂一区 | av影片在线 | 国产视频第一区 | 久久久久久综合 | 国产精品久久 | 人人澡人人射 | 色天天综合久久久久综合片 | 久久99深爱久久99精品 | 伊人精品在线 | 影音先锋中文字幕在线 | 欧洲一区 | 成人在线一区二区三区 | 免费一区二区三区 | 日中文字幕在线 | 操片|