精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用Sencha Touch開發移動Web應用平臺

移動開發
Sencha Touch 是世界上第一個支持 HTML5 和 CSS3 標準的移動應用框架,你可以使用 HTML5 來編寫音頻和視頻組件,還可以使用 LocalStorage Proxy 來存儲離線數據,同時,大量 CSS3 樣式表為你提供了創建健壯樣式層的可能。

Sencha Touch 是由 Sencha 公司開發的移動 Web 應用開發框架,用以提升主流移動設備在瀏覽器上的觸碰操作,增強用戶體驗。該框架以久負盛名的 Ext JS 富客戶端框架為基礎,并支持最新的 HTML5 及 CSS3 標準,與流行的 Apple iOS 和 Andriod 設備兼容。一方面,它以 Webkit 瀏覽器引擎為基礎,提供了出色的性能和用戶體驗;另一方面,它提供了基于 GPL V3 許可的開源版本和詳盡的 API 文檔,體現了良好的開放性和易用性。因此,該框架可幫助移動應用開發人員提升開發效率,從而創造出更多富有創意的移動應用

隨著智能移動設備的普及和 3G 通訊技術的發展,將會有越來越多的傳統應用部署為移動 Web 應用,而良好兼容性和操控性是 Web 應用成功的關鍵。本文將分為以下四個部分介紹 Sencha Touch 的獨特之處,并結合示例為相關移動應用的開發人員編寫良好兼容性和操控性的 Web 程序提供借鑒。

與眾不同的 Sencha Touch:功能和特性

Sencha Touch 是世界上第一個支持 HTML5 和 CSS3 標準的移動應用框架,你可以使用 HTML5 來編寫音頻和視頻組件,還可以使用 LocalStorage Proxy 來存儲離線數據,同時,大量 CSS3 樣式表為你提供了創建健壯樣式層的可能。該框架在提供豐富功能的基礎上對 JavaScript 庫文件進行合理優化,使得經過 gzipped 壓縮后的庫文件在 120kb 以下,最大限度地提升了 Web 應用在瀏覽器中的加載速度,增強了用戶體驗。

除了對最新標準的支持,該框架最大的特色正如其名,增強了對手持移動設備觸控操作的支持,除了支持瀏覽器標準的觸摸事件,還額外添加了如 tap, double tap, swipe, tap-hold, pinch 和 rotate 等富有吸引力的操作事件,使用戶體驗到與原生程序一樣的效果。

Sencha Touch 另一大優勢在于其跨平臺性,由于 Apple iOS 和 Andriod 設備有其獨立的開發、測試和運行環境,針對某一平臺開發的應用在另一平臺是不兼容的,這大大增加了移動應用的開發成本。而基于 Sencha Touch 開發的 Web 應用具有與原生應用相同的用戶體驗,同時兼容 Apple iOS、Andriod 和黑莓 RIM 6 設備,可以滿足大部分的市場需求。

此外,借助 Ext JS 多年來對 Ajax 數據集成的經驗,該框架提供了豐富的數據處理功能。開發人員能夠方便地處理各種格式的數據如 XML、JSON,并能靈活地綁定到可視化組件加以展示。

個性鮮明的 UI 組件

表單是用戶與應用程序交互的基本媒介,如用戶信息注冊、應用程序配置、個人評論的發表這些常見的 Web 應用場景都需要表單組件的支持。Sencha Touch 為我們提供了形式多樣、操作簡單的 表單組件 。圖 1 中第一個界面所展示的是基本表單元素,包括多種類型的輸入框,如純文本、密碼、郵件、URL 地址等類型,并能根據用戶輸入的文本進行有效性驗證,以減少開發者對用戶輸入格式的驗證代碼,同時,基本表單還支持單選、多選、日歷選擇、多行文本輸入等控件類型。圖 1 第二個界面展示了觸控屏手持設備所特有的滑動條組件,適合調整一些連續性的數值和作為切換的開關按鈕。圖 1 中第三個界面展示了建立在工具條上的表單控件,非常適用于搜索和文本過濾的應用場景。

使用Sencha Touch開發移動Web應用平臺

圖 1 表單組件

列表是移動 Web 應用展示信息最為常見的組件,其中比較有特色的是分組列表(Grouped List)(如 圖 2 中第一個界面),它可以根據所列項目的首字母進行排序分組,當用戶觸摸屏幕右側字母索引時,屏幕可快速滾動并定位至對應分組,非常適合于列表信息較多的情況,如聯系人列表,歌曲列表等。圖 2 中第二個界面所示的嵌套列表(Nested List)則非常適合于展示信息有層級關系的情況,如瀏覽論壇時的“討論區 -> 主題帖 -> 原帖及回復內容”這樣的層次關系。

使用Sencha Touch開發移動Web應用平臺

圖 2 列表組件

精致形象的圖標和布置合理的工具欄是 Apple iOS 原生應用引以為傲的部分,而 Sencha Touch 也可以做到這一點。圖 3 中第一個界面所示的是框架內置的圖標樣式,已可以滿足大部分應用的需要,開發人員還可以通過自定義圖標樣式來擴展出更多更豐富的圖標。如 圖 3 中第二個界面所示,圖標所在的工具欄布置方式也靈活多樣,即可在屏幕頂部或者底部,也可以多個層疊,并可以在工具欄上布置形狀各異的按鈕。圖 3 中第三個界面所展示的是根據底部 Tab 標簽頁而進行切換的面板,不同的面板中可以包含不同的主題內容。

使用Sencha Touch開發移動Web應用平臺

圖 3 圖標、工具欄和標簽頁
 
如果你以為 Sencha Touch 只能做到以上這些小兒科,那就錯了,下面展示了一些高級的 UI 功能。圖 4 中第一個界面類似于 Apple iOS 設備上的 SpringBoard 操作,可以通過手指的左右或者上下滑動,來旋轉切換界面窗口;圖 4 中第二個界面顯示了一個窗口重疊的效果,當上層彈出窗口激活時,下層窗口的操作是被屏蔽的,在提醒用戶執行一些重要操作的場景中(如刪除或者保存),這樣的 UI 組件是非常好用的。

使用Sencha Touch開發移動Web應用平臺

圖 4 旋轉切換與窗口的重疊效果

酷炫的動畫效果

一直以來,基于瀏覽器的 Web 程序動畫效果常被人詬病,尤其是基于 JavaScript 的動畫效果庫相對于原生的應用程序來說,還是存在一定的差距,而剛發布的 Sencha Touch 1.1.0 版本就支持多達六種動畫效果,分別是 cube、fade、flip、pop、slide 和 wipe。以最為酷炫的 3D 旋轉 Cube 動畫 為例,它將當前顯示的界面面板(稱之為 Card)想象為立方體的一個面,而即將展示的 Card 作為相鄰的另外一個面,以左上方的頂點作為旋轉基點進行旋轉,從而得到 Card 之間切換的動畫效果。大家一定很好奇它是如何做到這一點的,我們通過查看該動畫效果的源代碼即可找到答案。

使用Sencha Touch開發移動Web應用平臺

圖 5 Cube 動畫效果示例

在文件 sencha-touch-1.1.0\src\core\Anim.more.js 中,可以看到以下代碼片段

清單 1

  1. this.from = {   
  2.                '-webkit-transform': 'rotate' + rotateProp + '(' + fromRotate + 'deg)' +   
  3.                (showTranslateZ ? ' translateZ(' + fromZ + 'px)': '') + fromTranslate,   
  4.                '-webkit-transform-origin': origin   
  5.            };   
  6. this.to = {   
  7.                '-webkit-transform': 'rotate' + rotateProp + '(' + toRotate + 'deg)   
  8.                translateZ(' + toZ + 'px)' + toTranslate,   
  9.                '-webkit-transform-origin': origin   
  10.            };  

由于 Sencha Touch 的動畫組件是基于 Webkit 核心的瀏覽器,所以其動畫效果實際上是基于 Webkit 的 3D 轉換引擎,代碼中 this.from 指的是當前 Card 如何旋轉消失的屬性,而 this.to 指的是要目標的 Card 如何旋轉得以呈現,具體 CSS 屬性的含義可參考 官方文檔 。

基于 Web 的博客瀏覽示例:應用開發環境的搭建、代碼結構及測試

隨時隨地獲取自己想要關注的信息是移動計算環境最直接的用途。本文將以一個簡單的博客訂閱與瀏覽程序為例,展示基于 Sencha Touch 進行移動 Web 應用開發的流程,幫助開發人員更快的熟悉該編程框架。博客訂閱與瀏覽應用的主要功能是訂閱自己關注的博客 RSS 源,瀏覽對應博客的主題列表,查看博文內容。為了實現以上需求,開發人員需要完成以下幾個步驟的工作。

#p#

搭建開發環境

第一,下載 Sencha Touch 庫文件 ,并將其解壓到本地目錄 %sencha-touch-home%;第二,進入 Eclipse Java EE IDE,創建一個名為 myblog 動態 Web 工程;第三,在本地安裝 Apache Tomcat 6.0.x ,在 eclipse 中將其配置為 Web server 并將 myblog 工程部署其中以備測試;第四,安裝 Andriod Virtul Machine 環境,用以啟動一個虛擬設備來測試 Web 應用的效果。需要說明的是,對于靜態的 Sencha Touch 工程,Tomcat 并不是必須的,可使用任意 HTTP Server 來部署應用,但由于本例中使用了 Servlet 解析 RSS 源來降低客戶端負載,因此采用了 Servlet 容器 Tomcat。

創建代碼結構

一個典型的 Sencha Touch 工程主要由幾個部分組成:sencha-touch 庫文件,JavaScript 文件,CSS 文件,圖標文件以及靜態 HTML 文件。sencha-touch 庫文件至少要包含默認的 CSS 文件 sencha-touch.css 和默認的 JavaScript 文件 sencha-touch.js,值得一提的是,為了便于在開發調試階段更準確地定位和解決問題,開發包中還包含了 CSS 和 JavaScript 對應的 debug 版本,開發人員可在開發階段使用該版本,而在產品部署階段再替換為對應的正式版。

使用Sencha Touch開發移動Web應用平臺

圖 6 工程目錄結構

創建 HTML 和 JavaScript 文件

創建 Sencha Touch 應用的第一步就是創建一個 HTML 首頁文件用于鏈接 Sencha Touch 庫的 CSS 和 JavaScript 文件。我們博客瀏覽示例的 HTML 文件是 index.html,其內容如下:

清單 2

  1. <html>   
  2. <head>   
  3.  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">   
  4.  <title>My BLOG</title>   
  5.    <link rel="stylesheet" href="sencha-touch/resources/css/sencha-touch.css"   
  6.    type="text/css">   
  7.    <link rel="stylesheet" href="css/index.css" type="text/css">   
  8.    <script type="text/javascript" src="sencha-touch/sencha-touch-debug.js"></script>   
  9.    <script type="text/javascript" src="js/index.js"></script>   
  10. </head>   
  11. <body></body>   
  12. </html>  

當創建好 HTML 文件之后,接下來就需要創建應用程序的 JavaScript 文件 index.js,由于該示例是以瀏覽為主,因此選用 NestedList 組件作為 UI 界面的主體,相關代碼如下:

清單 3

  1. Ext.setup({   
  2.  icon : 'img/icon.png',   
  3.  tabletStartupScreen : 'img/tablet_startup.png',   
  4.  phoneStartupScreen : 'img/phone_startup.png',   
  5.  glossOnIcon : false,   
  6.  
  7.  onReady : function() {   
  8. .......   
  9.   var nestedList = new Ext.NestedList({   
  10.    fullscreen : true,   
  11.    title : '我的訂閱博客',   
  12.    displayField : 'text',   
  13.    dockedItems : [ topbar, bottombar ],   
  14.    store : store,   
  15.    getDetailCard : function(record, parentRecord) {   
  16.     return new Ext.ux.DescBox({   
  17.      value : 'Loading...',   
  18.      scroll : {   
  19.       direction : 'both',   
  20.       eventTarget : 'parent'  
  21.      }   
  22.     });   
  23.    }   
  24.   });   
  25. ......   
  26.   });   
  27.  
  28.  }   
  29. });  

可以看到,index.js 的第一行代碼調用了 Ext.setup() 方法,用以建立一個觸控設備的 Web 頁面,該方法可以為你的應用設置不同的啟動屬性和行為,例如示例代碼中的:

#p#

icon,設置該應用默認的圖標;

tabletStartupScreen,該屬性設置在平板電腦上的啟動圖標;

phoneStartupScreen,該屬性設置在智能手機上的啟動圖標;

glossOnIcon,該屬性設置是否在默認圖標上呈現光環效果;

onReady,該方法會在頁面加載完畢,瀏覽器中的 DOM 模型已經建立完成時被調用。由于為了保證程序在運行時所依賴的 JavaScript 文件都已經加載完畢,我們一般將應用啟動的邏輯置于該方法內,類似于 Java 程序的 main 方法。

在定義 NestedList 組件時,有四點值得我們注意:

界面布局:通過 dockedItems 屬性,指明了 NestedList 頂部和底部分別放置了工具欄 topbar 和 bottombar,topbar 主要用來便于用戶登錄和設置偏好信息,bottombar 主要是用來提供瀏覽博客時的一些常用操作,如訂閱新的 RSS 源,刪除選擇的博客,刷新博客列表,給好的博文加星推薦以及回復功能。為了生成工具欄,需要生成一個 Ext.Toolbar 對象的實例,以 bottombar 為例,其代碼如下:

清單 4

  1. var bottombar = new Ext.Toolbar({   
  2.  dock : 'bottom',   
  3.  defaults : {   
  4.   ui : 'plain',   
  5.   iconMask : true   
  6.  },   
  7.  scroll : 'horizontal',   
  8.  sortable : true,   
  9.  layout : {   
  10.   pack : 'center'  
  11.  },   
  12.  items : [ {   
  13.   iconCls : 'add',   
  14.   handler : function(btn, event) {   
  15.    addform.setCentered(true);   
  16.    addform.show();   
  17.   }   
  18.  }, {   
  19.   iconCls : 'trash'  
  20.  }, {   
  21.   iconCls : 'refresh'  
  22.  }, {   
  23.   iconCls : 'favorites'  
  24.  }, {   
  25.   iconCls : 'action'  
  26.  } ]   
  27. });  

該對象中主要定義了以下屬性:

dock,工具欄的放置位置,可選值有 top 和 bottom;

defaults,默認圖標的 UI 效果,其中 ui 指背景顏色的樣式,可選值有 dark,light 和 plain;

scroll,滾動方向,可選值有 horizon,vertical 和 both;

layout,表示工具欄圖標的布局方式,示例中表示的是居中排列。值得注意的是該屬性應該由一個 Object 對象來指定而不是 string;

items,該屬性用于指定一個數組,來表示工具欄中的圖標元素的集合,每個圖標對象至少需要有一個 iconCls 屬性來指定其樣式,而 handler 屬性則用于指定處理圖標點擊事件的方法,該方法回調時會傳入兩個參數 function(btn, event),第一個指當前被觸發事件的對象,第二個指被觸發的事件類型,本例中通過該方法彈出一個表單窗口用于提供給用戶輸入感興趣的博客 RSS 訂閱源。

使用Sencha Touch開發移動Web應用平臺

圖 7 RSS 訂閱源添加表單

#p#

獲取數據:從后臺通過相關 API 獲取數據并展示在 UI 組件上,是實現 Web 應用的核心問題,Sencha Touch 組件一般都是通過指定 store 數據源對象來實現的。例如在本例中,采用 Ext.data.TreeStore 對象來定義在 NestedList 中層次化數據的獲取,其相關代碼如下:

清單 5

  1. Ext.regModel('ListItem', {   
  2.  idProperty : 'text',   
  3.  fields : [ {   
  4.   name : 'text',   
  5.   type : 'string'  
  6.  }, {   
  7.   name : 'link',   
  8.   type : 'string'  
  9.  }, {   
  10.   name : 'description',   
  11.   type : 'string'  
  12.  } ]   
  13. });   
  14.  
  15. var store = new Ext.data.TreeStore({   
  16.  model : 'ListItem',   
  17.  proxy : {   
  18.   type : 'ajax',   
  19.   url : '/myblog/list',   
  20.   reader : {   
  21.    type : 'tree',   
  22.    root : 'items'  
  23.   }   
  24.  }   
  25. });  

首先,通過 model 屬性來指明返回數據的模型,該模型是通過 Ext.regModel() 方法來建立的,主要是為了告訴程序返回數據是什么結構;其次,通過 proxy 屬性來指明返回數據的獲取方式,該框架中主要有兩種 Proxy,Client proxy 和 Server proxy,Client Proxy 主要用于存儲本地數據,其子類有三個:

LocalStorageProxy,在瀏覽器支持的情況下將數據保存至 localStorage;

SessionStorageProxy,在瀏覽器支持的情況下將數據保存至 sessionStorage;

MemoryProxy,將數據保存在內存中,但是當頁面刷新時,數據都將會丟失。

Server proxy 主要用于存儲一些通過遠程請求服務器而獲取的數據,它包括:

AjaxProxy,發送一個 HTTP 請求到相同域的服務器;

ScriptTagProxy,使用 JSON-P 發送請求到不同域的服務器。

本例中采用的是最為常用的 Ajax 方式通過請求 servlet URL(/myblog/list) 來獲取 JSON 數據。

自定義組件:使用 NestedList 時,開發者要注意的是我們需要自己實現 getDetailCard() 方法,用于定義對葉子節點數據的查看 UI 組件。非常幸運的是,Sencha Touch 框架為我們提供了良好的擴展機制用于自定義組件,這為我們構建結構清晰、面向對象的 JavaScript 程序打下了基礎,示例中展示了如何擴展出一個自定義組件,代碼片段如下:

清單 6

  1. ExtExt.ux.DescBox = Ext.extend(Ext.Component, {   
  2.   ...   
  3.  
  4.   afterRender : function() {   
  5.    Ext.ux.DescBox.superclass.afterRender.apply(this, arguments);   
  6.  
  7.    thisthis.description = this.getTargetEl().createChild({   
  8.     tag : 'pre',   
  9.     html : this.value   
  10.    });   
  11.   },   
  12.         getValue : function() {   
  13.    return this.value;   
  14.   },   
  15.  
  16.   setValue : function(description) {   
  17.    this.value = description;   
  18.    if (this.rendered) {   
  19.     this.description.update(this.value);   
  20.    }   
  21.   }   
  22.  });  

我們定義了一個博客內容描述信息展示組件 Ext.ux.DescBox,它繼承自 Ext.Component 組件,并且自定義了 Get 和 Set 方法,同時重寫了父類的 afterRender 方法,其中第一行的代碼 Ext.ux.DescBox.superclass.afterRender.apply(this, arguments);必須調用,指的是將子類的參數應用到父類的構造方法中,類似于 Java 程序中的 super() 方法;第二行代碼 this.description = this.getTargetEl().createChild(...)指在 Component 組件中創建一個 HTML 標簽 pre, 并將 value 的值放置于 pre 標簽中。

事件處理:人機交互和 UI 組件之間的切換,需要事件來驅動或觸發,因此各 UI 組件都支持一系列特定的事件及其處理方法,可參閱 API 文檔 。示例中需要依靠葉子節點觸摸事件 leafitemtap 將顯示界面切換為 Detail Card,就需要在 NestedList 組件上注冊處理方法,其代碼為:

清單 7

  1. nestedList.on('leafitemtap', function(subList, subIdx, el, e,   
  2.   detailCard) {   
  3.  var ds = subList.getStore(), r = ds.getAt(subIdx);   
  4.  detailCard.setValue(r.get("description"));   
  5. });  

其回調函數的參數依次代表“觸控條目(item)所在 List 組件”,“觸控條目的 ID”,“觸控條目 element 對象”,“觸控事件對象”和“接下來要顯示的 Detail Card 組件對象”。

部署到 Apache Tomcat 6.x 進行測試

編寫好對應的 HTML、JavaScript 和后臺處理的 Servlet 之后,可將動態 Web 工程打包成為標準的 WAR 包,部署至 Tomcat 的 webapp 文件夾,啟動服務器;隨后打開 Android Virtual Devices,啟動其中的瀏覽器程序,并在 URL 地址欄輸入 http://<localhost IP address>:8080/myblog/,便可以對該應用進行測試了,運行的畫面如 圖 8 所示。由于 Sencha Touch 應用的跨平臺性,使用其他任意一款基于 Webkit 內核的瀏覽器,如 iPhone4 的 Safari,也能得到相關的測試結果,而不僅限于文中示例的 Android 設備瀏覽器。

使用Sencha Touch開發移動Web應用平臺

圖 8 應用運行及測試畫面

開發與原生程序一樣酷炫界面的 Web 移動應用,一直是 Web 開發者的夢想,Sencha Touch 移動 Web 開發框架使得這一夢想不再遙遠。該框架以其豐富的 UI 組件,個性化的動畫效果,穩定的數據及事件處理機制,易擴展的編程模型,在移動 Web 應用這個新領域嶄露頭角。本文利用一個博客瀏覽程序簡要介紹了利用該框架編寫程序的流程及基本方法,然而距離一個成熟的 Web 應用還有相當的距離,如用戶登錄的安全性、多用戶并發時后臺的伸縮性以及客戶端 JavaScript 的性能都有待提高,因此值得廣大開發者深入的學習及實踐。

責任編輯:zhaolei 來源: 博客園
相關推薦

2012-01-10 14:10:26

Sencha Touc

2011-09-05 10:49:14

Sencha ToucjQuery MobiHTML5

2012-03-21 09:36:33

ibmdw

2011-09-05 13:45:25

jQuery MobiSencha Touc移動Web UI框架

2011-09-01 10:09:04

2011-09-05 11:27:17

Sencha Touc框架HTML5

2011-09-02 15:18:49

Sencha Touc

2011-09-05 11:23:26

EclipseSencha Touc框架

2011-07-25 16:21:22

Sencha touc

2011-07-26 10:44:15

Sencha Touc

2011-07-26 10:21:25

Sencha Touc

2010-11-22 10:31:17

Sencha touc

2011-07-26 09:41:50

Sencha Touc特性HTML 5

2011-07-25 15:55:21

Sencha ToucHtml 5

2011-09-05 10:27:02

Sencha Touc手機應用Android

2011-09-05 14:17:54

Sencha ToucMVC

2011-10-26 10:21:40

Sencha Touc組件

2012-09-06 11:25:46

IBMdw

2011-09-05 10:20:21

Sencha ToucAPP

2012-01-10 13:21:33

Sencha Touc使用data包
點贊
收藏

51CTO技術棧公眾號

久久众筹精品私拍模特| 中文日韩欧美| 欧美电影免费观看完整版| 日本一区午夜艳熟免费| 青青草在线播放| 久久99国产精品久久99果冻传媒| 九九热精品视频| 成都免费高清电影| 色妞ww精品视频7777| 欧美日韩国产精品一区| 中日韩在线视频| 亚欧在线观看视频| 国产精品自拍三区| 国产精品热视频| 99精品视频99| 欧美日韩免费观看一区=区三区| 日韩精品中文字幕视频在线| 在线观看网站黄| 99久久伊人| 舔着乳尖日韩一区| 黄色小视频大全| 91精品国产综合久久久久久豆腐| 成人av在线播放网站| 91久久久久久久久| 精品乱码一区内射人妻无码| 一区在线观看| 欧美日韩福利视频| 男女全黄做爰文章| 欧美亚洲激情| 亚洲人在线视频| 亚洲中文字幕一区| 国产精品高潮呻吟久久久久| 8x福利精品第一导航| www.xxx亚洲| 亚洲午夜天堂| 亚洲777理论| 久久精品无码中文字幕| 日本小视频在线免费观看| 成人免费在线播放视频| 五码日韩精品一区二区三区视频| 久久电影中文字幕| 91视频精品在这里| 久久精品aaaaaa毛片| 污视频网站免费观看| 成人看片黄a免费看在线| 亚洲在线一区二区| 精品人妻aV中文字幕乱码色欲| 麻豆91在线观看| 国产欧美日韩精品专区| 伊人免费在线观看高清版| 老司机久久99久久精品播放免费| 欧美一性一乱一交一视频| 亚洲精品视频在线观看免费视频| 亚洲国产婷婷| 91精品国产高清自在线看超| 国产性xxxx高清| 国产日韩亚洲| 日韩美女在线播放| 中文在线字幕免费观| 日本大胆欧美人术艺术动态| 国产精品a久久久久久| 久久精品偷拍视频| 精品一区二区三区蜜桃| 91精品黄色| 内射后入在线观看一区| 99在线精品一区二区三区| 免费看成人av| 3p在线观看| 亚洲欧美日韩国产综合在线| 日本人妻伦在线中文字幕| 国语对白在线刺激| 色老头久久综合| 亚洲欧美自偷自拍另类| 国产日韩一区二区三免费高清| 日韩视频一区二区三区在线播放| 国产一精品一aⅴ一免费| 美女午夜精品| 日日骚av一区| 免费三片在线播放| 性一交一乱一区二区洋洋av| 国产精品免费久久久| 国产suv一区二区| 99riav一区二区三区| 亚洲国产欧洲综合997久久| 黄色国产网站在线播放| 亚洲不卡av一区二区三区| 男女视频一区二区三区| 精品一区二区三区在线观看视频| 亚洲国产天堂久久国产91| 人妻一区二区视频| 欧美精品网站| 国产精品国产自产拍高清av水多 | 午夜精品福利在线| 欧美婷婷精品激情| youjizz欧美| 在线日韩第一页| 精品无码m3u8在线观看| 日本不卡一区二区| 国产综合 伊人色| 3p视频在线观看| 欧美日韩人人澡狠狠躁视频| 中文字幕视频三区| 亚洲精品亚洲人成在线| 精品国产一区二区三区在线观看 | 亚洲福利专区| 成人精品网站在线观看| 无码国产伦一区二区三区视频| 国产精品嫩草久久久久| 国产主播在线看| 亚洲视频一起| 最近2019中文免费高清视频观看www99 | 一本色道无码道dvd在线观看| 秋霞影院一区| 少妇久久久久久| 日本中文字幕久久| aaa亚洲精品| 99视频精品全部免费看 | 91观看网站| 天堂地址在线www| 日韩欧美在线一区| 青青草视频网站| 欧美三级第一页| 国产在线拍揄自揄视频不卡99| 欧美一区二区少妇| 午夜在线成人av| 能看毛片的网站| 天天av综合| 国产精品久久网| 国产小视频福利在线| 精品久久久一区| 精品视频站长推荐| 在线日本高清免费不卡| 97人人澡人人爽| h片在线免费观看| 欧美精选午夜久久久乱码6080| 舐め犯し波多野结衣在线观看| 国产精品一卡| 蜜桃传媒视频麻豆第一区免费观看| 6699嫩草久久久精品影院| 日韩三级电影网址| 久久久一二三区| 高清久久久久久| 国产精品va在线观看无码| 日本在线成人| 欧美激情xxxxx| 亚洲精品中文字幕成人片| 一区二区国产盗摄色噜噜| 中文字幕第六页| 99国内精品久久久久久久| 国产精品直播网红| 好操啊在线观看免费视频| 欧美精品九九99久久| 侵犯稚嫩小箩莉h文系列小说| 韩国理伦片一区二区三区在线播放| 一区二区三区国产福利| 亚洲一区二区三区久久久| 久热精品视频在线观看| 好男人www在线视频| 亚洲综合色区另类av| 大乳护士喂奶hd| 久久精品在线| 亚洲一区二区三区乱码| 99久久久成人国产精品| 欧美另类暴力丝袜| 台湾av在线二三区观看| 欧美主播一区二区三区美女| 毛片视频免费播放| 国产成人高清视频| 免费在线激情视频| 久久精品国产亚洲夜色av网站| 成人欧美一区二区三区黑人孕妇| 日本在线视频网址| 亚洲第一免费视频| 国产美女精品人人做人人爽| 99久久免费观看| 美女福利一区| 国产精品一区二区久久久久| www久久日com| 精品一区二区三区三区| 国产精品无码一区| 亚洲影视在线播放| 国产又粗又猛又爽又黄av| 开心九九激情九九欧美日韩精美视频电影| 一区二区日本| 神马午夜在线观看| 日韩一区在线免费观看| 欧美夫妇交换xxx| 黄色在线网站噜噜噜| 国产视频丨精品|在线观看| 亚洲在线免费观看视频| 亚洲国产精品视频| 国产三级短视频| 久草这里只有精品视频| 亚洲国产午夜伦理片大全在线观看网站 | 色视频成人在线观看免| 波多野结衣亚洲一区二区| 91丨porny丨国产| 久久久久无码精品| 天堂va蜜桃一区二区三区漫画版| 日本丰满大乳奶| 精品国精品国产自在久国产应用| 超碰97在线资源| 丰满少妇一区| 日本高清不卡在线| 青青在线视频| 久久精品中文字幕一区| 精品亚洲综合| 日韩女优电影在线观看| 日日夜夜操视频| 亚洲一卡二卡三卡四卡| 成人激情五月天| 99久久久久免费精品国产| 久久久久久久久久一区| 日韩国产欧美在线播放| 天堂8在线天堂资源bt| 加勒比久久综合| 国内精品久久国产| 天堂va在线高清一区| 国产精品日韩电影| 久久久成人av毛片免费观看| 91精品国产777在线观看| 男人的天堂在线视频免费观看| 精品偷拍各种wc美女嘘嘘| 成人免费视频国产| 欧美一区二区在线播放| 久久网免费视频| 亚洲视频一区二区免费在线观看| 中文天堂资源在线| 国产三级一区二区| 一道本在线观看| 2023国产精品| 中国美女乱淫免费看视频| 粉嫩绯色av一区二区在线观看 | 97久久精品人人澡人人爽| 国产chinesehd精品露脸| 另类人妖一区二区av| 91淫黄看大片| 日本欧美一区二区三区乱码| 国产aaa一级片| 亚洲一区二区三区四区五区午夜| 国产v片免费观看| 日韩午夜av| 每日在线更新av| 亚洲免费一区二区| 黄色片久久久久| 久久久久99| 亚洲少妇第一页| 日日摸夜夜添夜夜添精品视频 | 我家有个日本女人| 国产精品高潮久久久久无| 国产探花视频在线播放| 中文字幕国产精品一区二区| 国产99在线 | 亚洲| 综合在线观看色| 欧美色图亚洲视频| 亚洲一区免费在线观看| 国产精品久久国产精麻豆96堂| 91视频一区二区三区| 蜜乳av中文字幕| 亚洲av永久无码国产精品久久| 久久久久亚洲综合| 51妺嘿嘿午夜福利| 国产人成亚洲第一网站在线播放 | 欧美区国产区| 日韩精品一区二区在线视频| 国产欧美短视频| 一区二区在线播放视频| 精品在线观看视频| 一本色道久久hezyo无码| 久久综合狠狠综合久久综合88| 一色道久久88加勒比一| 18涩涩午夜精品.www| 久操视频免费在线观看| 精品欧美激情精品一区| 伊人精品在线视频| 欧美大片在线观看一区二区| 欧洲视频在线免费观看| 最近2019中文免费高清视频观看www99| 18av在线视频| 日韩av观看网址| 国产精品视频一区二区三区| 国产自产在线视频一区| 91嫩草亚洲精品| 丁香花在线影院观看在线播放| 日韩电影在线观看电影| 亚洲最大视频网| 国产日韩欧美a| 麻豆changesxxx国产| 91久久精品网| 亚洲伦理在线观看| 在线观看久久av| av老司机在线观看| 国产欧美亚洲精品| 秋霞综合在线视频| 91网站在线观看免费| 日韩国产一区二| 日韩精品人妻中文字幕有码| 亚洲欧美自拍偷拍色图| 欧美亚洲精品天堂| 日韩美女一区二区三区四区| 国产一二三区在线视频| 久久免费少妇高潮久久精品99| 国产成人午夜性a一级毛片| 好吊妞www.84com只有这里才有精品| 欧美韩日一区| 四虎永久在线精品无码视频| 丁香网亚洲国际| 成人免费精品动漫网站| 欧美伊人久久久久久午夜久久久久| 亚洲国产综合网| 久久视频精品在线| 欧美电影免费看| 久久久久久久久一区二区| 欧美日韩ab| 天堂av.com| 国产精品久久久久一区二区三区| 成年人免费高清视频| 精品国产乱码91久久久久久网站| 国产原创在线观看| 国产欧美日韩专区发布| 欧美中文一区二区| 精品久久久久久无码国产| 97久久超碰国产精品电影| 久久久久久久福利| 日韩一二三区不卡| av在线免费播放| 亚洲专区在线视频| 中文字幕乱码亚洲无线精品一区| 天堂av8在线| 中文字幕一区二区三区视频| 伊人网av在线| 自拍亚洲一区欧美另类| 丰满少妇一区| 一区二区三区欧美在线| 久久国产人妖系列| 欧美激情精品久久久久久免费| 欧美视频一区二区三区在线观看 | 午夜精品一区二区三区在线视频| 美国十次综合久久| 黄色网络在线观看| 国产精品一区免费视频| 日韩va亚洲va欧美va清高| 91精品婷婷国产综合久久性色| 欧美r级在线| 91亚洲国产成人精品性色| 亚洲精品99| 久久久久久久穴| 偷拍亚洲欧洲综合| 色综合久久网女同蕾丝边| 日韩av免费在线观看| 国产一区二区精品福利地址| 99视频精品免费| 国产精品久久精品日日| 99精品人妻无码专区在线视频区| 欧美二区在线播放| 久草在线综合| 超碰影院在线观看| 国产精品麻豆视频| 国产99视频在线| 国外色69视频在线观看| 久久97视频| 亚洲欧美aaa| 亚洲综合清纯丝袜自拍| 神宫寺奈绪一区二区三区| 国产成人精品一区二区| 999成人网| 完美搭档在线观看| 欧美在线小视频| 污网站在线免费看| 九色综合日本| 久久国产免费看| 久青草视频在线观看| 亚洲石原莉奈一区二区在线观看| 福利一区二区三区视频在线观看| 天堂av在线中文| 91丨porny丨最新| 一级黄色大片免费观看| 久久久免费精品| 欧美日韩国产在线观看网站 | www.xxxx欧美| 凹凸av导航大全精品| 无码内射中文字幕岛国片| 一区二区三区在线视频播放 | 久久久亚洲国产美女国产盗摄| 国产成人av免费| 欧美激情一级精品国产| av中字幕久久| 蜜臀aⅴ国产精品久久久国产老师| 91久久精品国产91性色tv| 日皮视频在线观看| 亚洲精品一区二区三区av| 成人精品视频.| 亚洲综合精品在线| 8090成年在线看片午夜| 久久久久久美女精品| 右手影院亚洲欧美 | 欧洲成人av| www.一区二区三区| 毛片一区二区三区| 亚洲GV成人无码久久精品|