一起草最新网址_日韩一区二区麻豆国产_91视频婷婷_日本一区二区视频在线_日韩激情一区二区三区_国产另类第一区_成人免费在线播放视频_亚洲永久精品ww.7491进入_久久这里有精品视频_久久精品一级片_日韩av在线网页_波多野结衣不卡视频

怎樣用DHTML與XML制作Ajax幻燈片_AJAX教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:怎樣處理書簽和后退按鈕
本文將展示一個開源JavaScript庫,該腳本庫給AJAX應用程序帶來了書簽和后退按鈕支持。在學習完這個教程后,開發人員將能夠獲得對一個AJAX問題的解決方案(甚至連Google Maps和Gmail現在都不提供該解決方案):一個強大的、可用的書簽和后退前進功能,其操作行

Ajax 幻燈片放映

個人圖像管理應用程序(如 Macintosh® 上的 Apple® iPhoto®)使得幻燈片瀏覽廣為人知。在幻燈片瀏覽中,圖像按照時間順序先后淡入淡出。此外,圖片還通過所謂的 “Ken Burns Effect” 進行移動和縮放。

在該例中,我讓瀏覽器從服務器上下載一個圖像列表。然后使用動態 HTML(DHTML)把圖片列表組成一個幻燈片。我使用隨機的緩慢移動、縮放和漸變來改變圖片,實現了令人滿意的 Ken Burns Effect 版本,而不需要下載 Macromedia® Flash 或其他重量級的動畫工具。

體系結構

要了解 Ajax 有何不同,首先必須理解當前的 Web 編程模型。客戶機和服務器之間的簡單交互如 圖 1 所示。

圖 1. 客戶機-服務器交互的 Web V1.0 模型

Web 瀏覽器或者客戶機 向 Web 服務器發出 GET 或 POST 請求。服務器格式化 HTML 響應。客戶機解析 HTML 并顯示給用戶。如果用戶單擊其他鏈接和按鈕,就向服務器發出另一個請求,用服務器返回的新頁面替換當前頁面。

新模型具有更多的異步特色,如 圖 2 所示。

圖 2. 客戶機-服務器交互的 Ajax 模型

在新的模型中,和以前一樣,服務器也返回 HTML 頁面。但是這個頁面中有一些 JavaScript 代碼。在需要的時候,這些代碼向服務器請求更多信息。這些請求可以是簡單的 GET 請求(Representational State Transfer (REST) 服務)或者 POST 請求(SOAP)。

然后,JavaScript 代碼解析響應(通常用 XML 編碼)并動態更新頁面以反映新的數據。除了 XML 外,還返回 JavaScript Serialized Object Notation(JSON)格式編碼的數據。瀏覽器很容易理解這類數據,但其他類型的客戶機則不行。返回 XML 的意義在于瀏覽器之外的其他客戶機也能解釋數據。選擇由您來決定并依賴于具體的應用程序。

開發 Ajax 幻燈片的第一步是結合 REST 數據服務。該例中使用 PHP 頁面返回所有可用的幻燈片圖像及其大小(寬和高)。所有圖像都放在 images 目錄中。文件名格式為 name_width_height.jpg,比如 oso1_768_700.jpg 表示該文件是我的狗 Oso 的照片,寬 768 像素,高 700 像素。我堅持使用這種命名方式,因為這樣就很容易確定圖片的寬和高,而不用費力去打開 Adobe® PhotoShop® 或 Macromedia Fireworks。

我使用 清單 1 所示的 PHP 服務器代碼來提供圖片列表。

清單 1. slides.php 服務器頁面

 

<?php
header( "Content-type: text/xml" );
?>
<slides>
<?php
if (handle = opendir('images')) {

while (false !== (file = readdir(handle)))
{
if ( preg_match( "/[.]jpg/", file ) ) {
preg_match( "/_(\d+)_(\d+)[.]/", file, found );
?>
<slide src="images/<?php echo file; ?>"
width="<?php echo found[1]; ?>"
height="<?php echo found[2]; ?>" /><?php echo( "\n" ); ?>
<?php
}
}
closedir(handle);
}
?>
</slides>

代碼很簡單。首先將內容類型設置為 XML。讓瀏覽器將該文檔識別為 XML 并為其創建文檔對象模型(DOM)至關重要。代碼從 <slides> 標記開始,然后讀取圖片目錄并為遇到的每個圖片創建 <slide> 標記。最后腳本結束 <slides> 標記。

如果用 Mozilla® Firefox® 瀏覽器打開(在我的機器上)本地主機 kenburns 目錄中的該頁面,就會看到 圖 3 所示的結果。

圖 3. slides.php 服務器腳本的輸出

一共三幅圖片:我的女兒和我的兩條狗。當然在這里可以增加任何需要的細節或者多媒體,但我盡量保持例子的簡單性。

檢索 XML

下一步就是編寫一個 HTML 頁面(如 清單 2 所示)從服務器讀取數據并檢驗瀏覽器和服務器之間使用的 Ajax 連接。這段 HTML 代碼包含內嵌的 JavaScript 代碼,檢索 XML 并打開一個警告窗口顯示服務器返回的文本。

清單 2. 簡單的 Ajax 讀取數據頁面

 

<html>
<body>
<script>
function processReqChange()
{
if (req.readyState == 4 && req.status == 200 && req.responseXML != null)
{
alert( req.responseText );
}
}

function loadXMLDoc( url )
{
req = false;
if(window.XMLHttpRequest) {
try {
req = new XMLHttpRequest();
} catch(e) {
req = false;
}
}
else if(window.ActiveXObject)
{
try {
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
req = false;
}
}
}
if(req) {
req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.send("");
}
}

loadXMLDoc( "http://localhost/kenburns/slides.php" );
</script>

</body>
</html>

代碼從指定的 URL 獲取 XML 內容,然后 loadXMLDoc 函數啟動 Ajax 請求。檢索頁面的請求異步發出并返回結果。請求完成后,對結果調用 processReqChange 函數。這里用 processReqChange 函數在警告窗口中顯示 responseText 的函數值。在我的 Firefox 瀏覽器中調用該頁面的結果如 圖 4 所示。

圖 4. 在警告窗口中顯示的 XML

開局不錯。毫無疑問,我們從服務器取回了 XML 數據。但是有必要指出幾點。首先要注意 URL 使用了絕對路徑,包括域名等等。對于 Ajax 來說這是唯一有效的 URL 格式。編寫 Ajax JavaScript 代碼的服務器代碼總是創建有效的、完整格式的 URL。

這里不那么明顯的另一點是 Ajax 的安全保護措施。JavaScript 代碼不能請求任意的 URL。URL 的域名必須和該頁面相同。在這里域名就是 localhost。但必須指出不能呈現 www.mycompany.com 的 HTML 但卻讓腳本從 data.mycompany.com 檢索數據。域必須完全相同,包括子域名。

有趣的另一點是 loadXMLDoc 中的代碼,似乎是費力地創建一個請求對象。為何這么麻煩呢?Internet Explorer 7 的預覽版沒有內建 XMLHTTPRequest 對象類型。因此必須使用 Microsoft ActiveX® 控件。

最后在 processReqChange 函數中,可以看到我在查看 readyState 是否等于 4,status 是否設為 200。readyState 的值 4 表示事務已經完成。status 的值 200 表示頁面是有效的。如果沒有找到頁面,就可能會得到錯誤消息 404,就像您在瀏覽器中看到的那樣。這里沒有處理異常情況,因為這僅僅是一個例子,不過發布的 Ajax 代碼應該處理返回錯誤的請求。

動態創建 HTML

在說明如何創建幻燈片放映之前,首先擴展現在的例子,讓 processReqChange 函數用服務器返回的 XML 請求結果創建一個 HTML 表格。這樣做可以驗證兩件事:能夠讀取 XML 并能夠根據 XML 動態創建 HTML。

清單 3 顯示了修改后的代碼,它將從返回的 XML 創建表格。

清單 3. 改進的測試頁面

 

<html>
<body>
<table>
<tbody id="dataTable">
</tbody>
</table>

<script>
function processReqChange()
{
if (req.readyState == 4 && req.status == 200 && req.responseXML != null)
{
var dto = document.getElementById( 'dataTable' );

var items = [];
var nl = req.responseXML.getElementsByTagName( 'slide' );
for( var i = 0; i < nl.length; i++ )
{
var nli = nl.item( i );
var src = nli.getAttribute( 'src' ).toString();
var width = parseInt( nli.getAttribute( 'width' ).toString() );
var height = parseInt( nli.getAttribute( 'height' ).toString() );

var trNode = document.createElement( 'tr' );

var srcNode = document.createElement( 'td' );
srcNode.innerHTML = src;
trNode.appendChild( srcNode );

var widthNode = document.createElement( 'td' );
widthNode.innerHTML = width.toString();
trNode.appendChild( widthNode );

var heightNode = document.createElement( 'td' );
heightNode.innerHTML = height.toString();
trNode.appendChild( heightNode );

dto.appendChild( trNode );
}
load_slides( items );
start_slides();
}
}

function loadXMLDoc( url )
{
req = false;
if(window.XMLHttpRequest) {
try {
req = new XMLHttpRequest();
} catch(e) {
req = false;
}
}
else if(window.ActiveXObject)
{
try {
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
req = false;
}
}
}
if(req) {
req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.send("");
}
}

loadXMLDoc( "http://localhost/kenburns/slides.php" );
</script>

</body>
</html>

在瀏覽器中打開該頁面將顯示 圖 5 所示的結果。

圖 5. 修改后的測試頁

修改后的 processReqChange 代碼現在查看 responseXML 對象而不是 responseText 文本。此外,它還使用 getElementsByTagName 訪問所有的 <slide> 標記。然后解析 src、width 和 height 屬性,并使用 document 對象的 createElement 方法創建行和單元格來存放數據。該方法使用的 createElement 遠比過去的老方法健壯,原來要建立一個包含表格內容的 HTML 字符串,然后用 innerHTML 將數據添加到已有的元素中。

創建幻燈片放映

現在已經有了能夠確定幻燈片中圖像的 Web 服務,還需要顯示這些幻燈片并執行 Ken-Burns-Effect 動畫的客戶端代碼。為此必須將執行三種基本功能的 JavaScript 對象結合起來:

1、封裝圖像
2、提供基本的動畫引擎
3、實現特效(比如移動、縮放和漸變)

封裝圖像

首先從圖像容器開始,我創建一個類 ImageInfo,如 清單 4 所示。

清單 4. ImageInfo.js

 

function ImageInfo( src, width, height, htmlObj )
{
this.src = src;
this.width = width;
this.height = height;
this.current_width = width;
this.current_height = height;

this.htmlObj = htmlObj;
this.htmlObj.src = this.src;
this.htmlObj.width = this.current_width;
this.htmlObj.height = this.current_height;
}

ImageInfo.prototype.set_opacity = function( opacity )
{
this.htmlObj.style.MozOpacity = opacity / 100;
var f = 'progid:DXImageTransform.Microsoft.Alpha(opacity='+opacity+')';
this.htmlObj.style.filter = f;
}

ImageInfo.prototype.set_position = function( x, y )
{
this.htmlObj.style.left = x+'px';
this.htmlObj.style.top = y+'px';
}

ImageInfo.prototype.set_size = function( w, h )
{
this.current_width = w;
this.current_height = h;

this.htmlObj.width = this.current_width;
this.htmlObj.height = this.current_height;
}

ImageInfo.prototype.get_image = function()
{
return this.htmlObj;
}

ImageInfo.prototype.hide = function()
{
this.htmlObj.style.visibility = 'hidden';
}

ImageInfo.prototype.show = function()
{
this.htmlObj.style.visibility = 'visible';
}

幻燈片中每幅圖片都有一個對應的 ImageInfo 對象。該對象封裝了圖像信息:src、width 和 height。該對象還包含對在文檔中顯示圖像的 HTML <img> 標記的引用,以及移動圖像、設置透明度等的 helper 方法。注意,在 Firefox 和其他基于 Gecko® 的瀏覽器中,MozOpacity 樣式用于設置不透明性。Internet Explorer 中則使用過濾器效果。

創建簡單的動畫引擎

下面我們來編寫一個簡單的動畫引擎。Animation.js 文件中的代碼如 清單 5 所示。

清單 5. Animation.js

 

function Animation( am, img, seconds, effects )
{
this.img = img;
this.animationManager = am;
this.seconds = seconds;
this.effects = effects;
this.startMS = 0;
}

Animation.prototype.start = function()
{
this.animationManager.add( this );
this.startMS = 0;

this.img.hide();
for( var e in this.effects )
{
this.effects[e].apply( 0 );
}
this.img.show();
}

Animation.prototype.animate = function()
{
var d = new Date();
if ( this.startMS == 0 )
this.startMS = d.valueOf();

var p = (((d.valueOf()-this.startMS)/1000)/this.seconds)*100;
for( var e in this.effects )
this.effects[e].apply( p );
}

Animation.prototype.done = function()
{
var d = new Date();
return ( ( d.valueOf() - this.startMS ) / 1000 ) > this.seconds;
}

function AnimationManager( speed )
{
this.animations = [];
var self = this;
window.setInterval( function() { self.idle(); }, speed );
}

AnimationManager.prototype.add = function( anim )
{
this.animations.push( anim );
}

AnimationManager.prototype.idle = function()
{
if ( this.animations.length > 0 )
{
this.animations[0].animate();
if ( this.animations[0].done() )
this.animations.shift();
if ( this.animations.length == 0 )
this.on_finished();
}
}

AnimationManager.prototype.on_finished = function()
{
}

 

清單 5 包含兩個類:Animation 和 AnimationManager。AnimationManager 類控制定時器并向其 Animation 對象列表中的第一項發送動畫消息。當 Animation 對象報告自己已經完成的時候,該類就轉向下一項,依此類推。

Animation 在一定的時間(按秒數指定)內對特定圖片應用一系列特效。Animation 對象需要計算完成度消息并將其發送給每種特效的 apply 方法。特效然后根據這個百分比計算應該如何處理圖像。比如,移動特效知道起點和終點,可以根據這個百分比計算應該將圖像放到何處。如果是 50%,圖像應該移到起點和終點之間。

作為我工作的一部分,同時也為了撰寫本文,我考察了大量的 JavaScript 動畫代碼。JavaScript 動畫經常因為不穩定而受到指責,因為所有 JavaScript 動畫都使用 window.setInterval 方法來完成。這是一個定時器方法,同時指定了回調時間間隔和回調函數。Web 上的大部分代碼都要求每次調用該函數時動畫移動一步。但這并不能真正工作,因為告訴瀏覽器的間隔僅僅是一個建議。如果規定 20 毫秒,但實際上可能第一次在 25 毫秒時調用,下一次卻要等到一秒鐘以后。瀏覽器是單線程的,因此不能依賴于定時器。

解決方案是使用 Date 對象的 valueOf 方法確定動畫開始了多長時間。這個時間差是用毫秒計的,用于確定當 setInterval 定時器離開時動畫應該執行百分之多少。該方法可以提供規定的任意長時間的平滑動畫。

執行特效

三個核心類的最后一個是 Ken Burns Effects。這些特效通過 Animation 對象應用于圖像,如 清單 6 所示。

清單 6. KenBurnsAnimations.js

 

function KenBurnsFader( img, windowSize )
{
this.img = img;
this.windowSize = windowSize;
}

KenBurnsFader.prototype.apply = function( percent )
{
var opacity = 100;

if ( percent <= this.windowSize )
opacity = ( percent / this.windowSize ) * 100;
else if ( percent >= ( 100 - this.windowSize ) )
opacity = ( ( 100 - percent ) / this.windowSize ) * 100;

this.img.set_opacity( opacity );
}

function KenBurnsZoomer( img, start, end, cw, ch )
{
this.start = start;
this.end = end;
this.img = img;

var wr = this.img.width / cw;
var nw = this.img.width * wr;
var nh = this.img.height * wr;

this.sw = ( nw * ( this.start / 100 ) );
this.ew = ( nw * ( this.end / 100 ) );
this.sh = ( nh * ( this.start / 100 ) );
this.eh = ( nh * ( this.end / 100 ) );
this.dw = ( this.ew - this.sw ) / 100;
this.dh = ( this.eh - this.sh ) / 100;
}

KenBurnsZoomer.prototype.apply = function( percent )
{
this.img.set_size(
this.sw + ( this.dw * percent ),
this.sh + ( this.dh * percent ) );
}

function KenBurnsMover( img, sx, sy, ex, ey, cw, ch )
{
this.img = img;
this.sx = sx / 100;
this.ex = ex / 100;
this.sy = sy / 100;
this.ey = ey / 100;
this.cw = cw;
this.ch = ch;
this.wr = this.img.width / this.cw;
}

KenBurnsMover.prototype.apply = function( percent )
{
var nw = this.img.current_width * this.wr;
var nh = this.img.current_height * this.wr;

var cntw = ( ( this.cw / 2 ) - ( nw / 2 ) );
var cnth = ( ( this.ch / 2 ) - ( nh / 2 ) );

var sx = ( nw * this.sx );
var ex = ( nw * this.ex );
var sy = ( nh * this.sy );
var ey = ( nh * this.ey );
var dx = ( ex - sx ) / 100;
var dy = ( ey - sy ) / 100;
var x = cntw + sx + ( dx * percent );
var y = cntw + sy + ( dy * percent );

this.img.set_position( x, y );
}

 

這三個類分別處理應用于圖像的不同特效。KenBurnsFader 類使用不透明度處理圖像的淡入淡出。KenBurnsZoomer 類處理圖像的縮放,從最初的大小到最終的大小。KenBurnsMover 類處理圖像的移動,從起點到終點(用圖像的百分比指定)。

經過一些試驗后,我發現最吸引人的移動特效是相對于窗口中心從一個角移動到另一個角。KenBurnsMover 類的 apply 方法包含一些復雜的數學運算,不僅相對于包含圖像的 <div> 標記的中心來移動,還要計算圖像和 <div> 標記的相對大小,這樣在小窗口中移動的距離就小,在大窗口中移動的距離就大。放大倍數根據窗口的高度確定。

實現非 Ajax DHTML

有了這些基礎類之后,就可以實現幻燈片的非 Ajax DHTML 版本來進行測試了,如 清單 7 所示。

清單 7. 非 Ajax 幻燈片放映

 

<html>
<head>
<style type="text/css">
body { background: black; margin: 0px; padding: 0px; }
</style>
<script src="KenBurnsAnimations.js">
</script>
<script src="Animation.js">
</script>
<script src="ImageInfo.js">
</script>
<script>
var g_animationManager = new AnimationManager( 50 );
var g_current_slide = 0;
var g_slides = [];
var g_directions = [
{ sx: [ -30, 0 ], ex: [ 5, 40 ], sy: [ -30, 0 ], ey: [ 5, 40 ] }, // nw -> se
{ sx: [ 5, 40 ], ex: [ -30, 0 ], sy: [ 5, 40 ], ey: [ -30, 0 ] }, // ne -> sw
{ sx: [ 5, 40 ], ex: [ -30, 0 ], sy: [ 5, 40 ], ey: [ -30, 0 ] }, // se -> nw
{ sx: [ -30, 0 ], ex: [ 5, 40 ], sy: [ 5, 40 ], ey: [ -30, 0 ] } // sw -> ne
];

g_animationManager.on_finished = function()
{
g_current_slide++;
if ( g_current_slide >= g_slides.length )
g_current_slide = 0;
g_slides[ g_current_slide ].start();
}

function rnd( start, end )
{
return ( Math.random() * ( end - start ) ) + start;
}

function load_slides( images )
{
var ic = document.getElementById( 'imgContainer' );

for( var i in images )
{
var img = images[i];

var imgObj = document.createElement( 'img' );
imgObj.style.position = 'absolute';
imgObj.style.left = '0px';
imgObj.style.top = '0px';
imgObj.style.visibility = 'hidden';
ic.appendChild( imgObj );

var ii = new ImageInfo( img.src, img.width, img.height, imgObj );

var szoom = rnd( 50, 100 );
var ezoom = rnd( 70, 120 );

var d = parseInt( ( Math.random() * g_directions.length ).toString() );
var di = g_directions[ d ];
var sx = rnd( di.sx[0], di.sx[1] );
var sy = rnd( di.sy[0], di.sy[1] );
var ex = rnd( di.ex[0], di.ex[1] );
var ey = rnd( di.ey[0], di.ey[1] );

g_slides.push(
new Animation( g_animationManager, ii, 10,
[ new KenBurnsZoomer( ii, szoom, ezoom, ic.clientWidth, ic.clientHeight ),
new KenBurnsMover( ii, sx, sy, ex, ey, ic.clientWidth, ic.clientHeight ),
new KenBurnsFader( ii, 30 ) ] )
);
}
}

function start_slides()
{
g_slides[ g_current_slide ].start();
}
</script>
</head>
<body>

<div style="position:relative;width:100%;height:100%;overflow:hidden;"
id="imgContainer">
</div>

<script>
var images = [
{ src: 'images/megan1_875_700.jpg', width: 875, height: 700 },
{ src: 'images/oso1_875_700.jpg', width: 875, height: 700 },
{ src: 'images/oso2_873_700.jpg', width: 873, height: 700 }
];
load_slides( images );
start_slides();
</script>

</body>
</html>

 

不用電影是很難說明上述代碼在瀏覽器中的運行結果的。因此我抓了一個快照,如 圖 6 所示。

圖 6. 幻燈片放映的快照

該頁面首先通過 <script> 標記的 src 屬性引入基類。安裝這些類之后,增加兩個函數將整個機制組織到一起:load_slides 和 start_slides。load_slides 函數接收一個數組,包括圖像的 src、width 和 height,然后創建 <image> 標記和動畫。start_slides 函數從第一項開始啟動幻燈片放映。

附加在動畫管理器上的另一個方法 on_finished 在動畫完成時調用。我使用該通知移動到下一張幻燈片,如果已經完成所有幻燈片的動畫,則回到列表中的第一張。

再回到 load_slides,要注意它引用了一個名為 g_directions 的數組。該數組包含一些隨機范圍,幻燈片加載程序用它來規定圖片移動的起點和終點。最理想的效果是從一個角到另一個角。從注釋中可以看到,這些值規定幻燈片的移動范圍為東北、東南、西北和西南的任意組合。最后的 <script> 標記定義了一個圖像數組,然后使用 load_slides 和 start_slides 函數啟動幻燈片放映。

 

分享:打造Ajax簡單相冊
演示地址 源文件下載 AJAX(Asynchronous JavaScript And XML)是一種運用JavaScript和可擴展標記語言(XML),在網絡瀏覽器和服務器之間傳送或接受數據的技術。主要應用于Ria(Rich internet applications)的開發上。 xml問題終于在今天還是解決了。最后在FireFo

來源:模板無憂//所屬分類:AJAX教程/更新時間:2010-05-19
相關AJAX教程
午夜欧美性电影| 中文字幕日韩欧美在线| 天天插天天射天天干| 国产成人av网| 69精品人人人人| 久久视频免费在线播放| 成人av男人的天堂| 国产原创精品| 免费激情视频在线观看| 日韩视频在线观看一区| 天堂在线视频观看| 国产精品福利一区| 老司机一区二区| 久久久精品免费网站| 91精品国产麻豆国产自产在线| 中文字幕日本视频| 日韩在线免费观看av| 久久久久久久久久久免费视频| 久久国产精品精品国产色婷婷| 伊人av在线播放| 亚洲精品永久视频| 97人妻一区二区精品免费视频| 国产女人水真多18毛片18精品视频| 看黄色一级大片| 日韩精品中文字幕视频在线| 五月丁香综合缴情六月小说| 国产精品亚洲综合| 五月六月丁香婷婷| 天堂中文av在线| 少妇高潮一区二区三区喷水| 国产九九视频一区二区三区| www.亚洲激情.com| 亚洲图片中文字幕| 在线看的片片片免费| 91精品国产综合久久香蕉最新版| 吴梦梦av在线| 国产一区二区网站| 国产精品亚洲人在线观看| 制服丝袜亚洲播放| 一区二区视频在线播放| 国产成人无码一区二区三区在线| 日韩影院在线观看| 国产免费成人在线视频| 久久久国产一区| 欧美激情亚洲精品| 欧美sm极限捆绑bd| 亚洲精品久久久久久久久久久久久 | 99国产超薄肉色丝袜交足的后果| 精品成人无码一区二区三区| 成人av免费在线观看| 久久精品视频导航| 免费在线观看日韩| 国产成人高清在线| 一区二区三区在线视频免费| 久久精品视频导航| 毛片一区二区三区四区| 五月天丁香社区| 久久99国产综合精品免费| 欧美激情二区三区| 亚洲欧美日韩精品久久久 | 亚洲欧洲成人在线| 国产亚洲欧美日韩精品| 37pao成人国产永久免费视频| 麻豆精品视频在线观看| 精品久久久影院| 超碰91人人草人人干| 欧美a级黄色大片| 97国产成人无码精品久久久| 先锋av资源站| 欧美一区二区大片| 337人体粉嫩噜噜噜| 亚洲精品网站在线观看| 午夜精品在线观看| 少妇av一区二区三区无码| 日韩av成人网| 国产精品国产三级国产三级人妇 | 熟女少妇内射日韩亚洲| 99久久久久久久| 91美女片黄在线观看91美女| 成人av影院在线| 国产精品色在线观看| 国产精品国产三级欧美二区| 国产在线拍揄自揄拍无码视频| 狠狠色丁香婷婷综合| 国产免费成人在线视频| 99re成人精品视频| 91视频最新| 久久久性生活视频| 99在线视频免费| 国产乱淫av片免费| av在线一区二区| 亚洲成av人片| 亚洲精品中文字| 欧美中文字幕在线观看| 翔田千里亚洲一二三区| 日本少妇xxx| 欧美精品乱码视频一二专区| 色呦呦中文字幕| 国产精品久久久久久久久图文区 | 久久久全国免费视频| 欧美一区二区三区黄片| 国产精品三级电影| 亚洲精品成a人在线观看| 日本不卡高字幕在线2019| 久久国产午夜精品理论片最新版本| aa一级黄色片| 国产老女人精品毛片久久| 亚洲午夜在线电影| 亚洲精品短视频| 高清乱码免费看污| 自拍偷拍18p| 国产欧美一区二区精品婷婷| 在线观看欧美日韩| 一区二区三区av在线| 国产 欧美 在线| 日本熟妇一区二区三区| 一区二区中文视频| 久久久久久久国产精品视频| 精品国产一区三区| 无码人妻久久一区二区三区不卡| 亚洲精品乱码久久久久久| 欧美日韩高清影院| 国产精品亚洲自拍| 国产精品无码自拍| www.成人在线观看| 一本色道久久加勒比精品| 日本一区二区三区视频免费看| 三级久久三级久久久| 亚洲一区二区三区四区视频| 九色综合狠狠综合久久| 欧美日韩国产乱码电影| 国产91视频一区| 午夜免费福利视频| 一区二区三区日韩在线| 国产亚洲色婷婷久久99精品91| 欧美性受xxxx狂喷水| 精品国产美女在线| 亚洲一二三四五| 一区二区三区日本| 99在线精品免费视频| 日韩一区精品视频| 国自产精品手机在线观看视频| 日韩成人精品在线| 久久黄色av网站| 亚洲欧美在线不卡| 国产精品国模大尺度视频| 亚洲淫片在线视频| 东京热一区二区三区四区| 日韩一区国产二区欧美三区| 91制片厂毛片| 在线观看成人免费视频| 日本黄色一级网站| 欧洲亚洲国产日韩| 久久综合色视频| 久久嫩草精品久久久久| 免费国产在线精品一区二区三区| 精品乱子伦一区二区| 97超碰蝌蚪网人人做人人爽| 91精品人妻一区二区三区果冻| 欧美第一淫aaasss性| 艳妇臀荡乳欲伦亚洲一区| 成人免费xxxxx在线观看| 99精品免费观看| 国产精品999| 日日夜夜精品免费视频| 国产日韩在线看| 狠狠色丁香婷婷综合| 性欧美精品一区二区三区在线播放 | 亚洲精品久久区二区三区蜜桃臀 | 国产伦精品免费视频| 精品人妻久久久久一区二区三区 | 国产在线精品一区二区夜色| 成人高清在线观看| 99视频精品在线| 91最新在线观看| 在线成人高清不卡| 亚洲人与黑人屁股眼交| 日韩在线观看网站| 亚洲第一页综合| 欧美日韩亚洲一区二区三区四区| 18欧美亚洲精品| 免费在线黄色网| 亚洲男人7777| 亚洲精品.www| 欧美性大战久久久久xxx | 国产亚洲一区二区在线| 国精品人妻无码一区二区三区喝尿| 日本高清不卡三区| 欧美日韩美女在线| 久草成人在线视频| av在线不卡观看| 第一福利永久视频精品| 国产黄网在线观看| 中文字幕在线亚洲精品| 精品国产亚洲一区二区三区在线观看| 国产精品午夜福利| 国产亚洲欧美一区二区| 亚洲图片欧美综合| 一级爱爱免费视频| 大陆极品少妇内射aaaaaa| 精品视频一区在线视频| 日日夜夜精品免费视频| 一级在线免费视频| 97视频在线播放| 亚洲一区二区不卡免费| 91视频免费看片| 欧美日韩精品中文字幕一区二区| 6080yy午夜一二三区久久| 久久男女视频| 九色porny自拍| 欧美极品少妇与黑人| 亚洲国产精品18久久久久久| 无罩大乳的熟妇正在播放| 最新国产精品亚洲| 97久久人人超碰| 黄色小视频在线免费看| 日韩电影在线播放| 欧美日韩一区二区三区不卡| 国产叼嘿视频在线观看| 久久这里只有精品18| 亚洲欧洲xxxx| 久久蜜桃av一区精品变态类天堂| 亚洲免费看av| 美女少妇精品视频| 免费人成黄页网站在线一区二区| 污污的网站免费| 国产成人欧美在线观看| 亚洲18女电影在线观看| 国产免费高清av| 免费成人黄色大片| 国产精品av在线播放| 亚洲在线视频免费观看| 最新av电影网站| 成人永久免费| 欧美亚洲一区二区三区四区| 日本亚洲欧美天堂免费| 夫妻免费无码v看片| 国产亚洲成精品久久| 国产日本一区二区| 伊人久久亚洲综合| 特黄特黄一级片| 欧美精品一区在线| 日韩在线观看高清| 午夜日韩在线电影| 中文字幕日本人妻久久久免费 | 欧美丝袜丝交足nylons| 免费一级片91| 又大又长粗又爽又黄少妇视频| 亚洲最大成人免费视频| 在线视频中文字幕一区二区| 国产又粗又大又爽视频| 国产又大又黄又粗又爽| 国产精品theporn88| 日韩在线播放视频| 天天综合色天天综合色h| 奇米一区二区三区av| 亚洲国产美女视频| 日韩视频免费在线播放| 亚洲自拍小视频| 免费97视频在线精品国自产拍| 欧美亚洲动漫另类| 国产在线视频不卡二| 日韩xxx视频| 极品美妇后花庭翘臀娇吟小说| 国产肥臀一区二区福利视频| 成人免费视频观看视频| 久久久国产精品亚洲一区| 一区二区三区.www| 97精品国产露脸对白| 精品久久人妻av中文字幕| 四季av一区二区| 91情侣偷在线精品国产| 久久91亚洲精品中文字幕| 欧美一个色资源| 亚洲精品国产无套在线观| 91麻豆swag| 国产成人av一区二区三区在线观看| 国产黄色一区二区| 亚洲性猛交富婆| 久久久精品毛片| 久久国产精品系列| 99久在线精品99re8热| 亚洲乱码国产乱码精品精大量| 国产精欧美一区二区三区白种人| 亚洲自偷自拍熟女另类| 久久天天狠狠| 北条麻妃高清一区| 亚洲精品欧美极品| 精品午夜一区二区| 欧美一区二区三区四区夜夜大片 | 日本一级免费视频| 国产一区二区三区四区五区六区 | 国产麻豆精品久久一二三| 免费看黄色一级视频| 日本亚洲一区二区| 高清国产一区二区| 久久这里只有精品6| 风流少妇一区二区| 国产人久久人人人人爽| 亚洲视频一区二区在线| 久久久久久久久一| 91免费视频网| 亚洲一区自拍偷拍| 一区二区三区四区不卡视频| 午夜精品久久久久影视| 在线日韩av片| 亚洲欧美中文另类| 久久这里有精品视频| 欧美与欧洲交xxxx免费观看| 91精品国产综合久久香蕉922| 99高清视频有精品视频| 又大又硬又爽免费视频| 亚洲av综合色区无码另类小说| 人人干在线观看| www.欧美国产| 久久国产夜色精品鲁鲁99| 国产中文字幕精品| 91麻豆国产香蕉久久精品| 色先锋久久av资源部| 日韩三级成人av网| 国产在线久久久| 精品成在人线av无码免费看| 午夜激情影院在线观看| 自拍偷拍激情视频| 污污视频网站在线免费观看| 无码aⅴ精品一区二区三区| 国产三级aaa| 香蕉污视频在线观看| 麻豆精品国产传媒mv男同| 久久综合久久综合久久| 欧美在线视频日韩| 88xx成人精品| 成年人黄色在线观看| 稀缺小u女呦精品呦| 中国1级黄色片| 美女精品一区二区| 一本大道久久a久久精二百| 久久理论片午夜琪琪电影网| 97超碰免费观看| 尤物在线免费视频| 亚洲AV无码一区二区三区少妇| 久久伊人蜜桃av一区二区| 色婷婷亚洲综合| 热99久久精品| 国产中文字幕乱人伦在线观看| 亚洲观看黄色网| 国产精品久久久久久免费免熟| 成人黄色在线网站| 91精品国产综合久久小美女| 91中文字精品一区二区| www.xxx亚洲| 激情视频网站在线观看| 国产精品美女一区二区| 国产+成+人+亚洲欧洲| 欧美日韩中文字幕在线播放| 久青草视频在线观看| 久久亚洲捆绑美女| 精品国产乱码久久久久久蜜臀| 欧美亚洲精品日韩| www.com国产| 男同互操gay射视频在线看| 国产69精品久久久| 性猛交ⅹ×××乱大交| 影音先锋在线国产| 亚洲成a人在线观看| 99re资源| 亚洲黄色小说视频| 久久精品亚洲精品国产欧美| 欧美国产日韩免费| 91视频啊啊啊| 国产清纯在线一区二区www| 在线观看日韩欧美| 国产成人a亚洲精v品无码| 欧洲精品久久一区二区| 亚洲天堂影视av| www.com久久久| 午夜视频在线免费播放| 一本大道久久a久久精品综合| 欧美日韩在线一区二区三区| 欧美男人天堂网| 欧美一级搡bbbb搡bbbb| 精品一区二区三区无码视频| 中文字幕人成人乱码亚洲电影| 欧美精品久久99| 日韩美女在线观看| 欧美多人猛交狂配| 久久久久久久精| 91精品国产91久久久| 国产老熟女伦老熟妇露脸| 一区二区三区四区乱视频| 午夜天堂在线视频| 成人在线看视频| 成人h动漫精品一区二| 国产美女精品视频免费观看| 欧美极品视频在线观看| 欧美卡1卡2卡| 国产女女做受ⅹxx高潮| 国产日韩欧美精品在线| 精品日本一区二区| 天天射天天色天天干| 欧洲一区二区视频| 免费在线观看亚洲| 日韩午夜激情视频| 日韩aaaaa| 精品久久久国产| 污视频网址在线观看| 国产欧美日韩在线观看| 黄色小视频大全| 亚洲精品一卡二卡| 全黄性性激高免费视频|