精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲国产成人在线播放| 午夜欧美视频在线观看| 成人国产精品免费视频| 小泽玛利亚一区| 精品国产亚洲一区二区三区在线 | 香蕉人妻av久久久久天天| 1024成人| 在线播放日韩精品| 男人操女人下面视频| 激情影院在线| 91原创在线视频| 国产日韩在线看| 日本少妇久久久| 日本高清免费电影一区| 欧美成人一区二区三区在线观看| 青娱乐自拍偷拍| 91看片在线观看| 成人免费毛片app| 国产精品久久久久7777婷婷| 国产一二三四区| 亚洲动漫在线观看| 4438x成人网最大色成网站| 日韩成人三级视频| 1024国产在线| www.亚洲在线| 91免费高清视频| 日本在线播放视频| 欧美精品综合| 伊人青青综合网站| 精品国产人妻一区二区三区| 欧美videos粗暴| 黑人精品xxx一区一二区| 综合网五月天| 国产精品视频一区二区久久| 成人精品gif动图一区| 国产精品稀缺呦系列在线| 国产在线观看免费av| 色999国产精品| 亚洲第一网站免费视频| 日本77777| 桃子视频成人app| 五月天激情小说综合| 99久久久无码国产精品性色戒| 日韩美女一级视频| 国产福利91精品一区二区三区| 国产精品美女网站| 中文字幕在线播| 好吊一区二区三区| 久久精品免费电影| 人妻熟人中文字幕一区二区| 亚洲电影男人天堂| 日韩精品免费一线在线观看| youjizz.com日本| 欧美视频精品全部免费观看| 欧美色偷偷大香| 久久国产色av免费观看| 美女在线视频免费| 亚洲成人自拍偷拍| 亚洲乱码日产精品bd在线观看| 黄色网页在线播放| 国产精品理论在线观看| 日本一区二区三区四区在线观看| 无码精品黑人一区二区三区| 99国产精品国产精品毛片| 国产精品毛片一区视频| 蜜桃av中文字幕| 懂色av一区二区三区蜜臀| 5g国产欧美日韩视频| 国产精品一区二区黑人巨大| 国产自产视频一区二区三区| 91免费精品国偷自产在线| 国产又大又粗又长| 国产综合成人久久大片91| 91精品国产一区二区三区动漫| 国产男女裸体做爰爽爽| 国产电影一区在线| 国产精品一级久久久| 色综合久久久久久| ww久久中文字幕| 日韩av电影在线观看| 91在线视频免费看| 亚洲色大成网站www久久九九| 国产一二三四五| 91在线中字| 亚洲成a人片综合在线| 91视频 -- 69xx| 英国三级经典在线观看| 在线观看日韩电影| 中文字幕成人免费视频| 亚洲免费一区三区| 亚洲国产精品福利| 小早川怜子久久精品中文字幕| 欧美综合一区| 欧美xxxx14xxxxx性爽| 久久精品久久国产| 玖玖玖国产精品| 91在线免费观看网站| 亚洲第一视频在线| 久久蜜臀中文字幕| 永久久久久久| а√在线天堂官网| 欧美三级视频在线观看| 国产ts在线观看| 色综合综合网| 欧美日韩福利电影| 欧美一级淫片免费视频黄| 久久精品国产999大香线蕉| 91一区二区三区| 可以在线观看的av| 亚洲日本在线观看| 能在线观看的av| 高清国产一区二区三区四区五区| 亚洲国产精品一区二区久| 91导航在线观看| 亚洲国产日韩在线| 成人av资源在线播放| 水中色av综合| 亚洲精品伦理在线| 国内自拍视频网| 国产66精品| 日韩在线视频一区| 亚洲影院在线播放| 国产成人精品www牛牛影视| 欧美一区二区三区四区夜夜大片 | 欧美俄罗斯性视频| 国产精品成人无码| 99精品视频在线免费观看| 一区二区三区不卡在线| 一二三四视频在线中文| 欧美成人伊人久久综合网| 久久午夜精品视频| 亚洲欧美日韩视频二区| 99久久国产免费免费| 亚洲乱亚洲乱妇| 日本高清视频一区二区| 超碰caoprom| 欧美三级视频| 91丨九色丨国产在线| 国产资源在线播放| 午夜精品久久一牛影视| 久久黄色一级视频| 国产精品成人一区二区不卡| 国产精品白嫩美女在线观看| 天堂av在线免费观看| 亚洲一区二区三区自拍| av在线网站免费观看| 三级电影一区| 国产精自产拍久久久久久蜜| 成人在线高清视频| 91久久一区二区| 性色av蜜臀av色欲av| 亚洲日本黄色| 国产伦精品一区| 欧美性爽视频| 日韩午夜激情免费电影| 久久国产精品国语对白| 国内欧美视频一区二区| 亚洲永久激情精品| 国产成人午夜性a一级毛片| 亚洲最新在线视频| 日本成人一级片| 久久久99久久精品欧美| 99久久激情视频| 欧美亚洲激情| 国产精品一区久久| 麻豆视频在线免费观看| 欧美一区二区在线免费观看| 久久爱一区二区| 国产精品综合网| 9色porny| 日韩电影在线观看完整免费观看| 97成人在线视频| 日韩a在线看| 欧美专区在线观看一区| 我想看黄色大片| 久久精品国产第一区二区三区| 国产又粗又爽又黄的视频| 久久久久九九精品影院| 欧美激情视频一区| 婷婷色在线观看| 日韩欧美成人精品| 麻豆视频免费在线播放| 国产一区二区三区香蕉| a天堂资源在线观看| 黑色丝袜福利片av久久| 日韩av观看网址| av网站在线免费观看| 日韩一卡二卡三卡| 亚洲精品国产精品乱码| 日本一区二区综合亚洲| 在线免费观看视频黄| 91成人看片| 国产偷国产偷亚洲高清97cao| 亚洲第一av| 色偷偷综合社区| 国产欧美日韩成人| 婷婷一区二区三区| jizz日本在线播放| 国产不卡视频在线观看| 一本大道熟女人妻中文字幕在线 | 欧美日韩国产一二| 深夜日韩欧美| 97碰碰碰免费色视频| 国产综合视频一区二区三区免费| 91精品国产高清一区二区三区| 日本熟妇一区二区| 国产精品福利影院| 中文字幕一区三区久久女搜查官| 久久成人麻豆午夜电影| 男女超爽视频免费播放| 久久婷婷蜜乳一本欲蜜臀| 国产精品日韩一区二区免费视频| 成人av免费电影网站| 欧美另类极品videosbest最新版本 | 色喇叭免费久久综合| 国产精品一区二区免费| jizz欧美| 国语自产精品视频在线看抢先版图片 | 国产又黄又粗的视频| 国产不卡视频在线播放| 日本黄大片一区二区三区| 最新国产乱人伦偷精品免费网站| 亚洲精蜜桃久在线| 日韩欧美影院| aaa级精品久久久国产片| 欧美va视频| 91精品国产沙发| av在线麻豆| 日韩中文字幕视频在线观看| 男女污污视频在线观看| 亚洲成人黄色网址| 国产精品视频无码| 欧美亚洲禁片免费| 波多野结衣 久久| 亚洲v精品v日韩v欧美v专区| 日本aⅴ在线观看| 中文无字幕一区二区三区| 久久久久国产精品区片区无码| 国产成人午夜视频| 国产5g成人5g天天爽| 乱一区二区av| 国语对白做受xxxxx在线中国| 中文日韩欧美| www.国产在线视频| 欧美日韩岛国| 欧美一级爱爱视频| 欧美日本不卡| 欧洲精品视频在线| 中文字幕一区二区三三| 亚洲一区尤物| 97精品一区| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 教室别恋欧美无删减版| 欧美日本国产精品| 亚洲国产网址| 欧美午夜精品理论片a级大开眼界| 欧美日韩看看2015永久免费| 精品国产日本| 日韩有码中文字幕在线| 久久er99热精品一区二区三区 | 欧美一区二区人人喊爽| 国产精品一级二级| 欧美日韩午夜在线视频| 在线观看毛片网站| 欧美人伦禁忌dvd放荡欲情| 在线视频 91| 欧美一区二区视频免费观看| 国产日韩免费视频| 日韩一区二区影院| 国精产品一品二品国精品69xx| 精品国产免费久久| 五月婷婷在线播放| 亚洲视频视频在线| 幼a在线观看| 美女精品久久久| 成av人片在线观看www| 日本成人在线视频网址| 欧美色片在线观看| 成人免费淫片视频软件| 韩国三级成人在线| 国产在线精品一区二区三区| 九九热爱视频精品视频| 一级做a爰片久久| 欧美日韩国产综合网| 欧美久久久久久久久久久久久| 久久精品日产第一区二区| 天天色综合天天色| 国产精品一二三| 亚洲天堂资源在线| 国产精品人成在线观看免费 | 五月天福利视频| 一区二区欧美久久| 老司机免费在线视频| 国产做受高潮69| 深夜视频一区二区| caoporen国产精品| 免费成人高清在线视频theav| 亚洲图片欧洲图片日韩av| 欧美日韩国产高清| 一区二区成人网| 成人动漫av在线| 女人黄色一级片| 亚洲一区二区三区四区五区黄| 无码人妻久久一区二区三区 | 国产精品亲子伦对白| 欧美片一区二区| 91精品91久久久中77777| 午夜精品无码一区二区三区| 国产一区二区三区三区在线观看| 国产激情在线视频| 日韩美女在线播放| 亚洲三区欧美一区国产二区| 秋霞在线观看一区二区三区| 伊人久久亚洲美女图片| 成年网站在线播放| av不卡免费在线观看| 永久久久久久久| 日本韩国欧美国产| 搡老岳熟女国产熟妇| 久久久97精品| 主播大秀视频在线观看一区二区| 国产精品免费一区二区三区四区| 希岛爱理av一区二区三区| 成年人视频网站免费观看| 国产精品亚洲人在线观看| 特级西西www444人体聚色| 亚洲成人手机在线| 99视频免费看| 在线看日韩欧美| 在线观看特色大片免费视频| 99国产高清| 久久久久久久久国产一区| 日本成人中文字幕在线| 99久久精品国产一区| 久草视频免费在线播放| 制服丝袜亚洲色图| 川上优的av在线一区二区| 26uuu另类亚洲欧美日本一 | 欧美一级高清大全免费观看| 1024国产在线| 国产精品欧美一区二区| 国产免费播放一区二区| 久久免费视频3| av欧美精品.com| 日韩免费视频网站| 欧美大片国产精品| 男女视频在线| 国产另类自拍| 一本一本久久| 欧美xxxxx精品| 激情亚洲一区二区三区四区| 开心激情综合网| 久久久久久欧美| 97一区二区国产好的精华液| 欧美这里只有精品| 成人av在线观| 精品美女久久久久| 国产丝袜一区视频在线观看 | 欧美自拍大量在线观看| 欧美日韩一区二区三区不卡视频| 99在线精品免费视频| av男人天堂一区| 美女又爽又黄免费视频| 精品视频在线播放免| 午夜无码国产理论在线| 日韩国产一区久久| 麻豆91在线播放| 性欧美videos| 精品久久久久久亚洲综合网| 91黄页在线观看| 欧美日韩一区二区视频在线| 视频一区免费在线观看| 亚洲色图日韩精品| 欧美精品色综合| 日本欧美电影在线观看| 国产在线一区二区三区欧美| 亚洲在线网站| 天天舔天天操天天干| 日韩一区二区电影网| av资源网在线播放| 欧美日韩一区二| 九色|91porny| 久久精品久久国产| 国产一区二区三区视频在线观看| 亚洲成人高清| 亚洲理论电影在线观看| 91老司机福利 在线| 中文字幕永久免费视频| 精品自在线视频| 欧美三级电影在线| 亚洲一区在线不卡| 亚洲综合免费观看高清完整版在线| 神马午夜一区二区| 国产精品久久久久一区二区| 一区二区蜜桃| 日本黄色网址大全| 91麻豆精品国产91久久久久久久久 | 国产精品99久久久久久大便| 国产a区久久久| 日韩不卡高清视频|