黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

您的位置:首頁技術文章
文章詳情頁

開發效率翻倍的Web API使用技巧

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

引言

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

Clipboard API(剪切板)

剪切板 API 快速將內容復制到剪切板上,下面是一鍵復制的方法:

const onClipText = (text) => {
    handleCopyValue(text)
.then(() => {
    alert("復制成功");
})
.catch(() => {
    alert("自動復制失敗,請手動復制");
});
};
const handleCopyValue = (text) => {
    //瀏覽器禁用了非安全域的 navigator.clipboard 對象
    //在線上環境會報錯 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();
// 創建標簽,并隱藏
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);
// 聚焦、復制
textArea.focus();
textArea.select();
return new Promise((resolve, reject) => {
    // 不知為何,必須寫這個三目,不然copy不上
    document.execCommand("copy") ? resolve() : reject();
    textArea.remove();
});
    }
};

執行onClipText方法,即可將想復制內容,復制到用戶的剪切板上。

Fullscreen API(進入/退出全屏)

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

下面是一個 Fullscreen API 的例子:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Fullscreen API Example</title>
  </head>
  <body>
    <div id="booktext">
       <h1>正能量先鋒</h1>
<p>在今天這個快節奏、競爭激烈的時代里,我們時常會面臨一些挑戰和困難,有時甚至會讓我們感到絕望和沮喪。但我們應該時刻銘記,每一個困難背后都有無限的機會和可能。</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 實現一個視頻全屏播放的功能。

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

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

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

Online State API(網絡狀態)

就是獲取當前的網絡狀態,同時也有對應的事件去響應網絡狀態的變化。

window.addEventListener("online", onlineHandler); // 聯網時
window.addEventListener("offline", offlineHandler); // 斷網時

比如很常見的一個需求,斷網時提示,網絡恢復時刷新。

實現斷網重連:

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

這樣就可以監聽用戶的網絡狀態,如網絡鏈接、斷開時可以對用戶進行提示以及做相應的邏輯處理。

Page Visibility API(頁面顯示)

我們可以用document.visibitilityState來監聽網頁可見度,是否卸載..

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

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

<!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",() => {
    // 通過這個方法來獲取當前標簽頁在瀏覽器中的激活狀態。
    switch(document.visibilityState){
case"prerender": // 網頁預渲染 但內容不可見
case"hidden":    // 內容不可見 處于后臺狀態,最小化,或者鎖屏狀態
video.puase()
case"visible":   // 內容可見
video.play()
case"unloaded":  // 文檔被卸載
video.destory()
    }
});
</script>
</body>
</html>

這個API的用處就是用來響應我們網頁的狀態,如果這個標簽頁顯示則視頻就開始播放,隱藏就暫停,關閉就卸載。

Screen Orientation API(頁面方向)

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

// 獲取屏幕方向對象
const orientation = screen.orientation;
// 監聽屏幕方向變化事件
orientation.addEventListener("change", () => {
  console.log(`屏幕方向變為:${orientation.type}`);
});
// 鎖定屏幕方向為橫屏
orientation.lock("landscape").then(() => {
  console.log("屏幕方向已鎖定為橫屏");
}).catch((err) => {
  console.log(`鎖定屏幕方向失敗:${err}`);
});
// 解鎖屏幕方向
orientation.unlock();

在這段代碼中,我們首先通過screen.orientation獲取了屏幕方向對象,并通過addEventListener方法監聽了屏幕方向變化事件。然后,我們使用lock方法將屏幕方向鎖定為橫屏,并在鎖定成功后打印了一條消息。最后,我們使用unlock方法解鎖了屏幕方向。

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

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>當前電量: <span id="battery-level"></span></p>
<p>電池狀態: <span id="battery-status"></span></p>
    </div>
    <script>
// 獲取電池信息
navigator.getBattery().then(function(battery) {
    // 更新電量信息
    updateBatteryStatus(battery);
    // 監聽電池信息變化
    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來獲取電池的狀態信息,并在頁面上顯示當前電量和電池狀態。

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

Web Share API(分享)

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

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

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

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

如果用戶取消分享,則navigator.share方法會返回一個Promise對象,其狀態為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);
  });
// 設置ImageCapture
let imageCapture;
const track = video.srcObject.getVideoTracks()[0];
imageCapture = new ImageCapture(track);
// 添加事件監聽器
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”按鈕。當用戶點擊按鈕時,它將使用ImageCapture API拍攝照片,并在畫布和圖像元素中顯示照片。

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

Selection API(文本選區)

下面是一個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):

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

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

當用戶在頁面上選擇文本時,會觸發mouseup事件,然后調用handleSelection函數來處理選擇事件。

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

如果選擇了文本,我們創建一個新的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} 毫秒`);
});
// 測量網絡時間
const resourceUrl = "https://example.com/resource";
fetch(resourceUrl)
  .then(response =&gt; {
    const fetchTime = window.performance.now() - startTime;
    console.log(`請求時間為:${fetchTime} 毫秒`);
    // 獲取網絡時間信息
    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(`響應時間為:${entry.responseEnd - entry.responseStart} 毫秒`);
    console.log(`傳輸大小為:${entry.transferSize} 字節`);
  });

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

Geolocation API(獲取位置)

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

// 檢查瀏覽器是否支持 Geolocation API
if ("geolocation" in navigator) {
  // 獲取用戶當前位置信息
  navigator.geolocation.getCurrentPosition(
    (position) => {
      const { latitude, longitude } = position.coords;
      console.log(`您的緯度為:${latitude},經度為:${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("發生未知錯誤");
      }
    }
  );
} else {
  console.log("您的瀏覽器不支持 Geolocation API");
}

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

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

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

Broadcast Channel API(跨頁面通信)

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

<!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"); // 創建一個廣播通道對象
      function sendMessage() {
const inputMessage = document.getElementById("input-message");
const message = inputMessage.value;
channel.postMessage(message); // 將消息發送到廣播通道中
inputMessage.value = ""; // 清空輸入框內容
      }
      channel.onmessage = (event) => {
const message = event.data;
const messageDiv = document.getElementById("message");
messageDiv.innerHTML = message;
      }
    </script>
  </body>
</html>

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

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

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

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

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

Vibration API(設備振動)

以下是一個簡單的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>

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

如果設備支持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>

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

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

Intersection Observer API(元素監聽)

以下是一個示例,演示了如何使用 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”類的元素。然后,我們創建一個帶有0像素的rootMargin和0.5的閾值的IntersectionObserver實例。這意味著當元素的50%位于視口內時,它將被視為可見。

然后,我們循環遍歷每個盒子元素,并在我們的觀察者實例上調用observe方法,將盒子元素作為參數傳遞。

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

參考

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

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

標簽: JavaScript
主站蜘蛛池模板: 操碰97| 亚洲我射| 色 亚洲 日韩 国产 综合 | 性感美女毛片 | 一卡二卡久久 | 在线观看日本 | av网站在线免费看 | 光明影院手机版在线观看免费 | 国产在线精品一区在线观看 | 欧洲a级毛片 | 黄瓜污视频 | 最新中文字幕在线播放 | 中文字幕理伦片免费看 | 欧洲亚洲色一区二区色99 | 日本激情一区 | 日本一码二码三码在线 | 视频一区二区三区在线观看 | 久久成人亚洲 | 久久黄色片视频 | 亚洲精品在线视频免费观看 | 欧美国产精品日韩在线 | 国产深夜视频在线观看 | 丰满的少妇愉情hd高清果冻传媒 | 真实强推精品半推半就 | 无码国产69精品久久久久同性 | 亚洲成av人片在线观看无码 | 爽天天天天天天天 | 韩国三级中文字幕hd久久精品 | 丁香婷婷久久 | 美女在线观看www | 亚洲国产精品成人综合色在线婷婷 | 成人黄色在线播放 | 国产精品破处 | 永久国产 | 国产一区二区三区在线观看视频 | 久久久鲁 | 69av视频在线观看 | 国产精品久久久久久久久大全 | 欧美熟妇毛茸茸 | 香蕉视频在线观看视频 | 国产成人美女视频 | 欧美成人国产va精品日本一级 | 一级生性活片免费视频片 | 国产精品视频福利 | аⅴ资源中文在线天堂 | 亚洲自拍偷拍精品 | 欧美福利精品 | 日本在线免费播放 | 91大神在线免费观看 | 国产v亚洲v天堂a无码99 | 老熟妻内射精品一区 | 国产午夜精品久久久久久久 | 日韩av片无码一区二区不卡电影 | 亚洲3p激情在线观看 | 中文成人无字幕乱码精品区 | 亚洲另类中文字幕 | 东北老头嫖妓猛对白精彩 | 69亚洲乱| 欧美乱轮视频 | 欧美成人免费一区二区三区 | 成人区人妻精品一区二区不卡网站 | 亚洲精品xxx| 亚洲人成网站777色婷婷 | 午夜dj在线观看高清在线视频完整版 | 老司机亚洲精品影院无码 | 日韩免费视频 | 涩涩资源网 | 无限看片在线版免费视频大全 | 日本中文字幕有码 | 99精品免费久久久久久久久日本 | 亚洲熟妇av一区二区三区浪潮 | 日韩成人影视 | 国产精品毛片久久久 | 国产麻豆成人 | 四虎视频在线精品免费网址 | 偷偷操不一样的99 | 久久久久久一区国产精品 | 夜色福利站www国产在线视频 | 欧美亚洲黄色片 | 亚洲精品国产综合 | 一本加勒比hezyo国产 | 天堂无乱码 | 日韩一级黄色大片 | 毛片无限看 | 精品无码人妻一区二区三区 | 特级毛片内射www无码 | 日韩成人无码一区二区三区 | 亚洲国产一区二区在线观看 | 澳门黄色网 | 九色在线 | 免费不卡毛片 | 久久久久麻豆v国产精华液好用吗 | 在线播放污 | 中文字幕av一区 | 亚洲一区二区三区国产精华液 | 97在线观看视频免费 | 欧美黄色激情视频 | 亚洲精品免费在线观看 | 国产 日韩 欧美在线 | 亚洲一区二区三区久久久 | 欧洲grand老妇人 | 亚洲狠狠婷婷久久久四季av | 18无码粉嫩小泬无套在线观看 | 国产专区在线视频 | 久久久久久亚洲精品中文字幕 | 黄色一级大片免费看 | 亚洲精品影院在线观看 | 污污网站在线观看视频 | 日日碰狠狠躁久久躁综合网 | 3d动漫精品h区xxxxx区 | 少妇紧身牛仔裤裤啪啪 | 青青草综合在线 | 午夜dj高清免费观看视频 | 亚洲国产精品系列 | 蜜桃视频一区二区三区 | 无码人妻精品一区二区三区下载 | 裸体户外露出调教play | 日本一级待黄大片 | 欧美日韩免费观看一区=区三区 | 欧美一性一乱一交一视频 | 亚洲国产av一区二区三区 | 亚洲成人av免费观看 | 日韩精品五区 | 国产欧美精品一区 | 丝袜美腿亚洲一区二区图片 | 男人的天堂2018无码 | 国产色综合天天综合网 | 国产sm重味一区二区三区 | 网站黄在线 | 亚洲精品一区二区久久 | 7777kkk亚洲综合欧美网站 | 国产精品毛片久久久久久久 | 巨胸喷奶水www久久久 | 国产成人不卡 | 性的免费视频 | 亚洲va无码va在线va天堂 | 天天做天天摸天天爽欧美一区 | 青青草午夜 | 99re久久资源最新地址 | 久久精品人人做人人爱爱站长工具 | 激情视频区 | 亚洲中文字幕无码一区二区三区 | 三级黄色在线播放 | 国产成人精品白浆久久69 | 日本免费三片免费观看东热 | 成人网址在线观看 | 日韩精品a片一区二区三区妖精 | 1000部精品久久久久久久久 | 精品国产一区二区在线 | 色牛av| 黄色av片三级三级三级免费看 | 绯色av一区二区三区蜜臀 | 国产精品视频一区二区三区不卡 | 久久品道一品道久久精品 | 国产又嫩又黄又猛视频在线观看 | 中国女人高潮hd | 日韩精品久久久久久免费 | 好看的av在线 | 东北老女人高潮久久91 | 一级做人爰片全过 | 久激情内射婷内射蜜桃人妖 | 欧美在线视频播放 | 国产精品精品国产 | 在线观看免费成人 | 亚洲成av人影院在线观看 | 露出调教羞耻91九色 | 久久棈精品久久久久久噜噜 | 欧美日韩制服 | 天天干干干干干 | 国产高清精品软件丝瓜软件 | 免费看中国毛片 | 老牛影视免费一区二区 | 任你操精品视频 | 日本www在线观看 | 99热这里都是精品 | 少妇口述疯狂刺激的交换经历 | 日韩在线观看一区二区 | 亚洲综合性网 | 成人国产精品免费观看视频 | 久久久久国产精品夜夜夜夜夜 | 丰满白嫩尤物一区二区 | 免费人成视频在线观看网站 | 影音先锋男人资源网站 | 久久婷婷综合色 | 亚洲综合av在线在线播放 | 日韩狠狠 | 国产一区二区亚洲精品 | 在线国产视频 | 欧美日韩一区二区成人午夜电影 | 中文字幕无线精品亚洲乱码一区 | 一色桃子656中文字幕 | 狠狠干男人的天堂 | 九九九免费观看视频 | 欧美精品一区二 | 成人免费观看视频大全 | 久久精品国产一区二区三区不卡 | 久草精品视频在线看网站免费 | 亚洲丁香五月天缴情综合 | 成人黄色一级 | 日韩在线免费观看av | 亚洲偷自拍另类图片二区 | 中文字幕一区二区三区在线乱码 | 亚洲欧洲中文字幕 | av在线免费不卡 | 久久亚洲精品久久国产一区二区 | 精品一区日韩 | 在线青草| 国产伦精品一区二区三区男技 | 国产成人无码一区二区在线播放 | 亚洲国产精品女主播 | 亚洲成人自拍 | 国产精品久久久久久久久久妞妞 | 伊人涩涩 | 无套内谢88av免费看 | 成人午夜视频免费观看 | 国产精品性视频一区二区 | 张柏芝亚洲一区二区三区 | 成人精品视频 | 久久久久精彩视频 | 四虎影视4hu4虎成人 | hodv一21134铃原爱蜜莉在线 | 国产盗摄精品一区二区酒店 | 永久免费精品视频网站 | 久久免费看少妇a高潮一片黄特 | 精品美女| 色播在线 | 国产乱码精品一区二区三区爽爽爽 | 久久精品一区二区三区不卡牛牛 | 欧美日本高清 | 亚洲一级av毛片 | 影音先锋日韩资源 | 男同志毛片特黄毛片 | 精品h| 欲色网站 | 亚洲欧美日韩中文无线码 | 亚洲熟悉妇女xxx妇女av | 人人玩人人添人人澡 | www婷婷com| 欧美精品在线观看 | 亚洲天堂第一区 | 超级黄色片 | 日韩一级黄| 99re国产精品视频 | 亚洲成av人片天堂网无码】 | 小泽玛莉亚一区二区视频在线 | 邻居少妇2中文字幕hd | 女教师高潮黄又色视频 | 色婷婷在线观看视频 | 国产91一区 | 乱女午夜精品一区二区三区 | 操操操日日日 | 国精品一区 | 欧美人一级淫片a免费播放 欧美人与zoxxxx另类 | 国产偷v国产偷∨精品视频 国产偷v国产偷v精品视频 | 五月天精品在线 | 六月丁香婷婷综合 | 性h欲短篇合集 | 99久久九九 | 日韩欧美视频在线免费观看 | 九色视频在线免费观看 | 国产成人精品视频一区二区不卡 | 女被男啪到哭的视频网站 | 国产乱女淫av麻豆国产 | 国产伦精品一区二区三区免 | 成人久久18免费网站 | 亚洲性久久9久久爽 | 综合五月激情二区视频 | 亚洲图片88 | 欧美亚洲在线视频 | 国产黄大片在线观看 | 国产乱码精品一区二区三区四川人 | 人妻妺妺窝人体色www聚色窝 | 夜夜爱视频 | 国产精品久久久久久久泡妞 | 91视频这里只有精品 | 欧美精品1区 | 影音先锋男人站 | 午夜国产 | 99热免费| 任你躁x7x7x7x7在线观看 | 友田真希一区二区 | 丰满肉嫩西川结衣av | 老司机在线免费视频 | 国产真人做爰视频免费 | 日韩视频在线观看视频 | 日韩精品射精管理在线观看 | 免费在线观看中文字幕 | 国产亚洲精品久久久久的角色 | 国内揄拍国产精品 | 欧美成人精品一级乱黄 | 人人舔人人干 | 亚洲伊人网站 | 国产精品成人观看视频国产奇米 | 亚洲综合精品一区二区三区 | 久久久久久国产精品免费免费 | 亚瑟av在线| 日韩国产高清一区二区 | 夫妻啪啪呻吟x一88av | 国产精品久久久久9999高清 | 久草综合在线视频 | 乐播av一区二区三区 | missav | 免费高清av在线看 | 亚洲熟妇av日韩熟妇在线 | 大乳丰满人妻中文字幕日本 | 亚洲欧美成人中文日韩电影网站 | 日韩专区中文字幕 | 黑人巨大跨种族video | 国产又黄又粗的视频 | 国产高潮刺激叫喊视频 | 少妇大叫太大太粗太爽了 | 射进来av影视 | 国内最真实的xxxx人伦 | 国产视频在线看 | 91精品天码美女少妇 | 91精品国产综合久久久蜜臀图片 | 亚洲爆乳无码专区 | 精品一区二区三区四区五区 | 日本一级大片 | 欧美一区二区三区久久 | 日韩国产免费 | 日韩成人三级 | 国产成人麻豆亚洲综合无码精品 | 色月阁| 成人精品视频网站 | 国产毛片久久 | 艳妇乳肉豪妇荡乳av | 亚洲人成久久 | 久久鲁视频 | 欧美成人免费在线视频 | 粉嫩av淫片一区二区三区 | 国产真实生活伦对白 | 在线综合视频 | 激情无码人妻又粗又大 | 天天摸天天舔 | 欧美叫娇小xx人1314 | 丰满爆乳一区二区三区 | 精久国产av一区二区三区孕妇 | 丰满少妇人妻hd高清大乳在线 | 波多野结衣福利视频 | 日韩精品久久无码中文字幕 | 91av视频在线观看 | 日韩无套无码精品 | 亚洲 欧美 影音先锋 | 三级a毛片 | 国精产品一区一区三区mba下载 | 国产图区| 日韩一二三区在线观看 | 国产手机在线精品 | 亚洲欧洲美洲精品一区二区三区 | 无码高潮爽到爆的喷水视频app | 国产超碰av | 人人玩人人添人人澡超碰 | 女同久久另类99精品国产 | 久久这里只精品 | 亚洲成在人 | 国产亚州精品女人久久久久久 | 成人午夜视频在线免费观看 | 交aaa免费视频 | 欧美黄色一级生活片 | 日本三级中文字幕在线观看 | 久久久久久久久久91 | 一级国产黄色片 | 午夜视频一区二区三区 | 欧美人体做爰大胆视频 | 蜜桃成人无码区免费视频网站 | 超碰在线人人 | 亚洲偷自| 国产免费一区二区 | 东方影院av久久久久久 | 国产99对白在线播放 | 在线精品国产一区二区三区 | 日本天堂免费a | 国产一二三区精品 | 成人免费淫片视频软件 | 91精品久久久久久粉嫩 | 国语对白乱妇激情视频 | 精品久久999 | 天天操操操 | 青青草av在线播放 | 国产av人人夜夜澡人人爽麻豆 | jizz中国少妇高潮出水 | 伊人久久精品无码麻豆一区 | 日本中文字幕高清 | 青青草污视频 | 在线看污片 | 粉嫩av一区二区三区四区在线观看 | 少妇性l交大片免费观看 | 一级片av| av最新版天堂资源在线 | 精品久久久久一区二区国产 | 91在线视频免费 | 国产洗浴女技师全套av | 欧美伦理一区二区三区 | 成人依依网| 99蜜桃臀精品视频在线观看 | h视频在线看 | 扒开双腿被两个男人玩弄视频 | 久久久在线免费观看 | 欧美亚洲系列 | 国产成人精品综合久久久 | 久久人人爽人人爽爽久久 | 国内激情av片 | 国产精品久久久久久久久久久久久久久久久久 | 欧美乱妇高清无乱码 | 91精品国产综合久久久蜜臀九色 | 国产色婷婷精品综合在线手机播放 | 无码免费一区二区三区 | ass东方小嫩模pics | 少妇又紧又色又爽又刺激视频网站 | 国产精品一区二区久久精品爱微奶 | 欧美综合自拍亚洲综合图 | 永久免费网站直接看 | 辽宁熟女高潮狂叫视频 | 亚洲色无码国产精品网站可下载 | 午夜视频在线观看一区 | 操皮视频 | 亚洲精品免费av | 性欧美在线视频免费观看 | 免费人成在线观看网站 | 熟女丰满老熟女熟妇 | 在线看亚洲 | 亚洲视频国产视频 | 精品国产乱 | 亚洲日本一区二区一本一道 | 色噜噜一区二区三区 | 与黑人做爰的日本人 | 狠狠色噜噜狠狠狠狠色综合久av | 精品久久久久久久久久久国产字幕 | av片在线看| 国产精品久久高潮呻吟声 | 欧美成人免费大片 | 日本在线播放视频 | 免费视频国产在线观看 | 国产嫩草在线观看 | 优月まりな乳狂在线观看 | 欧美老女人性视频 | 欧美色噜噜| 黄色网址你懂的 | 一级全黄少妇性色生活片毛片 | 一本色道久久综合亚洲精品图片 | 裸体丰满少妇淫交 | 久久天堂影院 | 国产第一页屁屁影院 | 能看的av| 97久久精品无码一区二区天美 | 免费国产又色又爽又黄的网站 | 午夜精品久久久久久久四虎美女版 | 国产高跟黑色丝袜在线 | 亚欧乱色| 免费黄色毛片 | 国产高清精品一区二区三区 | 国产丝袜在线 | 日本黄色www| 青青热久免费精品视频在线播放 | 国产精品久久久久久久久久辛辛 | 国产区视频 | 久久国产视频一区二区 | 亚洲精品久久久久久无码色欲四季 | 看黄a大片日本真人视频直播 | 人妻熟女一区二区三区app下载 | yy111111少妇影院免费观看 | 精品一区二区三区蜜桃 | 成人看| 亚洲国产精品视频 | 国产无套精品一区二区 | 亚洲aⅴ精品一区二区三区91 | 久久国产精品久久久久久 | 欧美视频一区二区在线观看 | 色优久久 | 少妇呻吟白浆高潮啪啪69 | 亚洲精品天堂成人片av在线播放 | 免费毛片a | 日日摸日日碰夜夜爽无码 | 福利资源在线观看 | 人与野鲁毛片在线视频 | 久久久精品日本 | 国产亚洲成av人在线观看导航 | 亚洲www啪成人一区二区麻豆 | 97在线影院| 国产麻豆剧果冻传媒白晶晶 | 久久亚洲人成网站 | 欧美日韩在线观看视频 | 日韩二区在线 | 人人妻人人澡人人爽不卡视频 | 欧美 日韩 国产精品 | 日韩不卡在线播放 | 碰碰久久 | 国产一二区在线 | 日本久久久久久科技有限公司 | 99久久国产福利自产拍 | 久久久久久久成人 | 成av人在线 | 中文毛片无遮挡高清免费 | 天天躁日日躁狠狠躁av麻豆男男 | 久涩涩福利视频在线观看 | 99精品久久久 | 曰韩少妇内射免费播放 | 男人天堂网址 | 九九国产在线观看 | 国内精品伊人久久久久av影院 | 18禁止看的免费污网站 | a在线亚洲男人的天堂 | 看看黄色毛片 | 久久婷婷色一区二区三区asmr | 精品国产乱码久久久久久蜜退臀 | 黄色毛片子 | 日韩乱码人妻无码中文字幕久久 | 日本无遮羞调教惩罚网站 | 国产日产亚洲系列最新 | 亚洲第一天堂 | 久久最新免费视频 | 一级特级毛片 | 黄色片在哪看 | 日韩大片免费在线观看 | 成人在线观看免费视频 | 丝袜老师办公室里做好紧好爽 | 久久免费精品国自产拍网站 | 亚洲男女 | 精品无码中文字幕在线 | 欧美一区二区三区成人 | 国产综合久久久久久鬼色 | 伊人久久无码中文字幕 | 国产成人一区二区三区影院动漫 | 欧美成人免费网站 | 久久福利影院 | 国产91中文字幕 | 国产精品久久国产精麻豆96堂 | 乱人伦人妻中文字幕无码久久网 | 午夜久久久久久禁播电影 | 免费观看全黄做爰大片国产 | 亚洲色图国产精品 | 一级片的网站 | 欧美激情一区二区三区 | 亚洲国产极品 | 久久最新免费视频 | 色欲av永久无码精品无码 | 国产山村乱淫老妇女视频 | 狠狠色噜噜狠狠狠狠7777米奇 | 国产三区在线播放 | 天堂在线中文字幕 | 国产三香港三韩国三级古装 | 欧美成人性影院 | 免费在线观看黄色片 | 黄色片网站在线看 | 男人下部进女人下部视频 | 欧美极品少妇×xxxbbb | 人妻 校园 激情 另类 | 日韩avxxx | 涩涩屋www视频在线观看高清 | 91最新视频 | 亚洲gv天堂gv无码男同 | 欧美一级久久久 | 中文字幕国产专区 | 国产69堂免费视频 | 91精品国产一区二区在线观看 | xx视频在线观看 | 两口子真实刺激高潮视频 | 久久久妇女 | 丰满少妇奶水一区二区三区 | 国产精品久久久久一区二区三区 | 五月婷婷爱爱 | 国产好大好紧好爽好湿视频唱戏 | 午夜肉伦伦 | 91精品日韩 | 欧美激情视频一区二区三区免费 | 日韩高清网站 | 日韩高清成人 | 97久久精品人人澡人人爽 | 国产真人无遮挡作爱免费视频 | av 日韩 人妻 黑人 综合 无码 | 国产jjizz女人多水喷水 | 激情婷婷色 | 亚洲一区二区欧美 | 我要看免费毛片 | 国产大奶在线 | 最近中文字幕在线中文视频 | 亚洲福利午夜 | 亚洲精品无码不卡在线播he | 狠狠色噜噜狠狠狠狠97首创麻豆 | 国产一区二区中文字幕 | 巨胸美女狂喷奶水www | 四虎成人永久免费视频 | 日本a级片视频 | 成人小视频在线观看 | 亚洲精品高潮 | 亚洲操操| 国产激情无套内精对白视频 | 国产亚洲日韩av在线播放不卡 | 免费国产成人 | 国产精品自拍区 | 天天搞天天搞 | 女人18毛片水最多 | beeg日本高清xxxx18 | 老头边吃奶边弄进去呻吟 | 中文字幕一区二区三区乱码在线 | 国产丝袜一区视频在线观看 | 国产一区二区三区视频 | 久久99精品国产麻豆婷婷小说 | 天天干视频在线观看 | 亚洲一区二区三区影院 | 久久国产自偷自偷免费一区调 | 一级片免费观看视频 | 国色天香精品一卡2卡3卡 | 日韩啊v| 欧美精品第20页 | 后进极品圆润翘臀在线播放 | 国产亚洲精品成人aa片新蒲金 | 最新精品国偷自产在线下载 | 久久综合五月丁香久久激情 | 丝袜人妻一区二区三区 | 国产精品欧美一区二区三区奶水 | 国产区精品在线 | 狂野欧美性猛交xxxxx视频 | 中国女人内谢69xxxx | 国语做受对白xxxxx在线 |