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

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

JavaScript撤銷恢復操作的實現方法詳解

瀏覽:258日期:2022-06-01 16:10:51
目錄
  • 前言
  • 一、初期設想
  • 二、如何收集狀態
    • 1.通信嘗試
    • 2.如何通信
  • 三、管理者與執行者
    • 1.數據驅動
    • 2.管理者
    • 3.執行者

前言

這是一個基于原生JavaScript+Three.js的系統, 我需要在里面增加撤銷恢復的功能, 這并非針對一個功能, 而是各種操作.

主要記錄思路.

一、初期設想

棧似乎很合適, 用棧存儲狀態.

最近的一次操作入棧存在于棧頂, 而撤銷操作只需要對棧頂的狀態進行操作, 這遵循棧的后進先出原則(LIFO).

然后再設置一系列方法去操作棧, 增加一點安全性.

首先是各種功能應該在什么地方發起出入棧操作, 這里有一大堆js文件.

其次對于不同的功能需要收集什么參數來組織狀態入棧.

不同的功能出棧應該分別進行什么操作, 回撤出??隙ㄒ{這堆文件里的方法來把老狀態填回去.

二、如何收集狀態

先寫個demo,我建了一個數組棧放在class Manager, 設置了入棧方法push, 出棧方法pop以及查看棧頂的peek方法.

class Manager {
    constructor() {
this.stats= [];
    }
    push(action) {
this.stats.push(action);
    }
    pop() {
const nowAction = this.doActions.pop();
    }
    peek(which) {
return this.doActions[this.doCount];
    }
}
export { Manager }

收集狀態就不得不去滿地的找了, 操作都寫好了, 還是不要亂動.

除非單獨寫一套獨立的邏輯, 執行系統的同時也執行我自己的, 但這基本是要重寫一套系統了(

1.通信嘗試

但還是要想辦法把各處的數據都劃拉到Manager里.

呃, 老實說我并沒有什么原生開發的經驗, 我在多個文件里引入了Manager類并且期望著這些文件可以基于Manager建立聯絡實現數據共享, 比如在a.js和b.js內:

只是舉個例子, 不要用一個字母去命名文件.

// a.js
import { manager } from "./backup/manager.js";
const manager = new Manager();
const action = {
  name: "saveWorldList",
  params: {
    target: "108",
    value: [
      world: {
psr: {},
annotation: {}
      }
    ]
  }
}
for (let i = 0; i < 3; i++) {
  manager.push(action);
}
// b.js
import { manager } from "./backup/manager.js";
const manager = new Manager();
const undoAction = manager.pop();
console.log(undoAction);

然而這樣做并不能實現數據共享, 每一個剛剛實例化出來的對象都是嶄新的.

const manager = new Manager();

只是使用原始干凈的class Manger實例化了一個僅存在于這個模塊里的對象manager.

2.如何通信

如果將一個對象放在公用的模塊里, 從各個文件觸發去操作這一個對象呢…公用模塊里的數據總不至于對來自不同方向的訪問做出不同的回應吧?

class Manager {
    constructor() {
this.stats= [];
    }
    push(action) {
this.stats.push(action);
    }
    pop() {
const nowAction = this.doActions.pop();
    }
    peek(which) {
return this.doActions[this.doCount];
    }
}
const manager = new Manager();
export { manager }

之后分別在各個js文件引入manager, 共同操作該模塊內的同一個manager, 可以構成聯系, 從不同位置向manager同步數據.

manager幾乎像服務器里的數據庫, 接受存儲從各處發送的數據.

三、管理者與執行者

現在入棧方案基本確定了, 一個入棧方法push就能通用, 那出棧怎么辦呢.

不同的操作必須由不同的出棧方法執行.

最初設想是寫一個大函數存在class manager里, 只要發起回撤就調這個函數, 至于具體執行什么, 根據參數去確定.

但是這方法不太好.

首先, 我會在用戶觸發ctrl + z鍵盤事件時發起回撤調用回撤函數, 但是我只在這一處調用, 如何判定給回撤函數的參數該傳什么呢? 如果要傳參, 我怎么在ctrl + z事件監聽的地方獲取到該回撤什么操作以傳送正確的參數呢?

另外, 如果這樣做, 我需要在manager.js這一個文件里拿到所有回撤操作需要的方法和它們的參數, 這個項目中的大部分文件都以一個巨大的類起手, 構造函數需要傳參, 導出的還是這個類, 我如果直接在manager里引入這些文件去new它們, 先不說構造函數傳參的問題, 生成的對象是嶄新的, 會因為一些方法沒有調用導致對象里的數據不存在或者錯誤, 而我去使用這些數據自然也導致錯誤.

我最好能拿到回撤那一刻的數據, 那是新鮮的數據, 是有價值的.

另外manager會在許多地方引入, 它最好不要太大太復雜.

1.數據驅動

傳參的方案十分不合理, 最好能用別的方法向回撤函數描述要執行怎樣的回撤操作.

在入棧的時候直接于數據中描述該份數據如何進行回撤似乎也行, 但是以字符串描述出來該如何執行?

switch嗎, 那需要在回撤函數內寫全部處理方案, 哪怕處理方案抽離也需要根據switch調取函數, 就像這樣:

class Manager {
  constructor () {
    this.stats = [];
  }
  pop() {
    const action = this.stats.pop();
    switch (action) {
	  planA: 
this.planAFun(action.params);
      break;
      planB: 
this.planBFun(action.params);
      break;
      // ...
    }
  }
}

將來萬一要加別的功能的回撤, 一個函數百十行就不太好看了, 還是在類里面的函數.

那…把switch也抽出去? 似乎沒必要.

2.管理者

參考steam, 嗯, 就是那個游戲平臺)

steam可以看作游戲的啟動器吧, 拋開人工操作, 如果需要啟動游戲,那么先啟動steam, steam再去啟動游戲, steam可以看作一個管理者.

管理者只需要去決定, 并且調用分派事項給正確的執行者就好, 管理者自己不執行.

參考你老板.

然后Manager可以作為這樣一個角色, 它只負責維護狀態和分配任務:

import { Exec } from "./exec.js";
import { deepCopy } from "../util.js";
const executors = new Exec(); // 執行者名單
class Manager {
  constructor() {
    this.editor = null;
    this.doCount = 0;
    this.doActions = [];
    this.undoCount = 0;
    this.undoActions = [];
    this.justUndo = false;
    this.justRedo = false;
  }
  do(action) { // 增加狀態
    if (this.justUndo || this.justRedo) { // undo/redo后, world不應立即入棧
      this.justUndo === true && (this.justUndo = false);
      this.justRedo === true && (this.justRedo = false);
      return;
    }
    this.previousWorld = action.params.value;
    this.doActions.push(action);
    this.doCount++
    console.log("Do: under control: ", this.doActions);
  }
  undo() { // 回撤事項分配
    if (this.doActions.length === 1) {
      console.log(`Cannot undo: doSatck length: ${this.doActions.length}.`);
      return;
    }
    const nowAction = this.doActions.pop();
    this.doCount--;
    this.undoActions.push(nowAction);
    this.undoCount++;
    const previousAction = this.peek("do");
    const executor = this.getFunction(`${previousAction.name}Undo`);
    executor(this.editor, previousAction.params)
    this.justUndo = true;
    console.log(`Undo: Stack now: `, this.doActions);
  }
  redo() { // 恢復事項分配
     if (this.undoActions.length === 0) {
       console.log(`Connot redo: redoStack length: ${this.undoActions.length}.`);
       return;
     }
    const nowAction = this.undoActions.pop();
    this.undoCount--;
    this.doActions.push(nowAction);
    this.doCount++;
    const previousAction = nowAction;
    const executor = this.getFunction(`${previousAction.name}Redo`);
    executor(this.editor, previousAction.params);
    this.justRedo = true;
    console.log(`Redo: Stack now: `, this.doActions);
  }
  getFunction(name) {
    return executors[name];
  }
  reset() { // 重置狀態
    this.doCount = 0;
    this.doActions = [];
    this.undoCount = 0;
    this.undoActions = []
  }
  peek(which) { // 檢視狀態
    if (which === "do") {
      return this.doActions[this.doCount];
    } else if (which === "undo") {
      return this.undoAction[this.undoCount];
    }
  }
  initEditor(editor) {
    this.data = editor;
  }
}
const manager = new Manager();
export { manager }

justUndo/justRedo, 我的狀態收集是在一次請求前, 這個請求函數固定在每次世界變化之后觸發, 將當前的世界狀態上傳. 所以為了避免回撤或恢復世界操作調用請求函數將回撤或恢復的世界再次重復加入棧內而設置.

undo或者redo這兩種事情發生后, 執行者manager通過原生數組方法獲取到本次事項的狀態對象(出棧), 借助getFunction(看作它的秘書吧)訪問執行者名單, 幫自己選取該事項合適的執行者, 并調用該執行者執行任務(參考undo, redo函數體).

執行者名單背后是一個函數庫一樣的結構, 類似各個部門.

這樣只需要無腦undo()就好, manager會根據本次的狀態對象分配執行者處理.

do這個操作比較簡單也沒有多種情況, 就沒必要分配執行者了…

3.執行者

執行者名單需要為一個對象, 這樣getFunction()秘書才能夠為manager選出合適的執行者, 執行者名單應為如下結構:

// 執行者有擅長回撤(undo)和恢復(redo)的兩種
{
  planA: planAFun (data, params) {
    // ...
  },
  planAUndo: planAUndoFun (data, params) {
    // ...
  },
  planB: planBFun () {
    // ...
  },
  planBUndo: planBUndoFun (data, params) {
    // ...
  }
  ...
}

也好, 那就直接把所有執行者抽離為一個類, 實例化該類后自然能形成這種數據結構:

class Exec { // executor
  saveWorldRedo (data, params) {
    // ...
  }
  saveWorldUndo (data, params) {
    // ...
  }
  initialWorldUndo (data, params) {
    // ...
  }
}
export { Exec };

實例化后:

{
  saveWorldRedo: function (data, params) {
    // ...
  },
  saveWorldUndo: function (data, params) {
    // ...
  },
  initialWorldUndo: function (data, params) {
    // ...
  }
}

正是需要的結構.

getFunction可以由解析狀態對象進而決定枚舉executor對象中的哪個執行者出來調用:

const executor = getFunction (name) {
  return executors[name];
}

到此這篇關于JavaScript撤銷恢復操作的實現方法詳解的文章就介紹到這了,更多相關JS撤銷恢復操作內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: JavaScript
主站蜘蛛池模板: 97伦理片| 久久国产精品一区 | 美女网站视频免费黄 | 日本乱偷中文字幕 | 国产中文在线 | 99久久视频 | 情一色一乱一欲一区二区 | 欧美激情a∨在线视频播放 中文字幕网在线 | 在线观看精品自拍私拍 | 97国产精品 | 毛片免费网站 | 亚洲区在线| 亚洲精品v| 国产日韩欧美一区 | 一区二区三区国产视频 | 国产精品成人3p一区二区三区 | 国产精品视频入口 | 久久精品网 | 亚洲欧美一区二区精品中文字幕 | 免费黄色在线 | 亚洲成人日韩 | 精品二区| 91大神在线看 | av一区在线观看 | 欧美一级网站 | 国产九九精品 | 中国黄色在线视频 | 91看片网站| 最新中文字幕在线 | 色视频网站在线观看 | 人人做人人澡人人爽欧美 | 免费观看视频毛片 | a级网站在线观看 | 精品亚洲国产成av人片传媒 | 欧美激情在线精品一区二区三区 | 成年人在线视频 | 亚洲 自拍 另类 欧美 丝袜 | 国产精品久久久久久久久久久新郎 | 亚洲国产精品一区二区久久 | 最新国产在线 | 欧美一区二区三区在线观看 | 精品日韩av| 日韩国产欧美在线观看 | 国产综合久久久久久鬼色 | 亚洲视频在线观看免费 | 欧美日韩一区在线 | 欧美三级电影在线播放 | 欧美日韩视频 | 国产高清久久 | 国产精品中文字幕在线播放 | 日本久久二区 | 国产小视频网站 | 在线视频一区二区三区 | 日韩毛片一级 | 国产欧美精品区一区二区三区 | 久久人 | 久久久国产精品 | 香蕉大人久久国产成人av | 亚洲天天操| 亚洲免费影院 | 国产精品999 | 在线成人一区 | 国产免费一区二区三区四区五区 | 中字幕视频在线永久在线观看免费 | 中文字幕精品一区久久久久 | 亚洲天堂久久 | 精品日韩一区二区 | 亚洲精品成人av | 精品国产一区二区三区av片 | 色婷婷一区二区三区四区 | 免费成人在线观看 | 国产午夜精品一区二区三区嫩草 | 亚洲成人久久久 | www,99热 | 国产精品色哟哟哟 | 亚洲欧美第一页 | 久久精品久久精品国产大片 | 夜夜草视频 | 中文字幕亚洲在线 | 精品久久久久久亚洲精品 | 亚洲欧美综合精品久久成人 | 婷婷久久综合 | 永久av| 四虎永久免费影视 | 国产欧美一区二区精品婷 | 久久美女视频 | 亚洲精品久久一区二区三区 | 亚洲国产精品99久久久久久久久 | 国产精品美女久久久久久免费 | 精品国产黄a∨片高清在线 99热婷婷 | 国产精品入口麻豆www | 精品国产91久久 | a黄视频 | 欧美综合一区二区 | 青青草免费在线视频 | 国产ts视频 | 亚洲视频在线播放 | 国产一二区在线观看 | 性色视频免费观看 | 男人的天堂久久 | 黄色片在线免费观看 | 日韩精品一区在线 | 欧美 | 九九porny88av | 亚洲一区在线日韩在线深爱 | 欧美jizzhd精品欧美巨大免费 | 久久久久国产一区二区三区 | 99re视频在线观看 | 免费在线一区二区三区 | 天天草天天色 | 色性av| 午夜激情视频免费 | 午夜精品一区 | 日韩av在线中文字幕 | 精品久久久久久亚洲综合网 | 污片在线免费看 | 亚洲高清视频网站 | 日本女人高潮视频 | 亚洲二区在线观看 | 精品国产黄a∨片高清在线 激情网站免费 | 免费啪啪网站 | 在线成人国产 | 国产精品一区久久久久 | 久久伊人成人网 | 国产精品1区 | 欧美盗摄 | 成人亚洲一区 | 中文字幕 国产精品 | 欧美 日韩| 91久久国产精品 | 四虎884a | 在线国产视频 | 精品久久久久一区二区国产 | 成人做爰www免费看视频网站 | www.av在线| 日本精品在线 | 国产富婆一级全黄大片 | h网站在线观看 | 欧美国产精品一区二区 | 欧洲一区二区三区 | 国产在线高清视频 | 97精品国产 | 欧美日韩一区二区三区视频 | 久久99精品久久久久久久青青日本 | 欧美成人福利 | 国产精品视屏 | 99在线免费视频 | 久久不色 | 91精品国产91久久久久久久久久久久 | 国产精品日产欧美久久久久 | 国产成人精品一区二区三区视频 | 九九热在线视频免费观看 | 亚洲第一黄色 | 亚洲欧美一区二区三区在线 | 日本一本视频 | 午夜影院黄色 | 中文字幕视频 | 欧美专区在线观看 | 亚洲一区 国产 | 91精品久久久久久久久久小网站 | 中文字幕精品一区久久久久 | av天空| 日韩在线播放视频 | 四虎影音| 成人久久久精品乱码一区二区三区 | 91在线视频在线观看 | 国产高清网站 | 国产一区二区三区免费视频 | 久国产精品视频 | 亚洲精品一区二区三区 | 色综合色综合 | 亚洲精品一区二区三区在线播放 | 高清av在线 | 国产区最新 | 久久se精品一区精品二区 | 国产黄色一级大片 | 超碰最新网址 | 97av视频在线观看 | 亚洲精品麻豆 | 欧美日韩中文字幕 | 欧美在线亚洲 | 美女久久| 免费观看黄色一级大片 | 亚洲第一视频 | 久久久久久国产精品高清 | 亚洲精品国产剧情久久9191 | 久久伊人操 | 一级篇| 日韩av免费在线观看 | 99在线视频观看 | 欧美日韩在线免费观看 | 伊人色综合久久天天五月婷 | av毛片 | 中文字幕精品视频在线观看 | 欧美色欧美亚洲另类七区 | 国产精品美女久久久久久久久久久 | 国产精品一区久久久 | 国产精品永久 | 国产高清美女一级a毛片久久 | 久久99国产精品久久99大师 | 不卡一区二区三区视频 | 欧美一级电影免费观看 | 综合久草 | 成年视频在线观看福利资源 | 黄色a级网站 | 欧美99 | 精品国产91乱码一区二区三区 | 国产午夜视频 | 国产美女一区 | 老司机深夜福利视频 | 欧美成人区 | 伊人免费观看视频 | 亚洲成人毛片 | 丁香婷婷在线 | 精品三级三级三级三级三级 | 国产剧情一区二区 | 久久一区二区视频 | 国产欧美精品一区二区 | 日韩色av| 亚洲精品国产剧情久久9191 | 中文字幕亚洲在线观看 | 九九久久精品 | 91天天综合| 亚洲欧美日韩另类精品一区二区三区 | 久久不射电影网 | 日日干天天操 | 亚洲青涩在线 | 青青草国产成人av片免费 | 欧美精产国品一二三区 | 91麻豆精品国产91久久久资源速度 | 美女二区 | 97人人超碰 | 国产欧美日本 | 午夜精品一区二区三区在线播放 | 一级片在线观看视频 | 国产三区精品 | 国产99久久精品 | 夜夜av| 成人免费一区二区三区视频网站 | 久久噜噜噜精品国产亚洲综合 | 久久综合av| 久在线观看 | 91色乱码一区二区三区 | 久久久久久免费视频 | 99精品视频在线 | 成人福利视频网 | 久久久91| 在线亚洲人成电影网站色www | 伦理午夜电影免费观看 | 1级毛片| 天天射影院 | 精品一区二区视频 | 夜夜夜操| 在线视频se | 久久91视频| 伊人久久国产 | 欧美日韩免费在线 | 日韩一区二区三区精品 | 99re6在线 | 成人在线免费视频 | 成人在线免费观看 | 国产精品不卡视频 | 中文字幕亚洲一区二区三区 | 久久精品国产免费 | 黄色在线免费观看 | 成人一区二区三区 | 欧美一区二区三区爽大粗免费 | 狠狠综合久久av一区二区小说 | 久久机热| 国产美女在线观看 | 亚洲一区二区三区 | 亚州激情 | 成人a在线视频免费观看 | 欧美成年黄网站色视频 | 伊人网在线视频观看 | 亚洲欧美日韩一区二区 | 黄色一级电影免费观看 | 国产午夜精品一区二区三区嫩草 | 一区二区三区影院 | 亚洲国产激情 | 久久爱综合 | av一二三四 | 国产精品久久7777 | 国产精品乱码一区二区三区 | 国产亚洲精品久久久 | 国户精品久久久久久久久久久不卡 | 黄色在线 | 久久精品影片 | 亚洲精品视频导航 | 国产中文在线播放 | 亚洲欧美日韩在线 | 人人草人人干 | 国产亚洲欧美在线 | 国产乱码精品一品二品 | 五月天电影网 | 欧美日韩在线视频观看 | 涩涩视频观看 | 欧美日韩成人在线观看 | 欧美性猛交一区二区三区精品 | 一区二区三区视频 | 亚洲精品久久久久国产 | 黄色高清视频在线观看 | 国产伦精品久久久一区二区三区 | 日韩视频不卡 | 一级欧美一级日韩片 | 红杏aⅴ成人免费视频 | 欧美a区 | 色黄网站 | 精品国产91亚洲一区二区三区www | 精品91久久久 | 人人射人人舔 | 日韩欧美在线观看一区二区三区 | xnxx 日本19 | 91精品国产91久久久久久黑人 | 日韩在线播放欧美字幕 | av一区二区三区四区 | 亚洲一区二区在线免费观看 | www.久久99| 亚洲自拍在线观看 | 一区亚洲| 欧洲在线一区 | 性一交一乱一透一a级 | 看一级黄色大片 | 日韩av免费在线观看 | 精品久久精品 | 中文字幕一区二区三区四区五区 | 国产视频第一页 | 国产精品一区二区三 | 性色视频在线 | 中文字幕日韩欧美 | 成人欧美一区二区三区黑人孕妇 | 日韩一区二区在线观看 | 亚洲综合无码一区二区 | 日韩av在线中文字幕 | 成人小视频在线观看 | 国产精品无码久久久久 | 久久毛片 | 国产偷自视频区视频 | 山岸逢花在线 | 亚洲精品免费视频 | 亚洲国产精品久久久久 | 国产精品网站在线观看 | 色欧美片视频在线观看 | 97av视频在线观看 | 国产精品7| 亚洲免费视频一区 | a国产在线| 国产一区二区三区视频 | 国产视频久久久久久 | 日产精品久久久一区二区 | 亚洲一区二区三区免费在线观看 | 欧美成人高清视频 | 精品久久99 | 亚洲视频一区二区三区 | 国产精品久久国产精品 | 国产精品国产三级国产aⅴ中文 | 国产精品亚洲一区二区三区在线 | 中文学幕专区 | 日韩福利在线观看 | 草草网| 国产视频一区二区在线 | 精品亚洲成a人在线观看 | 午夜精品久久久久久 | 国产99精品 | 国产一级片儿 | 日韩欧美国产一区二区三区 | 亚洲人成人一区二区在线观看 | 国产日韩欧美在线 | 百性阁综合另类 | 福利片在线观看 | 色婷婷国产精品 | 国产一区欧美 | 日韩欧美在线一区 | 国产精品色婷婷亚洲综合看 | 国产77777 | 亚洲综合二区 | 欧美a视频| 日本久久精品 | 白浆视频在线观看 | 国产999精品久久久久久 | 亚洲超碰av | 国产一级视频 | 亚洲毛片 | 久久亚洲欧美日韩精品专区 | 午夜视频网站 | 亚洲精品亚洲人成人网 | 国产精品成人国产乱一区 | 麻豆毛片 | 国产视频中文字幕 | 狠狠操夜夜爱 | 波多野结衣一区二区三区四区 | 成人在线视频一区 | 亚洲一区二区三区四区在线观看 | 欧美国产视频 | 一级毛片在线 | 情侣av | 青青伊人久久 | 色约约精品免费看视频 | 欧美伊人影院 | 色猫猫国产区一区二在线视频 | 亚洲一区中文字幕在线观看 | 亚洲 一区 | 欧美色视 | 91亚洲精品久久久 | 日韩精品中文字幕在线观看 | 国产人成精品一区二区三 | 国产精品一区二区三区四区 | 久久久精品一区二区 | 天堂亚洲 | 成年人网站在线免费看 | 欧美久久久久 | 国产伦精品一区二区三区四区视频 | 国精品一区二区三区 | 在线伊人网 | 久久人人爽爽爽人久久久 | 亚洲一区二区在线 | 成人国产一区 | 欧美日韩一区二区在线播放 | 成人h动漫精品一区二区器材 | 1000部精品久久久久久久久 | 亚洲国产成人91精品 | 色爱区综合| 99久久精品免费看国产免费软件 | 欧美亚洲视频 | 可以在线观看的av网站 | 久久久久一 | 欧美日韩大片在线观看 | 毛片站 | 玖玖视频| 蜜月久综合久久综合国产 | 精品视频网 | 一区二区三区免费在线观看 | 爱啪导航一精品导航站 | aaaaaa黄色片| 国产中文字幕一区 | 91欧美| 一级性大片 | 久久午夜影院 | 国产成人久久精品一区二区三区 | 北条麻妃99精品青青久久 | 久久伊人久久 | 韩日精品视频 | 99热在线精品免费 | 国产在线观看免费av | 亚洲一区 中文字幕 | 午夜影院在线观看免费 | 国产精品1 | 国产成人福利 | 天堂欧美城网站网址 | 欧美综合一区二区 | 黄视频在线播放 | 国产日韩欧美一区二区 | 日韩欧美中字 | 日韩在线观看视频一区 | 日韩欧美中文在线 | 特级淫片女子高清视频在线观看 | 综合久久色 | 欧美激情一区二区 | 国产一区二区三区在线免费观看 | 99精品欧美一区二区三区综合在线 | 午夜欧美精品久久久久 | caoporn国产精品免费公开 | av中文字幕在线播放 | 精品一区二区在线观看 | 久久久国产一区二区三区四区小说 | 亚洲精品综合 | 亚洲高清中文字幕 | 国产精品一区久久久久 | 久久人人网 | 国产高清一区二区 | 国产高潮在线观看 | 亚洲欧美日韩在线 | www.788.com色淫免费 | 四虎影院观看 | 午夜成人免费影院 | 91精品国产91综合久久蜜臀 | 日韩中文字幕在线观看 | 91资源在线观看 | 亚洲精品一区二区 | 亚洲国产成人精品女人 | 亚洲精品日韩综合观看成人91 | 日本国产一区二区 | 骚黄视频 | 九一视频在线播放 | 精品久久久久久 | 狠狠搞狠狠干 | 国产精品爱久久久久久久 | 黄色毛片在线播放 | av黄色在线观看 | 欧美久久久久久久久久 | 欧美成人性生活视频 | 国产精久 | 国产精品久久久久久一区二区三区 | 国产高清av在线一区二区三区 | 91久久 | 国产午夜精品视频 | 成人做爰www免费看视频网站 | 国产精品一二区 | 操操操av | 欧美一区2区三区3区公司 | 亚洲综人网 | 一区二区三区自拍 | 国产精品永久免费 | 成人高清在线 | 国产精品毛片久久久久久久 | 在线中文字幕av | av网站在线免费看 | 91精品国产91久久久久久不卡 | 视频一区二区中文字幕 | 中文字幕久久精品 | 精品午夜久久 | 亚洲精品视频一区 | 成人精品一区二区三区中文字幕 | 欧美精品一 | 日日夜夜天天 | 久久久久久国产精品mv | 久久国产精品久久久久久久久久 | 国产成人在线一区二区 | 亚洲午夜精品一区二区三区他趣 | 久草美女 | 男女羞羞视频网站 | 欧美日韩一区免费 | 欧美精品国产精品 | 国产精品资源在线 | 日韩一区二 | 麻豆freexxxx性91精品 | 色天天综合久久久久综合片 | 免费黄网视频 | 中文字幕在线永久在线视频 | 亚洲天天| 国产在线小视频 | 欧美一区视频 | 国产精品成人国产乱一区 | 日韩高清国产一区在线 | 综合伊人 | 久久久久999 | 污污视频免费网站 | 成人免费视频观看 | 亚洲欧美一区二区三区在线 | 综合视频一区二区三区 | 国产精品a久久久久 | 91亚洲国产 | 久久精品亚洲精品国产欧美 | 男女羞羞视频网站18 | www.国产视频 | 我要看a级毛片 | 国产精品毛片一区二区在线看 | 欧美成人福利 | 国产伦精品一区二区三区照片91 | 成人综合在线观看 | 国产精品成人国产乱一区 | 日韩欧美在线免费观看 | 国产精品无码久久久久 | 国产一区二区三区免费看 | 国产成人99 | 爱爱视频在线观看 | 久久久夜夜夜 | 久久9热 | 欧美一级精品片在线看 | 国产福利91精品一区二区三区 | 黄色一级毛片 | 日韩视频一区二区三区在线观看 | 久热中文在线 | 中文字幕精品一区久久久久 | 日韩成人中文字幕 | 国产欧美日韩精品一区 | 亚洲91精品 | 黄色国产一级视频 | 日韩一区二区在线播放 | 成人中文网 | 天天天天干 | 久久久久久久久综合 | 美国一级毛片a | 午夜精品视频 | 亚洲成人网一区 | 精品一区二区不卡 | 久久视频一区 | 成人欧美一区二区三区在线观看 | 91国内视频在线观看 | 日韩在线无 | 在线免费观看色视频 | 国产小视频在线看 | 天堂视频在线 | 日韩免费精品 | 国久久久 | 午夜影院久久 | h亚洲视频| av男人电影天堂 | 999久久久 | 成人伊人 | 免费精品视频 | 亚洲免费婷婷 | 成人午夜小视频 | 81精品国产乱码久久久久久 | 成人一区视频 | 黄色一级片在线观看 | 日本精品免费观看 | 国产午夜手机精彩视频 | 色先锋av资源中文字幕 | 精品成人| 这里有精品在线视频 | 特级淫片日本高清视频免费 | 欧美日韩不卡视频 | 日韩艹逼视频 | 国产欧美精品一区二区三区 | 久久久精 | 我要看黄色一级大片 | 一区二区三区播放 | 亚洲精品网址 | 国产精品成人在线观看 | 精品久久国产 | 国产精品久久一区性色av图片 | 中文字幕精品一区 | 午夜午夜精品一区二区三区文 | 亚洲va中文字幕 |