日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实现编辑功能有哪几个action_Web 应用的撤销重做实现

發布時間:2023/12/1 编程问答 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实现编辑功能有哪几个action_Web 应用的撤销重做实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景

前不久,我參與開發了團隊中的一個 web 應用,其中的一個頁面操作如下圖所示:

GIF

這個制作間頁面有著類似 PPT 的交互:從左側的工具欄中選擇元素放入中間的畫布、在畫布中可以刪除、操作(拖動、縮放、旋轉等)這些元素。

在這個編輯過程中,讓用戶能夠進行操作的撤銷、重做會提高編輯效率,大大提高用戶體驗,而本文要講的正是在這個功能實現中的探索與總結。

功能分析

用戶的一系列操作會改變頁面的狀態:

在進行了某個操作后,用戶有能力回到之前的某個狀態,即撤銷:

在撤銷某個操作后,用戶有能力再次恢復這個操作,即重做:

當頁面處于某個歷史狀態時,這時用戶進行了某個操作后,這個狀態后面的狀態會被拋棄,此時產生一個新的狀態分支:

下面,開始實現這些邏輯。

功能初實現

基于以上的分析,實現撤銷重做功能需要實現:

  • 保存用戶的每個操作;
  • 針對每個操作設計與之對應的一個撤銷邏輯;
  • 實現撤銷重做的邏輯;

第一步:數據化每一個操作

操作造成的狀態改變可以用語言來描述,如下圖,頁面上有一個絕對定位的 div 和 一個 button,每次點擊 button 會讓 div 向右移動 10px。這個點擊操作可以被描述為:div 的樣式屬性 left 增加 10px。

顯然,JavaScript 并不認識這樣的描述,需要將這份描述翻譯成 JavaScript 認識的語言:

const action = {name: 'changePosition',params: {target: 'left',value: 10,}, };

上面代碼中使用變量 name 表示操作具體的名稱,params 存儲了該操作的具體數據。不過 JavaScript 目前仍然不知道如何使用這個它,還需要一個執行函數來指定如何使用上面的數據:

function changePosition(data, params) {const { property, distance } = params;data = { ...data };data[property] += distance;return data; }

其中,data 為應用的狀態數據,params 為 action.params。

第二步:編寫操作對應的撤銷邏輯

撤銷函數中結構與執行函數類似,也應該能獲取到 data 和 action:

function changePositionUndo(data, params) {const { property, distance } = params;data = { ...data };data[property] -= distance;return data; }

所以,action 的設計應當同時滿足執行函數和撤銷函數的邏輯。

第三步:撤銷、重做處理

上述的 action、執行函數、撤銷函數三者作為一個整體共同描述了一個操作,所以存儲時三者都要保存下來。

這里基于約定進行綁定:執行函數名等于操作的 name ,撤銷函數名等于 name + 'Undo',這樣就只需要存儲 action,隱式地也存儲了執行函數和撤銷函數。

編寫一個全局模塊存放函數、狀態等:src/manager.js:

const functions = {changePosition(state, params) {...},changePositionUndo(state, params) {...} };export default {data: {},actions: [],undoActions: [],getFunction(name) {return functions[name];} };

那么,點擊按鈕會產生一個新的操作,我們需要做的事情有三個:

  • 存儲操作的 action;
  • 執行該操作;
  • 如果處于歷史節點,需要產生新的操作分支;
import manager from 'src/manager.js';buttonElem.addEventListener('click', () => {manager.actions.push({name: 'changePosition',params: { target: 'left', value: 10 }});const execFn = manager.getFunction(action.name);manager.data = execFn(manager.data, action.params);if (manager.undoActions.length) {manager.undoActions = [];} });

其中,undoActions 存放的是撤銷的操作的 action,這里清空表示拋棄當前節點以后的操作。將 action 存進 manager.actions ,這樣需要撤銷操作的時候,直接取出 manager.actions 中最后一個 action,找到對應撤銷函數并執行即可。

import manager from 'src/manager.js';function undo() {const action = manager.actions.pop();const undoFn = manager.getFunction(`${action.name}Undo`);manager.data = undoFn(manager.data, action.params);manager.undoActions.push(action); }

需要重做的時候,取出 manager.undoActions 中最后的 action,找到對應執行函數并執行。

import manager from 'src/manager.js';function redo() {const action = manager.undoActions.pop();const execFn = manager.getFunction(action.name);manager.data = execFn(manager.data, action.params); }

模式優化:命令模式

以上代碼可以說已經基本滿足了功能需求,但是在我看來仍然存在一些問題:

  • 管理分散:某個操作的 action、執行函數、撤銷函數分開管理。當項目越來越大時將會維護困難;
  • 職責不清:并沒有明確規定執行函數、撤銷函數、狀態的改變該交給業務組件執行還是給全局管理者執行,這不利于組件和操作的復用;

想有效地解決以上問題,需要找到一個合適的新模式來組織代碼,我選擇了命令模式。

命令模式簡介

簡單來說,命令模式將方法、數據都封裝到單一的對象中,對調用方與執行方進行解耦,達到職責分離的目的。

以顧客在餐廳吃飯為例子:

  • 顧客點餐時,選擇想吃的菜,提交一份點餐單
  • 廚師收到這份點餐單后根據內容做菜

期間,顧客和廚師之間并沒有見面交談,而是通過一份點餐單來形成聯系,這份點餐單就是一個命令對象,這樣的交互模式就是命令模式。

action + 執行函數 + 撤銷函數 = 操作命令對象

為了解決管理分散的問題,可以把一個操作的 action、執行函數、撤銷函數作為一個整體封裝成一個命令對象:

class ChangePositionCommand {constructor(property, distance) {this.property = property; // 如:'left'this.distance = distance; // 如: 10}execute(state) {const newState = { ...state }newState[this.property] += this.distance;return newState;}undo(state) {const newState = { ...state }newState[this.property] -= this.distance;return newState;} }

業務組件只關心命令對象的生成和發送

在狀態數據處理過程中往往伴隨著一些副作用,這些與數據耦合的邏輯會大大降低組件的復用性。因此,業務組件不用關心數據的修改過程,而是專注自己的職責:生成操作命令對象并發送給狀態管理者。

import manager from 'src/manager'; import { ChangePositionCommand } from 'src/commands';buttonElem.addEventListener('click', () => {const command = new ChangePositionCommand('left', 10);manager.addCommand(command); });

狀態管理者只關心數據變更和操作命令對象治理

class Manager {constructor(initialState) {this.state = initialState;this.commands = [];this.undoCommands = [];}addCommand(command) {this.state = command.execute(this.state);this.commands.push(command);this.undoCommands = []; // 產生新分支}undo() {const command = this.commands.pop();this.state = command.undo(this.state);this.undoCommands.push(command);}redo() {const command = this.undoCommands.pop();this.state = command.execute(this.state);this.commands.push(command);} }export default new Manger({});

這樣的模式已經可以讓項目的代碼變得健壯,看起來已經很不錯了,但是能不能更好呢?

模式進階:數據快照式

命令模式要求開發者針對每一個操作都要額外開發一個撤銷函數,這無疑是麻煩的。接下來要介紹的數據快照式就是要改進這個缺點。

數據快照式通過保存每次操作后的數據快照,然后在撤銷重做的時候通過歷史快照恢復頁面,模式模型如下:

要使用這種模式是有要求的:

  • 應用的狀態數據需要集中管理,不應該分散在各個組件;
  • 數據更改流程中有統一的地方可以做數據快照存儲;

這些要求不難理解,既然要產生數據快照,集中管理才會更加便利。基于這些要求,我選擇了市面上較為流行的 Redux 來作為狀態管理器。

狀態數據結構設計

按照上面的模型圖,Redux 的 state 可以設計成:

const state = {timeline: [],current: -1,limit: 1000, };

代碼中,各個屬性的含義為:

  • timeline:存儲數據快照的數組;
  • current:當前數據快照的指針,為 timeline 的索引;
  • limit:規定了 timeline 的最大長度,防止存儲的數據量過大;

數據快照生成的方式

假設應用初始的狀態數據為:

const data = { left: 100 }; const state = {timeline: [data],current: 0,limit: 1000, };

進行了某個操作后,left 加 100,有些新手可能會直接這么做:

cont newData = data; newData.left += 100; state.timeline.push(newData); state.current += 1;

這顯然是錯誤的,因為 JavaScript 的對象是引用類型,變量名只是保存了它們的引用,真正的數據存放在堆內存中,所以 data 和 newData 共享一份數據,所以歷史數據和當前數據都會發生變化。

方式一:使用深拷貝

深拷貝的實現最簡單的方法就是使用 JSON 對象的原生方法:

const newData = JSON.parse(JSON.stringify(data));

或者,借助一些工具比如 lodash:

const newData = lodash.cloneDeep(data);

不過,深拷貝可能出現循環引用而引起的死循環問題,而且,深拷貝會拷貝每一個節點,這樣的方式帶來了無謂的性能損耗。

方式二:構建不可變數據

假設有個對象如下,需要修改第一個 component 的 width 為 200:

const state = {components: [{ type: 'rect', width: 100, height: 100 },{ type: 'triangle': width: 100, height: 50}] }

目標屬性的在對象樹中的路徑為:['components', 0, 'width'],這個路徑上有些數據是引用類型,為了不造成共享數據的變化,這個引用類型要先變成一個新的引用類型,如下:

const newState = { ...state }; newState.components = [...state.components]; newState.components[0] = { ...state.components[0] };

這時你就可以放心修改目標值了:

newState.components[0].width = 200; console.log(newState.components[0].width, state.components[0].width); // 200, 100

這樣的方式只修改了目標屬性節點的路徑上的引用類型值,其他分支上的值是不變的,這樣節省了不少內存。為了避免每次都一層一層去修改,可以將這個處理封裝成一個工具函數:

const newState = setIn(state, ['components', 0, 'width'], 200)

setIn 源碼:https://github.com/cwajs/cwa-immutable/blob/master/src/setIn.js

數據快照處理邏輯

進行某個操作,reducer 代碼為:

function operationReducer(state, action) {state = { ...state };const { current, limit } = state;const newData = ...; // 省略過程state.timeline = state.timeline.slice(0, current + 1);state.timeline.push(newData);state.timeline = state.timeline.slice(-limit);state.current = state.timeline.length - 1;return state; }

有兩個地方需要解釋:

  • timline.slice(0, current + 1):這個操作是前文提到的,進行新操作時,應該拋棄當前節點后的操作,產生一個新的操作分支;
  • timline.slice(-limit):表示只保留最近的 limit 個數據快照;

使用高階 reducer

在實際項目中,通常會使用 combineReducers 來模塊化 reducer,這種情況下,在每個 reducer 中都要重復處理以上的邏輯。這時候就可以使用高階 reducer 函數來抽取公用邏輯:

const highOrderReducer = (reducer) => {return (state, action) => {state = { ...state };const { timeline, current, limit } = state;// 執行真實的業務reducerconst newState = reducer(timeline[current], action);// timeline處理state.timeline = timeline.slice(0, current + 1);state.timeline.push(newState);state.timeline = state.timeline.slice(-limit);state.current = state.timeline.length - 1;return state;}; }// 真實的業務reducer function reducer(state, action) {switch (action.type) {case 'xxx':newState = ...;return newState;} }const store = createStore(highOrderReducer(reducer), initialState);

這個高階 reducer 使用 const newState = reducer(timeline[current], action) 來對業務 reducer 隱藏數據快照隊列的數據結構,使得業務 reducer 對撤銷重做邏輯無感知,實現功能可拔插。

增強高階 reducer,加入撤銷重做邏輯

撤銷重做時也應該遵循 Redux 的數據修改方式使用 store.dispatch,為:

  • store.dispatch({ type: 'undo' }) ;
  • store.dispatch({ type: 'redo' });

這兩種 action 不應該進入到業務 reducer,需要進行攔截:

const highOrderReducer = (reducer) => {return (state, action) => {// 進行 undo、redo 的攔截if (action.type === 'undo') {return {...state,current: Math.max(0, state.current - 1),};}// 進行 undo、redo 的攔截if (action.type === 'redo') {return {...state,current: Math.min(state.timeline.length - 1, state.current + 1),};}state = { ...state };const { timeline, current, limit } = state;const newState = reducer(timeline[current], action);state.timeline = timeline.slice(0, current + 1);state.timeline.push(newState);state.timeline = state.timeline.slice(-limit);state.current = state.timeline.length - 1;return state;}; }

使用 react-redux 在組件中獲取狀態

我在項目中使用的是 React 和 react-redux,由于 state 的數據結構發生了變化,所以在組件中獲取狀態的寫法也要相應作出調整:

import React from 'react'; import { connect } from 'react-redux';function mapStateToProps(state) {const currentState = state.timeline[state.current];return {}; }class SomeComponent extends React.Component {}export default connect(mapStateToProps)(SomeComponent);

然而,這樣的寫法讓組件感知到了撤銷重做的數據結構,與上面所說的功能可拔插明顯相悖,我通過重寫 store.getState 方法來解決:

const store = createStore(reducer, initialState);const originGetState = store.getState.bind(store);store.getState = (...args) => {const state = originGetState(...args);return state.timeline[state.current]; }

總結

本文圍繞撤銷重做功能實現的講解到此結束,在實現該功能后引入了命令模式來使得代碼結構更加健壯,最后改進成數據快照式,從而讓整個應用架構更加優雅。

參考資料

  • 《JavaScript設計模式》Addy Osmani著
  • Redux Documentation
本文發布自 網易云音樂前端團隊,文章未經授權禁止任何形式的轉載。我們對人才饑渴難耐,快來 加入我們!

總結

以上是生活随笔為你收集整理的实现编辑功能有哪几个action_Web 应用的撤销重做实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

在线观看视频黄色 | 天天干夜夜 | 久久狠狠干 | 夜夜躁日日躁狠狠久久av | 欧美一区影院 | 国产精品婷婷午夜在线观看 | 最近日本韩国中文字幕 | 激情电影影院 | 国产在线精品一区二区不卡了 | 欧美日韩伦理在线 | 五月婷香 | 婷婷中文在线 | 亚洲人成人在线 | 久艹视频在线免费观看 | 91视频黄色| 国产99久久久国产精品成人免费 | 久久精品7| 在线免费观看国产视频 | 久久久免费毛片 | 欧美日韩二三区 | 五月天久久婷婷 | 99热精品在线 | 日日爽天天爽 | 久久毛片视频 | 国产一二区精品 | 欧美国产日韩在线视频 | 精品999在线| 毛片网站免费在线观看 | 国产精品久一 | 97人人澡人人添人人爽超碰 | 男女视频国产 | 国产69精品久久久久99尤 | 国产精品视频不卡 | 免费a视频| 黄色成年网站 | 色狠狠久久av五月综合 | 天天性天天草 | 最新av在线播放 | 日韩av一卡二卡三卡 | 天天干天天搞天天射 | 日韩精品中文字幕av | 永久免费毛片在线观看 | 成年人视频在线免费播放 | 婷婷色五 | 97超碰在线播放 | 久久视频这里只有精品 | 成人午夜影院在线观看 | 欧美成人h版| 一级性av | 人人插人人费 | 99热精品国产一区二区在线观看 | 成人久久18免费网站图片 | www.夜夜操.com | 91九色精品女同系列 | 一级黄毛片 | 97国产情侣爱久久免费观看 | 亚洲免费成人 | 制服丝袜欧美 | 美女啪啪图片 | 日韩乱码中文字幕 | 亚洲免费一级 | 免费毛片一区二区三区久久久 | 99爱爱| 欧美一级欧美一级 | 99热国产在线中文 | 国产一区在线免费观看 | 久久人人射 | 亚洲va在线va天堂 | 97超碰国产精品女人人人爽 | 国产精品美女久久 | 国产精品精品久久久久久 | 色婷婷av一区 | 中文字幕中文字幕中文字幕 | av一级一片 | 日韩精品一区二区三区三炮视频 | 丁香花在线视频观看免费 | 精品国产aⅴ麻豆 | 狠狠操欧美 | 少妇按摩av | 午夜精品久久久久久久99水蜜桃 | 在线免费黄色av | 色999视频 | 日韩精品第1页 | 中文久久精品 | 婷婷电影在线观看 | 国产综合香蕉五月婷在线 | 国产精品视频免费 | 国产精品自在线 | 国产69精品久久app免费版 | 国产资源在线观看 | 特级毛片网站 | 97色婷婷成人综合在线观看 | 高潮毛片无遮挡高清免费 | 亚洲免费一级 | 亚洲成人第一区 | 日韩在线不卡av | 久久蜜臀av | 日本韩国在线不卡 | 精品久久久影院 | av中文字幕电影 | 欧美日韩午夜在线 | 91视频91蝌蚪 | 98涩涩国产露脸精品国产网 | 国产 一区二区三区 在线 | 日韩三级视频在线观看 | 99色婷婷 | 精品久久久精品 | 国产亚洲视频在线 | 五月天亚洲精品 | 久久99国产精品自在自在app | 日韩在线高清免费视频 | 激情久久小说 | 美女禁18| www.色午夜.com | 日韩理论电影在线观看 | 国产三级午夜理伦三级 | 久草资源在线 | 日韩欧美在线视频一区二区 | 69欧美视频 | 日韩久久视频 | 五月婷婷视频在线 | 人人射网站 | 婷婷深爱网 | 人人爽人人爽 | 激情小说 五月 | 国产成人精品不卡 | 在线a视频免费观看 | 久久久污| 亚洲高清在线观看视频 | 国产福利a | 狠狠操夜夜操 | 免费h漫在线观看 | 国产美女无遮挡永久免费 | 久久精品一二区 | 狠狠躁夜夜躁人人爽视频 | 久草在线欧美 | 亚洲美女在线国产 | 97在线精品 | 中文字幕在线免费看 | 亚洲成aⅴ人片久久青草影院 | 黄在线 | 精品日韩视频 | 久久公开视频 | 色婷婷视频在线 | 美国人与动物xxxx | 成人黄色电影在线观看 | 午夜国产福利视频 | 国产精品黑丝在线观看 | 国产精品99久久99久久久二8 | 午夜av片 | 日日日日| 国产视频精品免费 | 亚洲精品国产拍在线 | 国产一级性生活 | 日本特黄一级 | 18岁免费看片 | 免费看污片 | 国产中文自拍 | 国产成人精品a | 女人18精品一区二区三区 | 三级动态视频在线观看 | 国产亚洲欧美一区 | 精品久久福利 | 国产欧美综合视频 | 久草在线免费看视频 | 亚洲午夜久久久久久久久久久 | 国产精品成人久久久 | 亚洲无吗av| 亚洲片在线观看 | 色激情五月 | 午夜美女av| 欧美性生活免费 | 亚洲精品久久久久中文字幕二区 | 久久五月激情 | 成人a视频 | 亚洲色五月 | 成人免费一区二区三区在线观看 | 亚洲天堂网视频在线观看 | 精品在线视频一区二区三区 | 成人黄色大片网站 | 日日夜夜婷婷 | 国产精品99久久久久 | 在线国产欧美 | 日本精品二区 | 丁香电影小说免费视频观看 | 久久天天躁夜夜躁狠狠躁2022 | 狠狠精品 | av电影在线免费观看 | 91av99| 久草久热 | 国产精品久久精品 | 久久免费国产视频 | 月下香电影 | 91精品久久香蕉国产线看观看 | 久久精品国产精品 | 在线观看中文字幕一区 | 国产原创中文在线 | 99在线视频观看 | 中文字幕日韩无 | 九九热在线视频 | 国产短视频在线播放 | 在线91精品 | 精品久久久久久久久久久久久久久久 | 日韩午夜精品 | 欧美日韩在线视频观看 | 麻豆久久久久久久 | 欧美在线aaa | 亚洲精品一区二区三区新线路 | 欧美一区二区在线 | 国内偷拍精品视频 | 九九有精品 | 日韩电影中文字幕在线 | 国产日本在线播放 | 久久人人爽人人人人片 | 中文字幕日韩免费视频 | 国产区在线视频 | 亚洲在线 | 在线观看国产日韩 | 日韩精品一区在线播放 | 久热av| 美女网站一区 | 91看片看淫黄大片 | av电影免费 | 欧美一级性生活片 | 国产精品欧美日韩在线观看 | 国产 av 日韩 | 美女国产在线 | 亚洲精品国产精品国自产观看 | 亚洲九九影院 | 在线视频你懂得 | 色先锋av资源中文字幕 | 久久一级片 | 成人av在线亚洲 | 国产精品影音先锋 | 日韩欧美视频在线免费观看 | 久久久久久久精 | 六月丁香激情综合色啪小说 | 中文字幕一区二区三区四区在线视频 | 黄色av网站在线观看免费 | 亚洲理论片在线观看 | 91九色精品 | 在线观看免费国产小视频 | 久久a国产 | 欧美精品在线视频 | 黄色片网站大全 | 黄色av三级在线 | 99re久久资源最新地址 | 亚洲美女免费精品视频在线观看 | 国产精品亚州 | 欧洲亚洲女同hd | 九九视频网站 | 国产视频一区在线免费观看 | 国产精品麻豆三级一区视频 | 国产视频首页 | 在线视频专区 | 欧美精品乱码99久久影院 | 女人18毛片a级毛片一区二区 | 美腿丝袜一区二区三区 | 国产亚洲欧美在线视频 | 一区二区不卡视频在线观看 | 国产直播av| 欧美日韩在线播放一区 | 天天干天天干天天干天天干天天干天天干 | 久久久久久久久久久免费 | 成人免费网视频 | 中文字幕免费高清 | 夜又临在线观看 | 99热国产在线中文 | 色婷婷久久久综合中文字幕 | 亚洲片在线资源 | 国产一区二区三区在线 | 手机在线永久免费观看av片 | 91在线免费视频观看 | 精品国产电影一区二区 | 久久精视频 | 国内精品久久久久久 | 亚洲黄色在线播放 | 激情av网 | 欧美一级性 | 亚洲高清91 | 免费av一级电影 | 亚洲午夜精品电影 | 欧美国产不卡 | 五月天婷婷在线播放 | 九九视频精品在线 | 欧美a在线免费观看 | 日日干美女 | 亚洲午夜久久久久久久久久久 | 操操爽 | 亚洲精品视频免费 | 欧美一二在线 | 国产精品大全 | 国产伦精品一区二区三区在线 | 人人看黄色 | 亚洲日本欧美在线 | 91视频91自拍| 天天操天天摸天天干 | 在线视频日韩欧美 | 欧美精品黑人性xxxx | 日韩美av在线 | 中文字幕免费观看视频 | 欧美一级片免费在线观看 | 精品一区二区三区久久 | 久久久久久久久久久久国产精品 | 久久视频二区 | 日本中文在线播放 | 日日成人网 | 亚洲成人av影片 | av综合 日韩 | 9999亚洲| 福利视频午夜 | 国产精品免费视频久久久 | www.五月婷婷.com | 久久国产精品色婷婷 | 精品国产一区二区三区四区vr | 国产区高清在线 | 国产精品国产三级在线专区 | 国产91免费在线 | 久久视精品| 午夜精品一区二区三区在线播放 | 亚洲人成人在线 | 伊人久久电影网 | av色综合 | 六月色丁 | 一区二区三区在线视频111 | 在线直播av | 亚洲乱码在线 | 在线观看色视频 | 黄色av网站在线观看免费 | 毛片黄色一级 | 国产成人精品午夜在线播放 | 美州a亚洲一视本频v色道 | 亚洲国产精品小视频 | 国产精品中文字幕在线观看 | av免费试看 | 六月色婷婷 | 亚洲精品久久久久中文字幕二区 | 国产精品日韩 | 91九色九色 | 奇米影视在线99精品 | 丁香婷婷激情啪啪 | 国产一区二区在线免费播放 | 久久久18 | 六月丁香激情综合色啪小说 | 国产精品av在线免费观看 | 在线v片免费观看视频 | 国产理论影院 | 久久免费大片 | 欧美日韩aaaa | 日韩一区二区免费播放 | 天天色天天综合 | 久久99精品久久久久久久久久久久 | 亚洲国产精品久久久久婷婷884 | 毛片黄色一级 | 草久久av| 久久影院亚洲 | 一本一本久久a久久精品综合 | 久久99国产精品久久 | 亚洲精品久久久久www | 国产精品第一页在线 | 91麻豆精品国产91久久久久久久久 | 国产手机在线播放 | 精品久久久久久电影 | 国产亚洲久久 | 日韩午夜电影院 | 免费在线h | 国产九九热视频 | 91久久久久久国产精品 | 91av九色| 91自拍视频在线观看 | 伊人激情网 | 99精品热视频只有精品10 | 青青河边草免费观看 | 91亚洲精品久久久蜜桃 | 午夜精品久久久久久久久久久 | 国模视频一区二区三区 | 久久国产精品免费一区 | 天天插伊人 | 国产精品亚洲视频 | 久久国产精品视频 | 天天操天天射天天添 | 超碰97中文| 五月婷婷深开心 | 93久久精品日日躁夜夜躁欧美 | 亚洲精品久久视频 | 亚洲精品玖玖玖av在线看 | 99精品视频在线观看 | 国产视频在线免费观看 | www.少妇| 日韩中文字幕视频在线观看 | 久久婷婷激情 | 成人一级黄色片 | 国产高清久久久久 | 免费在线播放黄色 | 午夜日b视频 | 欧美在线观看视频一区二区三区 | 一区二区三区在线观看免费视频 | 中文字幕在线视频一区二区三区 | 少妇视频在线播放 | 亚洲精品午夜久久久久久久 | 99久久99久久综合 | 精品国产一区二区三区在线观看 | 国产精品福利av | 日韩av一区二区在线播放 | 粉嫩av一区二区三区四区 | 亚洲精品乱码久久 | 国产精品免费人成网站 | av免费网站在线观看 | 亚在线播放中文视频 | 日韩免费在线观看视频 | 日日碰狠狠添天天爽超碰97久久 | 三级视频国产 | 4438全国亚洲精品在线观看视频 | 在线黄色免费av | 亚洲精品久久久久58 | 丁香 久久 综合 | 国产精品女同一区二区三区久久夜 | 狠狠干美女 | 91福利视频网站 | 综合网天天射 | av免费在线观看网站 | 毛片基地黄久久久久久天堂 | 欧美精品v国产精品v日韩精品 | 久久激情电影 | 免费看特级毛片 | 日韩av资源在线观看 | 日本成人中文字幕在线观看 | 免费高清在线观看电视网站 | 国产精品专区h在线观看 | 日韩一级精品 | 免费精品人在线二线三线 | 欧美性极品xxxx娇小 | 人人搞人人搞 | 亚洲一二区精品 | 中文字幕在线观看网 | 五月激情丁香婷婷 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 国产在线精品区 | 麻豆传媒视频观看 | 日本资源中文字幕在线 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 亚洲女在线 | 韩国一区视频 | 免费视频久久久 | 欧美成人性战久久 | 九七视频在线观看 | 国产日韩精品一区二区三区在线 | 久久老司机精品视频 | av大全在线免费观看 | 亚洲久草视频 | 国产免费高清视频 | 人人视频网站 | 欧美在线视频一区二区三区 | 国产一区二区精品久久 | 91精品国产乱码久久桃 | 韩国在线一区 | 国产精品久久久久一区二区 | 麻豆果冻剧传媒在线播放 | 69视频国产| 成人小视频在线播放 | 91成人欧美 | 超级碰碰免费视频 | 精品亚洲成人 | 99视频这里有精品 | av免费在线播放 | 在线观看视频一区二区三区 | 免费视频你懂得 | 国产麻豆精品免费视频 | 午夜视频在线观看一区二区三区 | 最近中文字幕 | 精品免费一区 | 欧美一区二区日韩一区二区 | 日韩国产精品久久久久久亚洲 | 91精品一区二区三区蜜臀 | 黄a在线观看 | 黄色三级网站 | 亚洲精品中文字幕视频 | 婷婷视频在线观看 | 久久国内免费视频 | 国产精品高潮呻吟久久av无 | 五月天伊人 | aaa日本高清在线播放免费观看 | 最近中文字幕mv | 九草在线视频 | 亚洲黄色软件 | 久久8| 91自拍视频在线观看 | 丁香六月天 | 成年人网站免费在线观看 | 久久色在线播放 | 色婷婷88av视频一二三区 | 天天操欧美 | 久久久久亚洲精品 | 韩国中文三级 | 日日爱av| av中文电影| av高清免费在线 | 久草在线最新免费 | a成人v在线| 久草久草视频 | 国产视频在线播放 | 激情综合网五月激情 | 插久久 | 免费看三级黄色片 | 91福利视频免费 | www夜夜操com| 日日干干夜夜 | 日韩在线网址 | 国产精品自拍av | 国产精品午夜久久 | 九九九九热精品免费视频点播观看 | 中文字幕在线中文 | 国产原创在线观看 | 91黄色在线看 | 免费在线观看污网站 | 欧美aⅴ在线观看 | 亚洲国产福利视频 | 久草视频免费在线播放 | 青青草国产精品 | 丁香花在线视频观看免费 | av大片网址 | 色综合久久88色综合天天免费 | 亚洲综合色婷婷 | 在线免费观看国产视频 | 免费国产亚洲视频 | 日韩在线观看av | 国产精品欧美久久久久无广告 | 欧美午夜精品久久久久久孕妇 | 久久国产精品二国产精品中国洋人 | 久草在线免 | 亚洲女人av | 激情五月婷婷综合网 | 国产精品成人av在线 | 97视频在线播放 | 国产免费叼嘿网站免费 | 国产中文字幕视频 | 成人性生交大片免费观看网站 | 免费三级黄色片 | 欧美日韩在线视频观看 | 久久精品三级 | 麻豆va一区二区三区久久浪 | 国产久草在线观看 | a在线观看视频 | 中文字幕888 | 日韩欧美视频一区二区三区 | 亚洲成av人影片在线观看 | 日日爱夜夜爱 | 国产一区二区三区 在线 | 欧美日韩久久久 | 一个色综合网站 | 欧美一级裸体视频 | 中文字幕精 | 久久久九色精品国产一区二区三区 | 免费在线国产精品 | 91人人爱 | 国产一区二区免费 | 啪啪小视频网站 | 国产亚洲精品久 | 久久在线免费观看视频 | 狠狠干狠狠色 | 人人插人人草 | 日韩字幕 | 久久综合欧美精品亚洲一区 | 精品一区二区日韩 | 在线观看免费中文字幕 | 日日操天天操狠狠操 | 国产精品99久久久精品免费观看 | 亚洲区另类春色综合小说校园片 | 黄色av在 | 国产高清永久免费 | 日韩免费区 | 超碰人人做 | 亚洲成人免费观看 | 99视频久久 | zzijzzij亚洲日本少妇熟睡 | 国产中文字幕一区二区三区 | 91av电影在线 | 中文在线免费观看 | 91精品视频一区二区三区 | 中文字幕在线视频一区 | 97超碰人人看 | 国产精彩视频一区 | 国产亚洲人成网站在线观看 | av高清免费在线 | 91看片在线| 久草在线资源免费 | 日韩欧美综合在线视频 | 丁香六月天 | 亚洲人成影院在线 | 在线观看国产中文字幕 | 久久免费视频2 | 麻豆国产精品一区二区三区 | 欧美日韩中文在线观看 | 中文字幕av免费在线观看 | 综合色天天| 免费看成年人 | 日日爱夜夜爱 | 日韩在线免费视频观看 | 日韩在线观看一区二区三区 | 青青看片 | 国产成人精品亚洲 | aaawww| 亚洲人成网站精品片在线观看 | 日韩久久激情 | 天天狠狠干 | 免费在线观看一区二区三区 | 视频1区2区 | 中文超碰字幕 | 亚洲欧美日韩在线一区二区 | av电影中文字幕在线观看 | 91精品在线免费观看视频 | 五月的婷婷| 人人看人人| 色香com. | 日韩av快播电影网 | 96超碰在线 | 欧洲一区二区在线观看 | 日韩欧美在线观看 | 99精品一区 | 黄色avwww | 一区二区三区四区精品视频 | 视频一区二区在线 | 国产在线精品区 | 手机看片午夜 | 精品自拍av | 欧美一区二区三区在线观看 | 欧美视频99| 久久国产色 | 久久精品国产久精国产 | 国产日本亚洲高清 | 在线播放你懂 | 欧美大香线蕉线伊人久久 | 午夜视频在线观看欧美 | 一级一片免费视频 | 人人爽人人舔 | 久久久精品成人 | 激情久久久久久久久久久久久久久久 | 999色视频 | 中文字幕精品三区 | 成人黄色免费在线观看 | 91看片淫黄大片一级在线观看 | 伊人va| 国产成人精品综合 | 日韩精品影视 | 国产成年人av | 国产精品国产三级国产 | 黄色av电影免费观看 | 蜜臀av性久久久久av蜜臀三区 | 日韩理论片在线观看 | 久久免费公开视频 | 亚洲精品免费视频 | 高清不卡毛片 | 有码中文字幕 | 婷婷在线综合 | 99国产在线观看 | 人人精品久久 | 亚洲人成综合 | 久久综合狠狠综合久久激情 | 亚洲男女精品 | 国产精品久久久久久久久久久久午 | 九九免费在线看完整版 | 国产一级视频在线观看 | 在线观看 国产 | 亚洲狠狠婷婷综合久久久 | 丁香在线 | 亚洲精品免费在线播放 | 国产精品第二十页 | 中文字幕精品视频 | 日本激情中文字幕 | 免费精品视频在线 | 中文字幕在线视频网站 | 精品99免费视频 | 日韩专区视频 | 欧美性网站 | 日韩在线电影观看 | 欧美久久久久久久久久 | 五月婷婷婷婷婷 | 黄色一级大片在线免费看产 | 国产一级淫片在线观看 | 日韩黄色软件 | 欧美极品裸体 | 婷婷久久国产 | 日韩精品极品视频 | 免费在线观看av不卡 | 日韩欧美高清视频在线观看 | 精品999久久久 | 久久好看免费视频 | 日韩免费观看视频 | 最新av在线网址 | 97色在线视频 | 国产色在线观看 | 91麻豆操| 欧美大香线蕉线伊人久久 | 免费成人短视频 | 亚洲精品18日本一区app | 亚洲伊人av | 337p日本欧洲亚洲大胆裸体艺术 | 天天操天天干天天操天天干 | 久久网站免费 | 亚洲国产精品激情在线观看 | 久久精品这里热有精品 | 欧美日韩高清国产 | 操操操影院| 亚洲国产剧情 | 亚洲综合在线五月天 | 999超碰| 国产精品福利午夜在线观看 | 麻豆高清免费国产一区 | 一区中文字幕 | 美女视频又黄又免费 | 在线黄色国产电影 | 免费黄色特级片 | 激情五月婷婷综合 | 日本黄色免费观看 | 国产精品理论视频 | 亚洲国产最新 | 国产一级二级在线观看 | 久久少妇 | 欧美日韩精品在线视频 | 欧美a在线免费观看 | 国产亚洲欧美日韩高清 | 韩日精品中文字幕 | 欧美国产日韩一区二区三区 | 国产99久久久国产精品免费看 | 特级西西444www高清大视频 | 天天狠狠干 | 亚洲少妇xxxx| 99亚洲视频 | 国产黄色理论片 | 国产成人av在线 | 久久精品一区二区三区四区 | 亚洲精品www | 国产精品久久久久久久久久久免费看 | 韩国精品福利一区二区三区 | 欧美黑人巨大xxxxx | 福利一区在线 | 公开超碰在线 | 成人黄色片免费 | 18岁免费看片 | 日韩精品久久久免费观看夜色 | 免费午夜网站 | 一级片视频在线 | 午夜精品久久久久久久久久 | 免费在线| 久久久久久久精 | 91自拍成人 | 亚洲经典中文字幕 | 亚洲视频网站在线观看 | 精品99久久久久久 | av在线网站免费观看 | 在线免费av电影 | 亚洲精品xx | 午夜精品久久久久久久爽 | 91精品一区二区在线观看 | 人人爱人人射 | 麻豆免费观看视频 | 91麻豆.com| www天天干com| 操操色| 婷婷久月 | 婷婷在线综合 | 热九九精品 | 天天操天天摸天天爽 | 激情av网址| 成人夜晚看av | 国产精品手机在线观看 | 成人av电影在线播放 | 久久高视频 | 国产午夜精品一区二区三区 | 最新的av网站 | 色久av | 人人插超碰 | 人人看看人人 | 日韩在线观看av | 永久免费观看视频 | 激情视频一区二区 | 国产成人精品av在线观 | 欧美一级欧美一级 | 在线不卡的av | 免费在线观看视频a | 五月激情婷婷丁香 | 91视频在线观看下载 | 国产黄色一级大片 | 日韩中文免费视频 | 成人观看 | av不卡中文字幕 | 国产91av视频在线观看 | 九九热精品国产 | 久操视频在线 | 精品国产一区二区三区久久久蜜月 | www.久久免费视频 | 国产97超碰 | 人人插人人艹 | 国内精品视频在线 | 国产亚洲在线视频 | 91在线影院| 97伊人网| 国产一级视频在线观看 | 人人草在线视频 | 91麻豆看国产在线紧急地址 | 在线视频手机国产 | 国语自产偷拍精品视频偷 | 在线视频区 | 亚洲精品在线免费观看视频 | 最近中文字幕久久 | 一区二区三区在线观看 | 成人国产精品免费观看 | 亚洲在线国产 | 久久久这里有精品 | 亚洲 精品在线视频 | av性网站 | 91成人天堂久久成人 | 国产永久网站 | 高清在线一区二区 | 国产成人亚洲在线观看 | 久久人人爽人人爽人人片 | 色狠狠干| 久久9精品 | 日韩理论在线观看 | 97在线观看免费高清完整版在线观看 | 国产午夜一区二区 | 91视频在线免费下载 | 久久精品123| 又污又黄的网站 | 日韩成人精品一区二区 | 在线视频福利 | 久久久久久片 | 美女黄久久 | 91成年视频 | 日韩欧美视频免费看 | 国产精品99久久免费观看 | 又黄又爽的免费高潮视频 | 探花视频在线观看 | 亚洲国产精彩中文乱码av | 天天干天天色2020 | 91免费高清在线观看 | 国产在线精品区 | 色午夜影院 | 天天艹天天操 | 最近中文国产在线视频 | 天天色天天综合 | 又色又爽又黄高潮的免费视频 | 麻豆视频免费在线 | 色婷婷激情四射 | 欧美性生活一级片 | 久久成人18免费网站 | 久久av在线播放 | 欧美成人在线网站 | a黄在线观看 | 久久激情视频 久久 | 国产精品久久久久久久7电影 | 久久久精品国产一区二区三区 | 深夜视频久久 | 国产99中文字幕 | av电影免费在线看 | 天天爽人人爽 | 亚洲精品a区| 国产精品亚洲综合久久 | 一区二区三区高清 | 91麻豆精品国产91久久久久久 | 999日韩 | 日日夜夜综合网 | 中文字幕一区二区三区久久蜜桃 | 日韩视频在线播放 | 中文字幕美女免费在线 | 91亚洲精品久久久中文字幕 | 999久久国产精品免费观看网站 | 不卡精品 | 久久综合免费 | 日韩精品一二三 | 日韩三级.com| 99久久99久久精品免费 | 国产96视频 | 欧亚日韩精品一区二区在线 | 青青河边草免费直播 | 日韩 国产 | av在线中文| 在线高清一区 | 色七七亚洲影院 | 中文字幕资源站 | 国产精品久久久久久五月尺 | 国产成人久久久久 | 婷婷综合 | 在线观看91精品视频 | 国产一区二区久久精品 | 久久综合九色99 | 国产精品99久久免费观看 | 天海翼一区二区三区免费 | 亚洲成人av在线播放 | 日韩系列 | 精品一区av| 亚洲激情在线 | 91成人国产 | 欧美一级专区免费大片 | 国产午夜精品一区二区三区在线观看 | 亚洲在线看 | 日韩高清av | 国产精品国产三级国产aⅴ无密码 | 天堂黄色片 | 天干啦夜天干天干在线线 | 亚洲人人爱 | 天天操狠狠操网站 | 国产精品一区二区在线观看 | 91精品一区在线观看 | 亚洲黄色成人网 | av在线看片| 狠狠干综合网 | 国产剧在线观看片 | 久久九九国产精品 | 久久久久久久久久久高潮一区二区 | 热久久免费视频精品 | 久久久久亚洲国产 | 国产黄色av网站 | 日日干天天 | 久草精品视频 | 婷婷六月网 | 国产91影视| 激情www | 深夜国产在线 | 色爱区综合激月婷婷 | 五月天伊人| 九色在线 | 在线观看91视频 | 日韩中文在线视频 | 91成人久久 | www.国产在线观看 | 亚洲一区日韩精品 | 亚洲成人免费观看 | 日本在线视频网址 | 久久精品网址 | 91亚色在线观看 | 国产午夜精品一区二区三区嫩草 | 在线免费观看黄色 | 亚洲国产网址 | 久久精品一二三区 | a在线v| 一区 在线 影院 | 亚洲精品黄色在线观看 | 日韩专区在线观看 | 福利电影一区二区 | 99视频在线免费 | 97超碰在线资源 | 日韩在线理论 | 成年人免费在线 | 久久人人爽人人片 | 亚洲高清91 | 最新真实国产在线视频 | 亚洲国产欧洲综合997久久, | 久久高清精品 | 91色综合| 二区三区在线观看 | 亚洲一区动漫 | 成人影视免费 | 国产精品丝袜在线 | 有没有在线观看av | 91在线看网站 | 日韩高清成人在线 | 久久精品直播 | 日韩精品视频久久 | 天天干干 | 成人午夜精品久久久久久久3d | 亚洲精品资源 | 亚洲日本中文字幕在线观看 | 久久影院亚洲 | 很黄很污的视频网站 | 久久夜夜夜 | 99久久99 | 日本在线观看视频一区 | 日韩免费视频一区二区 | 久久中国精品 | 麻豆传媒视频在线 | 热久久在线视频 | 激情五月综合 | 青青草国产精品视频 | 久久五月婷婷丁香 | 欧美色一色| 日韩| 96精品视频| 久久久久久久久久久久久9999 | 国产精品一区二区白浆 | 91免费高清观看 | 91精品在线视频观看 | 97精品免费视频 | 婷婷色伊人| 一区二区精品在线 | 日韩亚洲欧美中文字幕 | 精品国产亚洲日本 | 亚洲精品美女久久 | 成人精品一区二区三区电影免费 | 午夜天使 | 在线播放 亚洲 | 久久精品www人人爽人人 | 福利一区视频 | 久草精品在线 | 免费在线黄网 | 日韩1级片| 日韩啪啪小视频 | free,性欧美|