成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識(shí)庫 > 基于HTML5新特性Mutation Observer實(shí)現(xiàn)編輯器的撤銷和回退操作

基于HTML5新特性Mutation Observer實(shí)現(xiàn)編輯器的撤銷和回退操作

熱門標(biāo)簽:呼和浩特外呼電銷系統(tǒng)排名 南通數(shù)據(jù)外呼系統(tǒng)推廣 外呼系統(tǒng)電話怎么投訴 阜陽企業(yè)外呼系統(tǒng) 外呼線穩(wěn)定線路 地圖標(biāo)注位置能賺錢嗎 申請(qǐng)400電話流程簡介 pageadm實(shí)現(xiàn)地圖標(biāo)注 邢臺(tái)縣地圖標(biāo)注app

MutationObserver介紹

MutationObserver給開發(fā)者們提供了一種能在某個(gè)范圍內(nèi)的DOM樹發(fā)生變化時(shí)作出適當(dāng)反應(yīng)的能力.該API設(shè)計(jì)用來替換掉在DOM3事件規(guī)范中引入的Mutation事件.

Mutation Observer(變動(dòng)觀察器)是監(jiān)視DOM變動(dòng)的接口。當(dāng)DOM對(duì)象樹發(fā)生任何變動(dòng)時(shí),Mutation Observer會(huì)得到通知。

Mutation Observer有以下特點(diǎn):

 •它等待所有腳本任務(wù)完成后,才會(huì)運(yùn)行,即采用異步方式
 •它把DOM變動(dòng)記錄封裝成一個(gè)數(shù)組進(jìn)行處理,而不是一條條地個(gè)別處理DOM變動(dòng)。
 •它即可以觀察發(fā)生在DOM節(jié)點(diǎn)的所有變動(dòng),也可以觀察某一類變動(dòng)

MDN的資料: MutationObserver

MutationObserver是一個(gè)構(gòu)造函數(shù), 所以創(chuàng)建的時(shí)候要通過 new MutationObserver;

實(shí)例化MutationObserver的時(shí)候需要一個(gè)回調(diào)函數(shù),該回調(diào)函數(shù)會(huì)在指定的DOM節(jié)點(diǎn)(目標(biāo)節(jié)點(diǎn))發(fā)生變化時(shí)被調(diào)用,

在調(diào)用時(shí),觀察者對(duì)象會(huì) 傳給該函數(shù) 兩個(gè)參數(shù):

    1:第一個(gè)參數(shù)是個(gè)包含了若干個(gè)MutationRecord對(duì)象的數(shù)組;

    2:第二個(gè)參數(shù)則是這個(gè)觀察者對(duì)象本身.

比如這樣:

     

復(fù)制代碼
代碼如下:

var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
console.log(mutation.type);
});
});

observer的方法

實(shí)例observer有三個(gè)方法: 1: observe  ;2: disconnect ; 3: takeRecords   ;

observe方法

observe方法:給當(dāng)前觀察者對(duì)象注冊需要觀察的目標(biāo)節(jié)點(diǎn),在目標(biāo)節(jié)點(diǎn)(還可以同時(shí)觀察其后代節(jié)點(diǎn))發(fā)生DOM變化時(shí)收到通知;

這個(gè)方法需要兩個(gè)參數(shù),第一個(gè)為目標(biāo)節(jié)點(diǎn), 第二個(gè)參數(shù)為需要監(jiān)聽變化的類型,是一個(gè)json對(duì)象,  實(shí)例如下:

       

復(fù)制代碼
代碼如下:

observer.observe( document.body, {
'childList': true, //該元素的子元素新增或者刪除
'subtree': true, //該元素的所有子元素新增或者刪除
'attributes' : true, //監(jiān)聽屬性變化
'characterData' : true, // 監(jiān)聽text或者comment變化
'attributeOldValue' : true, //屬性原始值
'characterDataOldValue' : true
});

disconnect方法

disconnect方法會(huì)停止觀察目標(biāo)節(jié)點(diǎn)的屬性和節(jié)點(diǎn)變化, 直到下次重新調(diào)用observe方法;

takeRecords

清空 觀察者對(duì)象的 記錄隊(duì)列,并返回一個(gè)數(shù)組, 數(shù)組中包含Mutation事件對(duì)象;

MutationObserver實(shí)現(xiàn)一個(gè)編輯器的redo和undo再適合不過了, 因?yàn)槊看沃付ü?jié)點(diǎn)內(nèi)部發(fā)生的任何改變都會(huì)被記錄下來, 如果使用傳統(tǒng)的keydown或者keyup實(shí)現(xiàn)會(huì)有一些弊端,比如:

1:失去滾動(dòng), 導(dǎo)致滾動(dòng)位置不準(zhǔn)確;

2:失去焦點(diǎn);
....
用了幾小時(shí)的時(shí)間,寫了一個(gè)通過MutationObserver實(shí)現(xiàn)的 undo 和 redo (撤銷回退的管理)的管理插件 MutationJS ,   可以作為一個(gè)單獨(dú)的插件引入:(http://files.cnblogs.com/files/diligenceday/MutationJS.js):


復(fù)制代碼
代碼如下:

/**
* @desc MutationJs, 使用了DOM3的新事件 MutationObserve; 通過監(jiān)聽指定節(jié)點(diǎn)元素, 監(jiān)聽內(nèi)部dom屬性或者dom節(jié)點(diǎn)的更改, 并執(zhí)行相應(yīng)的回調(diào);
* */
window.nono = window.nono || {};
/**
* @desc
* */
nono.MutationJs = function( dom ) {
//統(tǒng)一兼容問題
var MutationObserver = this.MutationObserver = window.MutationObserver ||
window.WebKitMutationObserver ||
window.MozMutationObserver;
//判斷瀏覽器是或否支持MutationObserver;
this.mutationObserverSupport = !!MutationObserver;
//默認(rèn)監(jiān)聽子元素, 子元素的屬性, 屬性值的改變;
this.options = {
'childList': true,
'subtree': true,
'attributes' : true,
'characterData' : true,
'attributeOldValue' : true,
'characterDataOldValue' : true
};
//這個(gè)保存了MutationObserve的實(shí)例;
this.muta = {};
//list這個(gè)變量保存了用戶的操作;
this.list = [];
//當(dāng)前回退的索引
this.index = 0;
//如果沒有dom的話,就默認(rèn)監(jiān)聽body;
this.dom = dom|| document.documentElement.body || document.getElementsByTagName("body")[0];
//馬上開始監(jiān)聽;
this.observe( );
};
$.extend(nono.MutationJs.prototype, {
//節(jié)點(diǎn)發(fā)生改變的回調(diào), 要把redo和undo都保存到list中;
"callback" : function ( records , instance ) {
//要把索引后面的給清空;
this.list.splice( this.index+1 );
var _this = this;
records.map(function(record) {
var target = record.target;
console.log(record);
//刪除元素或者是添加元素;
if( record.type === "childList" ) {
//如果是刪除元素;
if(record.removedNodes.length !== 0) {
//獲取元素的相對(duì)索引;
var indexs = _this.getIndexs(target.children , record.removedNodes );
_this.list.push({
"undo" : function() {
_this.disconnect();
_this.addChildren(target, record.removedNodes ,indexs );
_this.reObserve();
},
"redo" : function() {
_this.disconnect();
_this.removeChildren(target, record.removedNodes );
_this.reObserve();
}
});
//如果是添加元素;
};
if(record.addedNodes.length !== 0) {
//獲取元素的相對(duì)索引;
var indexs = _this.getIndexs(target.children , record.addedNodes );
_this.list.push({
"undo" : function() {
_this.disconnect();
_this.removeChildren(target, record.addedNodes );
_this.reObserve();
},
"redo" : function () {
_this.disconnect();
_this.addChildren(target, record.addedNodes ,indexs);
_this.reObserve();
}
});
};
//@desc characterData是什么鬼;
//ref : http://baike.baidu.com/link?url=Z3Xr2y7zIF50bjXDFpSlQ0PiaUPVZhQJO7SaMCJXWHxD6loRcf_TVx1vsG74WUSZ_0-7wq4_oq0Ci-8ghUAG8a
}else if( record.type === "characterData" ) {
var oldValue = record.oldValue;
var newValue = record.target.textContent //|| record.target.innerText, 不準(zhǔn)備處理IE789的兼容,所以不用innerText了;
_this.list.push({
"undo" : function() {
_this.disconnect();
target.textContent = oldValue;
_this.reObserve();
},
"redo" : function () {
_this.disconnect();
target.textContent = newValue;
_this.reObserve();
}
});
//如果是屬性變化的話style, dataset, attribute都是屬于attributes發(fā)生改變, 可以統(tǒng)一處理;
}else if( record.type === "attributes" ) {
var oldValue = record.oldValue;
var newValue = record.target.getAttribute( record.attributeName );
var attributeName = record.attributeName;
_this.list.push({
"undo" : function() {
_this.disconnect();
target.setAttribute(attributeName, oldValue);
_this.reObserve();
},
"redo" : function () {
_this.disconnect();
target.setAttribute(attributeName, newValue);
_this.reObserve();
}
});
};
});
//重新設(shè)置索引;
this.index = this.list.length-1;
},
"removeChildren" : function ( target, nodes ) {
for(var i= 0, len= nodes.length; i<len; i++ ) {
target.removeChild( nodes[i] );
};
},
"addChildren" : function ( target, nodes ,indexs) {
for(var i= 0, len= nodes.length; i<len; i++ ) {
if(target.children[ indexs[i] ]) {
target.insertBefore( nodes[i] , target.children[ indexs[i] ]) ;
}else{
target.appendChild( nodes[i] );
};
};
},
//快捷方法,用來判斷child在父元素的哪個(gè)節(jié)點(diǎn)上;
"indexOf" : function ( target, obj ) {
return Array.prototype.indexOf.call(target, obj)
},
"getIndexs" : function (target, objs) {
var result = [];
for(var i=0; i<objs.length; i++) {
result.push( this.indexOf(target, objs[i]) );
};
return result;
},
/**
* @desc 指定監(jiān)聽的對(duì)象
* */
"observe" : function( ) {
if( this.dom.nodeType !== 1) return alert("參數(shù)不對(duì),第一個(gè)參數(shù)應(yīng)該為一個(gè)dom節(jié)點(diǎn)");
this.muta = new this.MutationObserver( this.callback.bind(this) );
//馬上開始監(jiān)聽;
this.muta.observe( this.dom, this.options );
},
/**
* @desc 重新開始監(jiān)聽;
* */
"reObserve" : function () {
this.muta.observe( this.dom, this.options );
},
/**
*@desc 不記錄dom操作, 所有在這個(gè)函數(shù)內(nèi)部的操作不會(huì)記錄到undo和redo的列表中;
* */
"without" : function ( fn ) {
this.disconnect();
fn&fn();
this.reObserve();
},
/**
* @desc 取消監(jiān)聽;
* */
"disconnect" : function () {
return this.muta.disconnect();
},
/**
* @desc 保存Mutation操作到list;
* */
"save" : function ( obj ) {
if(!obj.undo)return alert("傳進(jìn)來的第一個(gè)參數(shù)必須有undo方法才行");
if(!obj.redo)return alert("傳進(jìn)來的第一個(gè)參數(shù)必須有redo方法才行");
this.list.push(obj);
},
/**
* @desc ;
* */
"reset" : function () {
//清空數(shù)組;
this.list = [];
this.index = 0;
},
/**
* @desc 把指定index后面的操作刪除;
* */
"splice" : function ( index ) {
this.list.splice( index );
},
/**
* @desc 往回走, 取消回退
* */
"undo" : function () {
if( this.canUndo() ) {
this.list[this.index].undo();
this.index--;
};
},
/**
* @desc 往前走, 重新操作
* */
"redo" : function () {
if( this.canRedo() ) {
this.index++;
this.list[this.index].redo();
};
},
/**
* @desc 判斷是否可以撤銷操作
* */
"canUndo" : function () {
return this.index !== -1;
},
/**
* @desc 判斷是否可以重新操作;
* */
"canRedo" : function () {
return this.list.length-1 !== this.index;
}
});

MutationJS如何使用

那么這個(gè)MutationJS如何使用呢?


復(fù)制代碼
代碼如下:

//這個(gè)是實(shí)例化一個(gè)MutationJS對(duì)象, 如果不傳參數(shù)默認(rèn)監(jiān)聽body元素的變動(dòng);
mu = new nono.MutationJs();
//可以傳一個(gè)指定元素,比如這樣;
mu = new nono.MutationJS( document.getElementById("div0") );
//那么所有該元素下的元素變動(dòng)都會(huì)被插件記錄下來;

Mutation的實(shí)例mu有幾個(gè)方法:

1:mu.undo()  操作回退;

2:mu.redo()   撤銷回退;

3:mu.canUndo() 是否可以操作回退, 返回值為true或者false;

4:mu.canRedo() 是否可以撤銷回退, 返回值為true或者false;

5:mu.reset() 清空所有的undo列表, 釋放空間;

6:mu.without() 傳一個(gè)為函數(shù)的參數(shù), 所有在該函數(shù)內(nèi)部的dom操作, mu不做記錄;

MutationJS實(shí)現(xiàn)了一個(gè)簡易的 undoManager 提供參考,在火狐和chrome,谷歌瀏覽器,IE11上面運(yùn)行完全正常:


復(fù)制代碼
代碼如下:

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script src="http://cdn.bootcss.com/jquery/1.9.0/jquery.js"></script>
<script src="http://files.cnblogs.com/files/diligenceday/MutationJS.js"></script>
</head>
<body>
<div>
<p>
MutationObserver是為了替換掉原來Mutation Events的一系列事件, 瀏覽器會(huì)監(jiān)聽指定Element下所有元素的新增,刪除,替換等;
</p>
<div style="padding:20px;border:1px solid #f00">
<input type="button" value="撤銷操作" id="prev">;
<input type="button" value="撤銷操作回退" id="next">;
</div>
<input type="button" value="添加節(jié)點(diǎn)" id="b0">;
<input value="text" id="value">
<div id="div"></div>
</div>
<script>
window.onload = function () {
window.mu = new nono.MutationJs();
//取消監(jiān)聽
mu.disconnect();
//重新監(jiān)聽
mu.reObserve();
document.getElementById("b0").addEventListener("click", function ( ev ) {
div = document.createElement("div");
div.innerHTML = document.getElementById("value").value;
document.getElementById("div").appendChild( div );
});
document.getElementById("prev").addEventListener("click", function ( ev ) {
mu.undo();
});
document.getElementById("next").addEventListener("click", function ( ev ) {
mu.redo();
});
};
</script>
</body>
</html>

DEMO在IE下的截圖:

MutatoinObserver的瀏覽器兼容性:

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support
18

webkit

26

14(14) 11 15 6.0WebKit

標(biāo)簽:辛集 內(nèi)蒙古 鶴崗 黃山 楊凌 德州 撫順 蚌埠

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《基于HTML5新特性Mutation Observer實(shí)現(xiàn)編輯器的撤銷和回退操作》,本文關(guān)鍵詞  基于,HTML5,新特性,新,特性,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《基于HTML5新特性Mutation Observer實(shí)現(xiàn)編輯器的撤銷和回退操作》相關(guān)的同類信息!
  • 本頁收集關(guān)于基于HTML5新特性Mutation Observer實(shí)現(xiàn)編輯器的撤銷和回退操作的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    成人亚洲精品777777大片| 色域天天综合网| 国产欧美综合色| 5g影院天天爽成人免费下载| 久久久久久婷婷| 国产精品剧情在线亚洲| 国产综合18久久久久久| 日本中文字幕免费| 日韩欧美亚洲一区二区| 好吊一区二区三区| 中文字幕一区二区三区免费看| 91福利精品第一导航| 99免费看香蕉视频| 国产精品合集一区二区| 午夜视频www| 久久66热re国产毛片基地| 97偷自拍亚洲综合二区| 猛男gaygay欧美视频| 亚洲天堂av网| 日韩欧美高清dvd碟片| 国产精品综合视频| 成人高h视频在线| 国a精品视频大全| 欧美黄色免费在线观看| av激情成人网| 久色国产在线| ****av在线网毛片| av3级在线| 欧美精品一区二| 91大神在线播放精品| 高清乱码毛片入口| 日本精品视频在线播放| 成人精品一区二区三区电影免费| 欧美一区视频在线| 国产真乱mangent| 一本久道久久综合多人| 在线国产小视频| 午夜国产一区二区三区| 欧美精品videos另类| 亚洲五月激情网| 18视频在线观看网站| 亚洲国产精品久久91精品| 中文字幕高清在线播放| 第一区第二区在线| 欧美精品二区| av福利在线观看| 在线观看av网页| 欧美性videos高清精品| 欧美亚洲综合一区| 亚洲成熟女性毛茸茸| 狠狠色狠狠色综合系列| 一级香蕉视频在线观看| 在线观看精品一区二区三区| 一区二区日韩| 精品区在线观看| 黄动漫在线免费观看| 日韩欧美电影一区| 成人av动漫在线观看| 99中文字幕| 中文字幕亚洲欧美在线不卡| 综合干狼人综合首页| 日本aⅴ免费视频一区二区三区| 黄色三级视频在线观看| 2024短剧网剧在线观看| 国产精品久久久久久免费播放| 国产精品手机在线| www.99在线| 久久精品国产亚洲7777| 欧洲美女7788成人免费视频| 男女av免费观看| 丁香花高清在线观看完整版| 久久久人成影片一区二区三区| 欧美最猛性xxxx免费| 亚洲免费视频一区| 欧美性大战久久久久久久| 欧美三级韩国三级日本三斤在线观看| 理论片一区二区在线| 波多野结衣视频一区| 超碰在线99| 日韩精品一区二区三区免费观看| 久久久久久久久四区三区| 丰满熟女人妻一区二区三区| 国产午夜精品一区二区理论影院| 国产福利精品av综合导导航| 黄色一级大片在线免费看国产一| 一区二区三区中文字幕| 久久久精品日本| 图片区小说区区亚洲五月| 免费一级毛片在线观看| 亚洲国产成人精品女人久久| 不卡电影免费在线播放一区| 日韩一卡二卡三卡四卡| 免费美女久久99| www.在线视频| 骚虎视频欧美| 成人毛片av在线| 午夜影院免费视频| av免费在线观看网址| 暖暖视频日本免费| 日韩中文字幕有码| 久久免费99精品久久久久久| 99精品欧美一区二区三区小说| 少妇大叫太粗太大爽一区二区| 国产精品老熟女视频一区二区| 俄罗斯女人裸体性做爰| 97精品人妻一区二区三区香蕉| 日韩中文字幕二区| 国产精品精品久久久久久| 欧美不卡123| 欧美成人做性视频在线播放| 中文久久电影小说| 日本一区二区视频在线| 日本精品一区二区三区在线| 最新中文字幕av| 91视频最新地址| 欧美成人精品欧美一级私黄| 亚洲一区二区三区精品视频| www.综合色| 日本一区二区三区在线视频| 久久久久久久久久免费视频| 成人超碰在线| 黄色一级免费| 亚洲香蕉在线视频| 婷婷亚洲一区二区三区| 51午夜精品| 一区二区三区精品久久久| 国产丝袜不卡| 欧美福利第一页| 性高湖久久久久久久久aaaaa| 综合久久久久综合| 精品淫伦v久久水蜜桃| 国产丝袜精品视频| 中文字幕一区三区久久女搜查官| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 免费成人结看片| 亚洲视频在线观看一区二区| 麻豆精品精品国产自在97香蕉| 一区二区三区四区av| 亚洲天天综合| 成人在线电影网站| 色网站在线看| 久久久久久国产精品一区| 天天操综合520| 性生活三级视频| 国产国语刺激对白av不卡| 亚洲电影在线播放| 欧美巨大丰满猛性社交| 成人美女视频在线看| 91精品一区二区三区综合| www.com久久久| 国产成人av一区二区三区在线观看| 亚洲欧美日本国产专区一区| 亚洲精品成人无码熟妇在线| 亚洲精品一区二区三区新线路| 女人公敌韩国| 免费黄色在线网址| 亚洲视频视频在线| 国产精品成人免费精品自在线观看| 色无极亚洲影院| 国产激情视频一区二区三区欧美| 美女啪啪无遮挡| 九色成人在线| 国产乱肥老妇国产一区二| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的| 天堂8中文在线| 亚洲精品成a人在线观看| 成人免费黄色小视频| 日韩成人手机在线| 少妇人妻无码专区视频| 日韩a级黄色片| 91在线|亚洲| 日韩精品中文字幕在线观看| 日韩不卡在线播放| 一本色道久久综合亚洲精品不| 91精品视频在线免费观看| 日韩视频中午一区| 大陆极品少妇内射aaaaa| 五月激情在线| 精品国精品国产尤物美女| 任我爽在线视频精品一| 四虎精品一区二区永久在线观看| 激情综合色丁香一区二区| 欧美free性69| 懂色av噜噜一区二区三区av| 在线一区二区三区四区五区| 免费毛片一区二区三区| 在线视频您懂的| 日韩第一区第二区| 神马久久久久久久久| 久久久久久久黄色| 色综合咪咪久久网| 青青草原国产在线| 九九热最新地址| 久久久噜噜噜久久中文字免| 欧美日韩国产天堂| 一区二区三区免费观看视频| 欧美精品videos极品| 自拍av一区二区三区| 福利小视频在线观看| 国产日韩欧美大片| 伊人一区二区三区| 成人精品毛片| 91精品国产毛片武则天| 男男gay免费网站| 中文乱码字幕av网站| 经典一区二区三区| 日韩精品久久一区二区| 国产美女免费无遮挡| 国产精品一区二区av影院萌芽| 亚洲国产日韩在线一区模特| 国产粉嫩在线观看| 蜜桃久久久久| 亚州精品永久观看视频| 日韩欧美一区二区三区在线视频| 国产三级三级在线观看| 熟妇人妻中文av无码| 欧美xxxxx视频| 精品无人区一区二区| 成人高清av在线| 亚洲小说区图片区都市| 欧美成人综合色| 日韩一卡二卡三卡| 国产成年人免费视频| 日韩欧美一级特黄在线播放| av在线加勒比| 小泽玛利亚一区二区三区视频| 黄页免费观看| 欧美色图影院| 男人舔女人下面高潮视频| 欧美国产日本视频| 一区二区在线视频| 国产精品外围在线观看| 日韩理伦片在线| 亚洲国产果冻传媒av在线观看| 欧美aaaa视频| 国产精品久久久久久久久夜色| 国产精品国产自产拍高清av王其| 日本精品免费一区二区三区| 激情无码人妻又粗又大| 欧美性猛交xxxx黑人交| av在线收看| 超污视频在线播放| 日韩欧美国产大片| 中文字幕在线久热精品| 91精品产国品一二三产区| 久久久精品在线视频| 香蕉久久久久久av成人| 激情图区综合网| 无遮挡的视频在线观看| 在线成人激情| 精品91自产拍在线观看一区| 天天综合天天综合色| 国产欧美一区二区精品久导航| 成人欧美一区二区三区在线观看| 久久精品日产第一区二区三区高清版| 中文字幕一区二区人妻视频| 国产一级片免费视频| 私库av在线播放| 天天色 色综合| 欧美性猛交xxxx乱大交丰满| 一级片免费在线观看| 欧美一区二区激情| 国产91在线播放九色| 久久久久久久久久久久91| 欧美日韩一区二| 在线观看欧美| 一区二区三区丝袜| 日本免费观看视| 国产精品久久久久久久免费大片| 青草青草久热精品视频在线网站| 欧美性xxxx18| 一二三四社区在线视频6| 97久久夜色精品国产| 亚洲日韩欧美一区二区在线| 久久免费视频精品| 91久久精品国产91久久性色tv| 亚洲成人999| 男人的天堂导航| 亚洲高清极品| 无码aⅴ精品一区二区三区浪潮| 欧美系列日韩一区| 色丁香婷婷综合久久| 国内精彩免费自拍视频在线观看网址| 中文字幕二三区不卡| 欧美黄色大片网站| 亚洲网址你懂得| 国产在线色视频| 九色蝌蚪在线| 50路60路老熟妇啪啪| 色哟哟一一国产精品| 99精品热6080yy久久| 亚洲成人99| 色屁屁草草影院ccyycom| 国产美女免费看| 一区二区三区在线播放| 国产成年人在线观看| 亚洲一区影院| www.超碰com| 久久精品国产亚洲av久| 91精品国产综合久久久久久久| 国产a一区二区| 成人性生交大片免费看96| 日韩欧美另类在线| 天天色天天色| 中文字幕在线免费看| 久久久无码一区二区三区| 4438欧美| 久久亚洲国产精品一区二区| 美女的诞生在线观看高清免费完整版中文| 蜜臀av午夜精品久久| 欧美日韩一区三区四区| 青青草视频免费在线观看| 男女视频免费网站| 国产免费黄色一级片| 四虎成人永久地址| 成人一级片网址| 日本女人性生活视频| 国产特级aaaaaa大片| 91精品亚洲| 国产狼人综合免费视频| 亚洲国产精品无码久久| 成年人网站免费看| 在线免费观看一区二区三区| 69成人在线| 久久久久久久九九九九| 欧美视频网站| 欧美无砖专区免费| 亚洲女人被黑人巨大进入|