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

前端玩轉 Emoji 表情符號,看這一篇就夠了!

開發 前端
Emoji 是一種圖形符號,最初由日本電信運營商在 1990 年代引入,用于增強短信和網頁的表達能力。隨著時間的發展,Emoji 已經成為通信中不可或缺的一部分,廣泛應用于社交媒體、電子郵件、即時通訊工具等各種平臺。

Emoji 已經成為我們日常溝通中不可或缺的一部分,本文就來了解一下在前端中如何玩轉 Emoji!

Emoji 基本概念

前置知識

在學習 Emoji 之前,我們先來一些和 Emoji 相關的前置知識。

  • Unicode:

a.定義: 一個國際標準,旨在為世界上幾乎所有的字符(包括字母、數字、符號、標點符號和表情符號等)提供唯一的數字表示形式。它的主要目標是確保在不同的平臺、操作系統和設備之間能夠一致地表示和處理文本數據。

b.特點:

統一編碼:Unicode 為每種語言中的每個字符分配了一個唯一的編號(稱為碼點),從而解決了不同編碼系統之間的不兼容問題。

廣泛覆蓋:Unicode 包含了幾乎所有現代語言的字符,并且還在不斷擴展以支持更多的符號和歷史文字。

多種實現方式:Unicode 支持多種編碼格式,如 UTF-8、UTF-16 和 UTF-32,以便在不同的應用場景中靈活使用。

  • 碼點:
  • 定義: 指在 Unicode 標準中為每個字符分配的一個唯一的數字值。它通常用十六進制表示,并帶有前綴 U+ 來標識這是一個 Unicode 碼點。
  • 舉例:

a.字母 A 的 Unicode 碼點是 U+0041。

b.笑臉 Emoji ?? 的 Unicode 碼點是 U+1F60A。

  • 范圍: Unicode 定義了從 U+0000 到 U+10FFFF 的碼點范圍,總共可以表示超過一百萬個字符。這個范圍分為以下幾部分:
  • 基本多文種平面:從 U+0000 到 U+FFFF,包含最常見的字符。

  • 輔助平面:從 U+10000 到 U+10FFFF,用于表示較少見的字符和 Emoji。

  • 編碼方式: Unicode 有多種編碼方式,常見的有 UTF - 8、UTF - 16 和 UTF - 32。

  • UTF - 8:一種可變長度的編碼方式,使用 1 到 4 個字節來表示一個字符。它對 ASCII 字符采用單字節編碼,兼容 ASCII 標準,因此在互聯網上得到了廣泛應用。

  • UTF - 16:使用 2 個或 4 個字節來表示一個字符,常用于操作系統和編程語言中,如 Java 和 JavaScript 默認使用 UTF - 16 編碼。

  • UTF - 32:固定使用 4 個字節來表示一個字符,編碼簡單直接,但會占用較多的存儲空間。

Emoji 是什么?

Emoji 是一種圖形符號,最初由日本電信運營商在 1990 年代引入,用于增強短信和網頁的表達能力。隨著時間的發展,Emoji 已經成為通信中不可或缺的一部分,廣泛應用于社交媒體、電子郵件、即時通訊工具等各種平臺。

Emoji 本質上是 Unicode 字符集中的一部分,每個 Emoji 都有一個對應的唯一 Unicode 編碼。在最新的 Unicode 16.0 版本中,共指定了 3790 個 Emoji 及其編碼。

圖片圖片

Emoji 對應的 Unicode 編碼:https://unicode.org/emoji/charts/full-emoji-list.html

在支持 Unicode 的環境中,如現代的文本編輯器、瀏覽器等,你可以直接輸入 Emoji 字符來使用它們。許多操作系統都提供了便捷的 Emoji 輸入方法,例如在 Windows 系統中,按下 win + . 組合鍵可以打開 Emoji 選擇器;在 macOS 系統中,按下 Fn + E 組合鍵可以打開 Emoji 輸入菜單。

圖片圖片

不知道你有沒有發現,在不同系統/應用上,Emoji 長的都不太一樣,這是為什么呢?其實,Unicode 為每個 Emoji 分配了唯一的碼點,確保其在不同系統中代表相同的含義,但并沒有規定每個 Emoji 的樣式。因此,每個系統/應用都可以根據各自的設計風格對 Emoji 進行設計,所以就出現了多種風格的 Emoji。

圖片圖片

為了提高一致性,一些項目提供了標準化的 Emoji 集合,可以通過這些項目來自定義 Emoji 顯示,如 Twemoji:https://github.com/googlefonts/noto-emoji

需要格外注意的是:不同的文化對 Emoji 的理解和使用可能有所不同。例如,某些 Emoji 在特定文化中可能有特殊的含義或象征意義。因此,在國際化應用中,需要特別注意 Emoji 的使用,以避免誤解或冒犯。

Emoji 在前端的應用

表示

HTML

  • 直接插入 Emoji:可以在 HTML 文件中的任何文本位置直接插入 Emoji。
<p>今天天氣真好 ??</p>
  • 使用 Unicode 編碼:如果無法直接輸入 Emoji 或者希望使用其 Unicode 編碼,可以使用 Unicode 轉義序列。
<p>今天天氣真好 ?</p>

注意:&#x 后面跟隨的是 Emoji 的 Unicode 碼點的十六進制表示。例如,笑臉 ?? 的 Unicode 碼點是 U+1F60A,在 HTML 中表示為 &#x1F60A;。

CSS

  • 使用 content 屬性: 可以通過 CSS 的 ::before 或 ::after 偽元素以及 content 屬性來插入 Emoji。
.emoji-before::before {
  content: "??"; /* 直接插入 Emoji */
}

.emoji-after::after {
  content: "\1F60A"; /* 使用 Unicode 轉義序列 */
}

注意: 在 CSS 中使用 Unicode 轉義序列時,不需要 &#x 前綴,直接使用 \ 加上十六進制編碼即可。

由于 Emoji 是彩色字符,通常不需要額外的顏色設置。不過,可以通過調整字體大小來控制 Emoji 的顯示大小。

h1 {
    font-size: 2em; /* 將字體大小放大兩倍 */
}

JavaScript

在 JavaScript 中,可以通過以下方式來表示 Emoji:

  • 直接插入 Emoji: 在現代 JavaScript 環境中,可直接在字符串里使用 Emoji 字符。因為現代編輯器和瀏覽器廣泛支持 Unicode 字符,能正確識別和顯示 Emoji。
console.log('Hello ??'); // 輸出: Hello ??
  • 使用 Unicode 編碼: 每個 Emoji 都有對應的 Unicode 編碼,可通過 Unicode 編碼來表示 Emoji。基本多文種平面(BMP)內的 Emoji 用 \u 加 4 位十六進制編碼表示;超出 BMP 的 Emoji 需用代理對或 \u{} 語法表示。
// BMP 內的 Emoji
const heart = '\u2764'; 
console.log(heart);   // ?

// 超出 BMP 的 Emoji,使用代理對
const rocket = '\uD83D\uDE80'; 
console.log(rocket);  // ??

// 超出 BMP 的 Emoji,使用 \u{} 語法
const pizza = '\u{1F355}'; 
console.log(pizza);   // ??

獲取和設置碼點

  • 獲取碼點: 可以使用 codePointAt() 方法來獲取字符串中某個位置的 Unicode 碼點。
const smiley = '??';
console.log(smiley.codePointAt(0).toString(16)); // 輸出: 1f60a
  • 設置碼點: 可以使用 String.fromCodePoint() 方法從 Unicode 碼點創建字符串。
console.log(String.fromCodePoint(0x1F60A)); // 輸出: ??

字符串操作

問題

在 JavaScript 中處理 Emoji 時,尤其是涉及字符串操作,存在一些常見的問題。

  • 代理對: 在 JavaScript 里,字符串中的每個字符通常以 16 位(即 2 個字節)來表示,這遵循的是 UTF-16 編碼規則。不過,Emoji 字符比較特殊,部分 Emoji 字符的編碼超出了基本多文種平面(BMP),需要使用代理對來表示,也就是用兩個 16 位編碼單元來表示一個 Emoji 字符。因此,普通的 .length 屬性可能會返回不正確的字符數,因為它會將代理對視為兩個字符。
const emoji = '??';
console.log(emoji.length); // 輸出: 2 (而不是1)
  • 組合字符: 帶有修飾符的 Emoji 可能由多個碼點組成。例如,?????? 是由三個獨立的 Emoji 組合而成的。因此,在使用 .length計算長度時,得到的結果是不準確的。
const familyEmoji = '??????';
console.log(familyEmoji.length); // 輸出: 8 (而不是1)
  • 截斷問題: JavaScript 中的 slice、substring 或 substr 方法會按照 16 位編碼單元來截取字符串,當使用這些方式截斷包含 Emoji 的字符串時,若在截取過程中恰好截斷了一個代理對,就會產生亂碼。因為這些方法是無法正確處理代理對和組合字符的。
const emojiStr = '??????';
// 錯誤的截取,截斷了代理對
const wrongSubStr = emojiStr.slice(0, 1); 
console.log(wrongSubStr); // ?

內置 API:Intl.Segmenter

ES2021 提供了 Intl.Segmenter,可以解決上面的問題,它是 ECMAScript 國際化 API 的一部分,用于根據語言和區域設置對字符串進行分割。它可以將文本分割成有意義的單元,如單詞、句子或圖元簇,從而更好地處理多語言文本。

Intl.Segmenter 提供了以下分割方式:

  • Grapheme Cluster(圖元簇):將字符串分割為用戶感知的字符單位。這對于處理復雜的 Unicode 字符(如 Emoji 和組合字符)非常有用。
  • Word(單詞):將字符串分割為單詞。
  • Sentence(句子):將字符串分割為句子。

Intl.Segmenter 的基本用法如下:

  • 'en':指定語言環境。可以根據需要更改為其他語言環境,如 'zh' 或 'fr'。
  • { granularity: 'grapheme' }:指定分割粒度,可以是 'grapheme'、'word' 或 'sentence'。
const segmenter = new Intl.Segmenter('en', { granularity: 'grapheme' });

在處理包含復雜 Unicode 字符(如 Emoji 和組合字符)的字符串時,確保準確計算字符數量。

const segmenter = new Intl.Segmenter([], { granularity: 'grapheme' });
const text = 'Hello ????♂? ??????!';
const segments = Array.from(segmenter.segment(text));
console.log(segments.length); // 輸出: 10

第三方庫:grapheme-splitter

對于上面這些問題,也可以使用grapheme-splitter庫來解決,它是一個用于處理 Unicode 字符串的 JavaScript 庫,專門用于將字符串分割成“圖元簇”。圖元簇是用戶感知的一個字符單位,即使它可能由多個 Unicode 碼點組成。例如,帶有膚色修飾符或性別修飾符的 Emoji 實際上是由多個碼點組成的,但用戶通常將其視為一個整體。

grapheme-splitter 的使用場景:

  • 統計字符數量:當需要準確統計字符串中用戶實際看到的字符個數時,例如在文本輸入框中限制字符數量,包含組合字符的字符串使用 .length 計算會不準確,使用 grapheme-splitter 可以得到正確結果。
import GraphemeSplitter from "grapheme-splitter";
const splitter = new GraphemeSplitter();

const str = '??????';
const length = splitter.countGraphemes(str);
console.log(length); // 輸出:1
  • 從字符串中提取特定位置的圖元簇:
import GraphemeSplitter from "grapheme-splitter";
const splitter = new GraphemeSplitter();

const text = 'Hello ????♂? ??????!';
const graphemes = splitter.splitGraphemes(text);
console.log(graphemes);  // 輸出:["H", "e", "l", "l", "o", " ", "????♂?", " ", "??????", "!"]

// 獲取第一個圖元簇
console.log(graphemes[0]); // 輸出: H

// 獲取第7個圖元簇(包含復雜的Emoji)
console.log(graphemes[5]); // 輸出: ????♂?

// 獲取最后一個圖元簇
console.log(graphemes[graphemes.length - 1]); // 輸出: !
  • 字符串截取:在截取字符串時,確保不會截斷組合字符,避免出現亂碼或不完整的字符顯示。
import GraphemeSplitter from "grapheme-splitter";
const splitter = new GraphemeSplitter();

const text = 'Hello ????♂? ??????!';
const graphemes = splitter.splitGraphemes(text);


// 截取前5個圖元簇
const firstFive = graphemes.slice(0, 5).join("");
console.log(firstFive); // 輸出: Hello

// 截取第6到第7個圖元簇
const middlePart = graphemes.slice(6, 7).join("");
console.log(middlePart); // 輸出: ????♂?

// 截取最后1個圖元簇
const lastFive = graphemes.slice(-2).join("");
console.log(lastFive); // 輸出: ??????!
  • 字符遍歷:按用戶感知的字符逐個遍歷字符串,對每個字符進行特定操作。
import GraphemeSplitter from "grapheme-splitter";
const splitter = new GraphemeSplitter();

const str = '????????????♂?';
const graphemes = splitter.splitGraphemes(str);
graphemes.forEach((grapheme) => {
    console.log(grapheme);
});

驗證

在處理 Emoji 時,驗證輸入是否包含有效的 Emoji 字符是一個常見的需求。這可以通過多種方式實現,包括正則表達式以及使用專門的庫來幫助識別和驗證 Emoji。

正則表達式

Emoji 是 Unicode 字符,因此可以使用正則表達式來匹配它們。然而,由于 Emoji 的種類繁多,并且新的 Emoji 不斷被添加到 Unicode 標準中,編寫一個全面的正則表達式可能會比較復雜。下面是一個例子:

const emojiRegex = /(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]|\ud83c[\udffb-\udfff])?(?:\u200d(?:[^\ud800-\udfff]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]|\ud83c[\udffb-\udfff])?)*/gu;

const text = "Hello ????♂? ??????! How are you?";

// 提取所有匹配的 Emoji
const matches = text.match(emojiRegex);

if (matches) {
    console.log('Matches:', matches); // 輸出: ["????♂?", "??????"]
} else {
    console.log('No emojis found.');
}

// 驗證是否包含 Emoji
const hasEmoji = emojiRegex.test(text);
console.log('Contains emoji:', hasEmoji); // 輸出: true

注意: 當使用正則表達式處理包含超出 BMP 的 Unicode 字符(如 Emoji)的字符串時,就需要使用 u 修飾符。u 修飾符的主要作用是開啟 Unicode 模式,讓正則表達式能夠正確處理超過 \uFFFF 的 Unicode 字符。在 JavaScript 里,字符串中的字符默認以 UTF-16 編碼存儲,基本多文種平面(BMP)內的字符可以用一個 16 位的編碼單元表示,但超出 BMP 的字符需要用兩個 16 位的編碼單元(代理對)來表示。在沒有 u 修飾符的情況下,正則表達式會將代理對拆分成兩個單獨的編碼單元進行處理;而使用 u 修飾符后,正則表達式能將代理對視為一個整體,從而正確匹配和處理這些字符。

第三方庫:emoji-regex

emoji-regex 是一個專門用于匹配 Emoji 的 JavaScript 庫。它可以準確地識別和匹配各種類型的 Emoji。

import emojiRegex from 'emoji-regex';
const regex = emojiRegex();

const text = "Hello ????♂? ??????! How are you?";
const matches = text.match(regex);

console.log(matches); // 輸出: ["??", "??", "\u200d", "♂", "\ufe0f", "??", "\u200d", "??", "\u200d", "??"]

Emoji 選擇器

Emoji 選擇器可幫助用戶方便地插入 Emoji 字符。它在許多應用(如聊天軟件、社交平臺、文本編輯器等)中廣泛使用。我們可以根據需要自定義 Emoji 選擇器(可以借助 emojibase 庫的數據來實現),也可以使用開源的 Emoji 選擇器,以下是一些比較熱門的 Emoji 選擇器(npm包名稱)。

  • emoji-mart:

圖片圖片

  • emoji-picker-react:

圖片圖片

  • vue3-emoji-picker:

圖片圖片

責任編輯:武曉燕 來源: 前端充電寶
相關推薦

2022-06-20 09:01:23

Git插件項目

2023-02-10 09:04:27

2020-02-18 16:20:03

Redis ANSI C語言日志型

2022-08-01 11:33:09

用戶分析標簽策略

2021-04-08 07:37:39

隊列數據結構算法

2023-09-11 08:13:03

分布式跟蹤工具

2020-08-03 10:00:11

前端登錄服務器

2019-05-14 09:31:16

架構整潔軟件編程范式

2023-10-17 08:15:28

API前后端分離

2020-07-03 08:21:57

Java集合框架

2025-08-07 04:10:00

光模塊AI網絡

2018-05-22 08:24:50

PythonPyMongoMongoDB

2024-09-23 08:00:00

消息隊列MQ分布式系統

2022-04-07 10:39:21

反射Java安全

2017-03-11 22:19:09

深度學習

2023-11-18 09:30:42

模型AI

2022-05-19 08:28:19

索引數據庫

2022-07-06 12:07:06

Python函數式編程

2020-10-18 07:32:06

SD-WAN網絡傳統廣域網

2023-11-06 07:21:13

內存結構Jvm
點贊
收藏

51CTO技術棧公眾號

亚洲制服欧美中文字幕中文字幕| 麻豆精品视频在线观看| 日韩精品亚洲元码| 妺妺窝人体色www在线观看| 国产日本在线| 久久国内精品自在自线400部| 不卡av日日日| 亚洲熟妇一区二区三区| av在线国产精品| 欧美日韩免费在线| 在线国产精品网| 熟妇人妻中文av无码| 蜜臀99久久精品久久久久久软件| 久久69精品久久久久久久电影好| jizz欧美性20| 日韩区欧美区| 91久久精品午夜一区二区| 小泽玛利亚av在线| 成人在线播放视频| 99视频一区二区三区| 91亚洲国产成人精品性色| 少妇太紧太爽又黄又硬又爽| 羞羞色午夜精品一区二区三区| 亚洲第一在线视频| 999在线精品视频| 男人皇宫亚洲男人2020| 亚洲五码中文字幕| 在线观看欧美亚洲| av资源在线观看免费高清| 成人中文字幕在线| 亚洲xxx大片| 夜夜嗨av禁果av粉嫩avhd| 国产日韩欧美| 久久免费国产精品1| h色网站在线观看| 日韩精品免费一区二区三区| 亚洲精品第一国产综合精品| 337p日本欧洲亚洲大胆张筱雨| 日韩电影免费观看高清完整版在线观看| 福利视频第一区| 国产高清www| 神马午夜伦理不卡| 亚洲欧美偷拍卡通变态| 亚洲日本精品国产第一区| 欧美精品久久久久久久久久丰满| 国产成人精品亚洲777人妖| 成人激情免费在线| 国产精品久久久久久在线| 蜜桃av噜噜一区| 国产精品一二三在线| 狠狠躁夜夜躁人人爽视频| 亚洲一区二区三区免费在线观看| 韩国三级电影久久久久久| 妺妺窝人体色www在线下载| 欧美国产三区| 欧美激情免费看| 精品在线视频观看| 精品96久久久久久中文字幕无| 欧美肥老妇视频| 久久精品波多野结衣| 韩国一区二区三区在线观看| 欧美激情精品久久久久久免费印度| 欧美极品视频在线观看| 狠狠88综合久久久久综合网| 韩国日本不卡在线| 成人免费a视频| 老司机精品久久| 国产精品入口夜色视频大尺度| 曰批又黄又爽免费视频| 精品一区二区国语对白| 92国产精品久久久久首页| www.日韩高清| 97超碰欧美中文字幕| 欧美h视频在线| 在线视频婷婷| 亚洲免费av高清| 无码粉嫩虎白一线天在线观看 | 久国内精品在线| 国产亚洲精品久久777777| 夜夜嗨av一区二区三区网站四季av| 91av在线免费观看| 国产精华7777777| 久久99久久精品| 成人永久免费| 国产私拍精品| 一区二区三区资源| 免费毛片小视频| 粉嫩av一区二区三区四区五区| 欧美精品久久99| 日本一区二区在线观看视频| 中文字幕亚洲影视| 久久久国产视频| 亚洲另类欧美日韩| 黄色资源网久久资源365| 国产日韩二区| 欧美人xxx| 精品国产乱码久久久久久天美 | 麻豆乱码国产一区二区三区| 制服.丝袜.亚洲.中文.综合懂色| 免费人成精品欧美精品| www国产亚洲精品| 国产高清在线看| 亚洲午夜激情av| 污污网站在线观看视频| 久久激情av| 久久激情五月丁香伊人| 久久久久久久久久久久久久久久久 | 日韩成人在线播放| 开心激情五月网| 亚洲综合丁香| 国产精品国产亚洲精品看不卡15 | 久久久久免费精品国产| 成年人晚上看的视频| 丁香婷婷综合激情五月色| 色女孩综合网| 牛牛精品一区二区| 日韩精品最新网址| 天天干天天操天天拍| 亚洲一区二区三区高清不卡| aaa级精品久久久国产片| 五月婷婷在线视频| 色成人在线视频| 中文字幕无码人妻少妇免费| 亚洲欧洲日韩| 国产日韩欧美综合| 岛国大片在线观看| 欧美性猛交xxxxx免费看| 黑森林av导航| 午夜精品久久| 成人网在线免费观看| 91视频在线观看| 一本到一区二区三区| 午夜剧场免费看| 一区福利视频| 成人自拍视频网站| 91小视频xxxx网站在线| 9191久久久久久久久久久| 美女100%露胸无遮挡| 性感少妇一区| 欧美日韩亚洲一区二区三区在线观看| av老司机在线观看| 精品国产免费久久| 国产第一页在线播放| 国产成人综合在线| 人妻互换免费中文字幕| 欧美电影院免费观看| 欧美超级乱淫片喷水| 国产精品爽爽久久| 亚洲男人天堂一区| 韩国三级在线播放| 91成人精品视频| 亚洲最大av网站| 18加网站在线| 精品播放一区二区| 国产无精乱码一区二区三区| 豆国产96在线|亚洲| 又大又硬又爽免费视频| 人人网欧美视频| 日本精品视频在线| 成年人免费在线视频| 欧美日韩激情一区| 久久精品www| 91在线看国产| 黄色片在线免费| 欧美freesextv| 91免费看蜜桃| bbw在线视频| 亚洲第一级黄色片| 五月天激情四射| 国产日韩高清在线| 色一情一区二区三区| 99久久综合| 国产精品视频免费观看| 午夜av不卡| 丝袜美腿精品国产二区| 国产高清在线免费| 午夜精品福利一区二区蜜股av| 亚洲午夜久久久久久久久红桃| 日韩电影在线观看网站| 中文字幕一区二区三区有限公司| 麻豆国产一区| 日本精品久久久久久久| 免费av不卡| 欧美精品一区二| 日韩精品成人免费观看视频| 国产精品久久久久一区| 人妻 丝袜美腿 中文字幕| 久久在线精品| 日韩成人午夜影院| 最新国产一区| 亚洲一区二区在线播放| yellow在线观看网址| 亚洲女人被黑人巨大进入| 国产乱码精品一区二区| 精品色蜜蜜精品视频在线观看| 亚洲一级黄色录像| 国产91精品一区二区麻豆亚洲| 不要播放器的av网站| 欧美jjzz| 亚洲精品国产一区| 极品束缚调教一区二区网站| 国产精品色婷婷视频| 国产黄色大片在线观看| 亚洲一二三在线| 天天爱天天干天天操| 7878成人国产在线观看| 亚洲第一在线播放| 亚洲国产sm捆绑调教视频 | 国产成人小视频在线观看| 91国内在线| 中文国产成人精品| 天天射天天操天天干| 91精品久久久久久蜜臀| 日韩精品在线一区二区三区| 午夜国产精品一区| 69xx绿帽三人行| 国产精品久久久久影院色老大| 亚洲成人日韩在线| 成人ar影院免费观看视频| 熟妇无码乱子成人精品| 麻豆传媒一区二区三区| 国产精品乱码久久久久| 亚洲欧美日本日韩| 日韩欧美不卡在线| 国产一区美女| 2021国产视频| 7777久久香蕉成人影院| 亚洲一区尤物| 日韩在线观看| 一区二区三区四区五区精品| 九九久久婷婷| 免费国产一区二区| 图片婷婷一区| 久久综合久久久| 久久久久高潮毛片免费全部播放| 99久久久精品免费观看国产 | 午夜激情电影在线播放| 97视频在线观看网址| 国产啊啊啊视频在线观看| 久久91精品国产| 亚洲电影视频在线| 色综合91久久精品中文字幕| www.久久ai| 九九热这里只有在线精品视| 老司机在线看片网av| 久久精品美女视频网站| 思思99re6国产在线播放| 日韩在线视频国产| 国产秀色在线www免费观看| 精品久久国产精品| 成人毛片av在线| 久久99青青精品免费观看| 欧美人与性动交α欧美精品济南到 | 欧亚在线中文字幕免费| 欧美一区二区视频97| www.日韩| 国产精品久久视频| 日日夜夜一区| 国产精品成人一区二区三区| 国产香蕉精品| 亚洲不卡一区二区三区| 日韩欧美亚洲天堂| 美女国产一区| 午夜免费高清视频| 国模无码大尺度一区二区三区| 伊人影院综合在线| 国产激情一区二区三区四区| 中文字幕一二三| 91日韩精品一区| 亚洲精品91在线| 亚洲人成精品久久久久久| 九九热国产精品视频| 午夜欧美在线一二页| 69xxxx国产| 欧美一区二区性放荡片| 亚洲精品久久久久久无码色欲四季| 亚洲国产成人久久综合| 韩日视频在线| 欧美噜噜久久久xxx| 欧美在线极品| 亚洲精品免费一区二区三区| 久久久久观看| 中国一区二区三区| 亚洲毛片在线| xxww在线观看| 99re这里只有精品首页| 神马久久久久久久久久久| 亚洲精品高清在线| 中文字幕第四页| 久久久综合网| 91精品视频在线看| 日韩免费高清视频网站| 牛人盗摄一区二区三区视频| 911精品美国片911久久久| 国产精品后入内射日本在线观看| 免费观看日韩电影| 成人欧美精品一区二区| 日本一区二区视频在线| 欧美片一区二区| 欧美在线视频日韩| 日韩在线视频免费| 最近2019年手机中文字幕| 51av在线| 91丝袜美腿美女视频网站| 亚洲影院天堂中文av色| 蜜桃网站在线观看| 日本在线不卡一区| 欲求不满的岳中文字幕| 亚洲视频你懂的| 日本中文字幕在线观看视频| 日韩精品一区二区三区中文精品| 国产小视频免费在线观看| 久久久久久久一区二区| 99精品视频在线免费播放| 欧美一区2区三区4区公司二百| 午夜电影亚洲| 污污视频在线免费| 欧美国产激情二区三区| 91国产丝袜播放在线| 日韩欧美中文字幕精品| 日本高清视频在线播放| 国产日韩欧美高清| 少妇视频在线播放| 精品久久久在线观看| 成人高潮片免费视频| 久久精品免费播放| 欧美亚洲二区| 日韩中文字幕av在线| 国产精品久久国产愉拍| 影音先锋资源av| 一区二区三区在线影院| 国产一区二区波多野结衣| 国产亚洲成精品久久| 97成人资源| 麻豆av一区二区| 亚洲欧美日韩国产综合精品二区| 波多野结衣办公室双飞 | 国产主播在线观看| 制服丝袜亚洲网站| 精品麻豆一区二区三区| 国产日韩中文在线| 99精品国产一区二区三区| 欧美伦理片在线观看| 中文幕一区二区三区久久蜜桃| 欧美超碰在线观看| 亚洲性猛交xxxxwww| 朝桐光一区二区| 日本在线视频一区| 美女视频一区二区三区| 激情五月激情综合| 欧美美女激情18p| 操你啦视频在线| 99电影网电视剧在线观看| 四虎影院观看视频在线观看 | 波多野结衣在线观看视频| 亚洲欧美自拍一区| 亚洲wwww| 一区二区三区国| 国产麻豆精品视频| 久久精品视频6| 国产丝袜精品第一页| 欧美理论影院| 亚洲在线不卡| 国产成人啪午夜精品网站男同| 久久久久久久九九九九| 亚洲国产精品久久久久秋霞不卡| 瑟瑟视频在线看| 日韩欧美亚洲日产国产| 国内精品伊人久久久久av影院| 澳门黄色一级片| 日韩av在线播放资源| 精品视频一区二区三区四区五区| 在线码字幕一区| 国产69精品久久久久毛片| 五月婷婷亚洲综合| 中文字幕不卡av| 成人av影音| 国内自拍视频网| 一区二区三区日韩精品| 日韩精品一二| 成人免费淫片aa视频免费| 亚洲另类视频| youjizz亚洲女人| 精品对白一区国产伦| 欧美va在线| 久久这里只有精品8| 久久久蜜桃精品| 国产成人三级在线播放| 欧美中文在线视频| 亚洲成人精选| 免费看污黄网站在线观看| 在线成人免费视频| 熟女人妻一区二区三区免费看| hitomi一区二区三区精品| 中文字幕av免费观看| 国内精品久久久久久中文字幕| 日韩精品影视| 久久久久成人精品无码中文字幕| 欧美三级电影在线看| 麻豆视频在线看|