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

Clouda API使用手冊之Touch Publish Subscribe

移動開發
Clouda是簡單,可依賴的實時Javascript框架。對一個想開發移動webapp的開發者來說,可以使用clouda開發框架,實現一個功能和體驗與native app齊平的輕應用。

Touch

在開發移動端的應用中會使用到很多的手勢操作,例如一指拖動、兩指旋轉等等,為了方便開放者快速集成這些手勢,在Clouda中內置了事件和手勢庫Library.touch,下面將詳細的介紹如何使用Library.touch。

touch.config

語法: touch.config(config)

對手勢事件庫進行全局配置。

參數描述:

  • config為一個對象

    1.     tap: true,                  //tap類事件開關, 默認為true 
    2.     doubleTap: true,            //doubleTap事件開關, 默認為true 
    3.     hold: true,                 //hold事件開關, 默認為true 
    4.     holdTime: 650,              //hold時間長度 
    5.     swipe: true,                //swipe事件開關 
    6.     swipeTime: 300,             //觸發swipe事件的最大時長 
    7.     swipeMinDistance: 18,       //swipe移動最小距離 
    8.     swipeFactor: 5,             //加速因子, 值越大變化速率越快 
    9.     drag: true,                 //drag事件開關 
    10.     pinch: true,                //pinch類事件開關 

touch.on

語法:touch.on(element, types, options, callback)

綁定指定元素的事件。

參數描述:

  • element: 元素對象或選擇器。

  • types: 事件的類型, 可接受多個事件以空格分開,支持原生事件的透傳, 支持的一些事件類型有:

pinchstart 雙指縮放動作開始
pinchend 雙指縮放動作結束
pinch 雙指縮放事件
pinchin 雙指向里縮小
pinchout 雙指向外放大
rotateleft 向左旋轉
rotateright 向右旋轉
rotate 旋轉事件
swipestart 單指滑動動作開始
swiping 單指滑動事件
swipeend 單指滑動動作結束
swipeleft 單指向左滑動
swiperight 單指向右滑動事件
swipeup 單指向上滑動
swipedown 單指向下滑動
swipe 單指滑動事件
drag 單指向左右拖動
hold 單指按住不放事件
tap 單指點擊
doubletap 單指雙擊

例如旋轉實例如下:

  1. var angle = 30; 
  2. touch.on('#rotation .target''touchstart'function(ev){ 
  3. ev.startRotate(); 
  4. ev.originEvent.preventDefault(); 
  5. ev.originEvent.stopPropagation(); 
  6. }); 
  7. touch.on('#rotation .target''rotate', {interval: 10}, function(ev){ 
  8. var totalAngle = angle + ev.rotation; 
  9. if(ev.fingerStatus === 'end'){ 
  10.   angle = angle + ev.rotation; 
  11.  
  12. this.style.webkitTransform = 'rotate(' + totalAngle + 'deg)'
  13. }); 

更多使用實例請查看http://code.baidu.com/

  • options(可選): 目前可配置的參數為:

    1.    //采樣頻率 
    2.    interval: 10,//性能參數,值越小,實時性越好, 但性能可能略差, 值越大, 性能越好。遇到性能問題時,可以將值設大調優,建議值設置為10。 
    3.    //swipe加速度因子(swipe事件專用) 
    4.    swipeFactor: 5 //(int: 1-10)值越大,速率更快。 
  • callback: 事件處理函數, 該函數接受的參數為一個gesture event object, 可訪問的屬性有:

    • originEvent //觸發某事件的原生對象

    • type //事件的名稱

    • rotation //旋轉角度

    • scale //縮放比例

    • direction //操作的方向屬性

    • fingersCount //操作的手勢數量

    • position //相關位置信息, 不同的操作產生不同的位置信息。

    • distance //swipe類兩點之間的位移

    • distanceX //swipe類事件x方向的位移

    • distanceY //swipe類事件y方向的位移

    • angle //swipe類事件觸發時偏移角度

    • factor //swipe事件加速度因子

    • startRotate //啟動單指旋轉方法,在某個元素的touchstart觸發時調用。

touch.live

語法:touch.live(selector, types, options, callback)

使用方法基本上與on相同,live的第一個參數只接受css3選擇器。通過live()方法附加的事件處理程序適用于匹配選擇器的當前及未來的元素(比如由腳本創建的新元素)

touch.off

語法:touch.off(element,types,callback)

解除某元素上的事件綁定。

參數描述:

  • element:元素對象或選擇器

  • types:事件的類型

  • callback:時間處理函數

#p#

Publish/Subscribe

subscribe

訂閱被發布的數據,與pubilsh配合使用

  • 不帶參數 env.subscribe(publishName, function(collection){});

    1. env.subscribe("pub-allStudents"function(studentCollection){ 
    2.  
    3. }); 
    • pulishName

      所定義的Publish的唯一名稱,在一個App內全局唯一,該參數與sumeru.publish(modelName, publishName,function(callback))中的publishName名稱需要保持一致。

    • function(Collection){}

      Subscribe成功獲得數據時,被調用的響應方法。

  • 帶參數 env.subscribe(publishName,arg1,arg2, ... , function(collection){});

    1. env.subscribe("pub-StudentsWithGender""male"function(msgCollection){ 
    2.  
    3. }); 
  • subscribeByPage

    分頁訂閱數據

    • 不帶參數 env.subscribeByPage(publishName, options, function(collection){});

      1. var pageOption{ 
      2.     pagesize : 1,  
      3.     page : 2, 
      4.     uniqueField : 'time' 
      5. }; 
      6.  
      7. env.subscribeByPage("pub-allStudents", pageOption, function(studentCollection){ 
      8.  
      9. }); 
      • options

        分頁設置

        • pageSize

          每頁數據的數量

        • page

          頁碼

        • uniqueField

          排序的唯一字段名

    • 帶參數 env.subscribeByPage(publishName, options, arg1,arg2, ... , function(collection){});

      1. env.subscribeByPage("pub-StudentsWithGender", pageOption, "male"function(msgCollection){ 
      2.  
      3. }); 
  • prioritySubscribe

在斷線重新連接的情況下,使用prioritySubscribe方法訂閱數據優先被調用,使用方式與subscribe相同。

#p#

publish

發布數據的方法,其運行在Server上。

  • 不帶參數 sumeru.publish(modelName,pubName,function(callback){},options)

    • modelName

      被發布數據所屬的Model名稱

    • pubName

      所定義的Publish的唯一名稱,在一個App內全局唯一,該參數與Controller中subscribe()成對使用。

    • function(callback)

      描述數據發布規則的自定義函數,在這里定義被發布數據所需要符合的條件。

    • options

      可在此添加以下六種事件

      • beforeInsert

        在實際插入數據到數據庫前的事件

        1. beforeInsert : function(serverCollection, structData, userinfo, callback){ 
        2.     callback(structData); 
        • structData

          需要插入到數據庫的數據,我們可以對該數據進行操作,然后將數據插入到數據庫中,如果對數據沒有修改,則將原數據添加到數據庫中。

        • callback

          before系列的事件中如果不添加 callback(),將阻止數據對數據庫的影響。

        • callback(structData)

          如果需要對原數據進行修改,可以傳入參數structData

      • afterInsert

        在實際插入數據到數據庫后的事件

        1. afterInsert : function(serverCollection, structData){ 
      • beforeUpdate

        在實際更新數據庫數據前的事件

        1. beforeUpdate : function(serverCollection, structData, userinfo, callback){ 
        2.     callback(); 
      • afterUpdate

        在實際更新數據庫數據后的事件

        1. afterUpdate : function(serverCollection, structData){ 
      • beforeDelete

        在實際刪除數據庫數據前的事件

        1. beforeDelete : function(serverCollection, structData, userinfo, callback){ 
        2.     callback(); 
      • afterDelete

        在實際刪除數據庫數據后的事件

        1. afterDelete : function(serverCollection, structData){ 

    實例:

    1. module.exports = function(sumeru){ 
    2.     sumeru.publish('student''pub-allStudents'function(callback){ 
    3.         var collection = this
    4.  
    5.         collection.find({}, function(err, items){ 
    6.             callback(items); 
    7.         }); 
    8.     }); 
  • 帶參數 sumeru.publish(modelName,pubName,function(arg1, ..., callback){},options)

    實例:

    1. module.exports = function(sumeru){ 
    2.     sumeru.publish('student''pub-allStudents'function(gender,callback){ 
    3.         var collection = this
    4.  
    5.         collection.find({'gender':gender}, function(err, items){ 
    6.             callback(items); 
    7.         }); 
    8.     }); 
  • publishByPage

    分頁發布數據

    sumeru.publishByPage(modelName,pubName,function(arg1,arg2,...,pageOptions, callback){},options)
    • options

      分頁設置,有Controller中subscribeByPage()傳入。

    實例:

    1. sumeru.publishByPage('student''pub-allStudents'function(gender,options,callback){ 
    2.     var collection = this
    3.     collection.find({ sort    :{'time':-1}, 
    4.                       limit   : options.pagesize, 
    5.                       skip    : (options.page-1)*options.pagesize, 
    6.                       "gender": gender 
    7.                      }, function(err, items){ 
    8.         callback(items); 
    9.     }); 
    10. }); 
    • sort

      排序

    • limit

      每頁顯示的個數

    • skip

      當前頁與起始頁間隔的個數

    詳細的使用情況請查看《Example》文檔中的實例。

  • publishPlain

    用于發布簡單對象,而非Collection。

    sumeru.publishPlain(modelName,pubName,function(callback){},options)

    實例:

    如果需要發布Collection中數據的總數量,可使用下面方法:

    1. fw.publishPlain('student''pub-allStudents'function(callback){ 
    2.     var collection = this
    3.  
    4.     collection.count({},function(err, count){ 
    5.         callback(count); 
    6.     }); 
    7. }); 

    下面的三種方法是包含權限中心的身份驗證的Publish。

  • securePublish

    在身份驗證成功的情況下發布數據

    sumeru.publish(modelName,pubName,function(userinfo, callback){},options)
  • securePublishByPage

    在身份驗證成功的情況下分頁發布數據

    sumeru.securePublishByPage(modelName,pubName,function(pageOptions,userinfo, callback){},options)
  • securePublishPlain

    在身份驗證成功的情況下發布簡單對象

    sumeru.securePublishPlain(modelName,pubName,function(userinfo, callback){},options)
  • external

    實現了三方數據同步的方法,用來滿足從三方網站/三方接口獲取和同步數據的需求。

    • extfind(pubName,callback)

      在publish文件中發布第三方數據

      1. fw.publish('news','pubnews',function(callback){ 
      2.     var collection = this
      3.  
      4.     collection.extfind('pubnews',callback); 
      5. }); 

    使用該方法需要在publish下添加一個如何獲取第三方數據的配置文件

    • config[pubname]

      • pubname

        與publish中collection.extfind(pubname,callback)方法pubname一致,全局唯一

      • uniqueColumn

        uniqueColumn為三方數據唯一標識,類型為String

        uniqueColumn : "name",
      • fetchUrl: function((/** arg1, arg2, arg3 */)){}

        指定抓取的URL。arg1,arg2為傳遞的參數

        1. fetchUrl : function(/** arg1, arg2, arg3 */){ 
        2.     return 'http://some.host.com'
      • resolve : function(originData){}

        resolve方法作用是將抓取回來的原始數據(originData)轉化成為符合Model定義的數據(resolved)

        1. resolve : function(originData){ 
        2.     var j = JSON.parse(originData); 
        3.     var resolved = j; 
        4.     return resolved; 
      • fetchInterval

        fetchInterval為可選參數,用來指定抓取時間間隔,單位為ms

      • buffer

        buffer為可選參數,值為true時表示獲取原始Buffer,否則獲取原始數據字符串

      • type

        聲明此模塊為歸屬為'external'

        1. return { 
        2.     type : 'external'
        3.     config : config 

      實例如下:

      1. /** 
      2.  * 獲取三方數據信息,由開發者自定義 
      3.  */ 
      4. function runnable(){ 
      5.     //{Object} config是所有三方publish配置的容器 
      6.     var config = {}; 
      7.  
      8.     config['pubext'] = { 
      9.         //{String} uniqueColumn為三方數據唯一標識 
      10.         uniqueColumn : "name"
      11.  
      12.         //{Function} fetchUrl的參數就是訂閱時發起的參數,返回值為pubext所抓取的url地址 
      13.         fetchUrl : function(/** arg1, arg2, arg3 */){ 
      14.             return 'http://some.host.com'
      15.         }, 
      16.  
      17.         //{Function} resolve方法作用是將抓取回來的原始數據(originData)轉化成為符合Model定義的數據(resolved) 
      18.         resolve : function(originData){ 
      19.             var j = JSON.parse(originData); 
      20.             var resolved = j; 
      21.  
      22.             return resolved; 
      23.         }, 
      24.  
      25.         //{Number} fetchInterval為可選參數,用來指定抓取時間間隔,單位為ms 
      26.         fetchInterval : 60 * 1000, 
      27.  
      28.         //{Boolean} buffer為可選參數,值為true時表示獲取原始Buffer,否則獲取原始數據字符串 
      29.         buffer : false 
      30.     } 
      31.  
      32.     //最后需要聲明此模塊為歸屬為'external' 
      33.     return { 
      34.         type : 'external'
      35.         config : config 
      36.     } 
      37.  
      38.  
      39. module.exports = runnable; 
    • 指定三方增/刪/改接口以及數據

      當數據發生變化時,如何使用Clouda達到三方數據同步的效果,具體實現方法如下:

      • 較為緊湊的聲明方式

        • postUrl

          postUrl方法用來指定三方post接口的地址信息, 參數type為增量類型,增量類型為'insert','update','delete'三者之一;

        • prepare

          prepare方法用來將增量數據轉化成為符合三方POST接口要求的post數據,參數type同為增量類型,參數data為增量的實際數據。

        實例如下:

        1. /** 
        2.  *  三方數據POST請求信息,由開發者自定義 
        3.  */ 
        4. function runnable(){ 
        5.  
        6.     var config = {} 
        7.  
        8.     config['pubext'] = { 
        9.  
        10.         /** 
        11.          * 聲明三方POST接口地址 
        12.          * {String} type為'delete', 'insert', 'update'其中之一 
        13.          * 如果subscribe時帶參數,參數會按照subscribe順序接在postUrl的參數中 
        14.          */ 
        15.         postUrl : function(type /** arg1, arg2, arg3... */){ 
        16.             var options = { 
        17.                 host : 'some.host.com'
        18.                 path : '/' + type , 
        19.                 headers: { 
        20.                     //在此自定義header內容,clouda默認的 'Content-Type': 'application/x-www-form-urlencoded' 
        21.                     'Content-Type': ... 
        22.                 } 
        23.             } 
        24.             return options; 
        25.         }, 
        26.  
        27.         /** 
        28.          * prepare方法將增量數據轉化為符合三方要求的post數據。 
        29.          * {String} type為增量操作,值為'delete', 'insert', 'update'其一; 
        30.          * {Object} data為增量數據,如:{ name : 'user1', age : 26 }。 
        31.          */ 
        32.         prepare : function(type, data){ 
        33.             var prepareData = {};  //prepareData為三方post所需的data 
        34.             if(type === "delete"){ 
        35.                 prepareData.name = data.name; 
        36.             }else if(type === "insert"){ 
        37.                 prepareData.name = data.name; 
        38.                 prepareData.age = data.age; 
        39.             }else
        40.                 prepareData.name = data.name; 
        41.                 prepareData.age = data.age; 
        42.             } 
        43.  
        44.             return prepareData; 
        45.         } 
        46.     } 
        47.  
        48.     return { 
        49.         type : 'external'
        50.         config : config 
        51.     } 
        52.  
        53.  
        54. module.exports = runnable; 
      • 較為工整的聲明方式

        • deleteUrlinsertUrlupdateUrl

          三個方法作用等同于postUrl,返回不同操作下三方接口url信息

        • onDeleteonInsertonUpdate

          三個方法作用等同于prepare方法, 返回經過處理,傳給三方接口的post數據

        實例如下:

        1. function runnable(){ 
        2.  
        3.     var config = {}; 
        4.  
        5.     config['pubext'] = { 
        6.         //arg1, arg2, arg3是subscribe時輸入的參數 
        7.         deleteUrl : function(/** arg1, arg2, arg3... */){ 
        8.             return { 
        9.                 host : 'some.host.com'
        10.                 path : '/delete' 
        11.             } 
        12.         }, 
        13.  
        14.         insertUrl : function(/** arg1, arg2, arg3... */){ 
        15.             return { 
        16.                 host : 'some.host.com'
        17.                 path : '/insert' 
        18.             } 
        19.         }, 
        20.  
        21.         updateUrl : function(/** arg1, arg2, arg3... */){ 
        22.             return { 
        23.                 host : 'some.host.com'
        24.                 path : '/update' 
        25.             } 
        26.         }, 
        27.  
        28.         onInsert : function(data){ 
        29.             var prepareData = {}; 
        30.             prepareData.name = data.name; 
        31.             prepareData.age = data.age; 
        32.             return prepareData; 
        33.         }, 
        34.  
        35.         onUpdate : function(data){ 
        36.             var prepareData = {}; 
        37.             prepareData.name = data.name; 
        38.             prepareData.age = data.age; 
        39.             return prepareData; 
        40.         }, 
        41.  
        42.         onDelete : function(data){ 
        43.             var prepareData = {} 
        44.             prepareData.name = data.name; 
        45.             return prepareData; 
        46.         } 
        47.     } 
        48.  
        49.     return { 
        50.         type : 'external'
        51.         config : config 
        52.     } 
        53.  
        54.  
        55. module.exports = runnable; 
    • sumeru.external.get

      向第三方發送get請求

      1. var url = "http://some.host.com"
      2. var getCallback = function(data){ 
      3.     console.log(data); 
      4. sumeru.external.get(url, getCallback); 
    • sumeru.external.post

      向第三方發送post請求

      1. var options = { 
      2.     host : "some.host.com"
      3.     path : "/insert" 
      4.  
      5. var postData = { 
      6.     name : sumeru.utils.randomStr(8), 
      7.     age : parseInt( 100 * Math.random()) 
      8.  
      9. var postCallback = function(data){ 
      10.     console.log(data); 
      11.  
      12. sumeru.external.post(options, postData, postCallback); 

    具體使用請查看《Example》文檔中的SpiderNews實例。

責任編輯:張葉青
相關推薦

2013-10-31 14:55:22

2013-10-31 13:47:23

CloudaAPI

2013-10-31 13:37:07

CloudaAPI手冊

2013-10-31 15:12:57

CloudaAPI

2010-05-20 19:12:37

2009-10-26 11:11:33

linux Emacs

2010-05-19 10:40:46

Subversion

2010-05-21 12:37:49

SVN使用教程

2010-05-26 14:01:47

SVN安裝使用手冊

2010-05-19 10:57:34

Subversion配

2009-12-02 18:03:00

PHP cURL

2010-08-31 08:59:06

marginHTML

2011-08-09 13:22:31

iPhoneSqlite數據庫

2010-06-09 17:01:26

Cacti使用手冊

2010-05-26 12:45:49

SVN使用手冊

2015-08-06 11:10:46

開源IaaS軟件ZStack本地存儲

2010-08-25 10:53:04

CSSmargin-bott

2011-09-05 16:57:40

MTK開發工具

2010-05-26 13:17:55

SVN簡易使用手冊

2010-05-26 13:51:40

SVN安裝使用手冊
點贊
收藏

51CTO技術棧公眾號

欧美三级日韩在线| 99久久久久久99| 欧美成人激情视频| 精品人妻伦一二三区久| 欧亚av在线| 中国av一区二区三区| 99国产在线观看| 国产情侣自拍av| 日韩三级在线| 亚洲成人av片在线观看| 精品日韩久久久| 欧洲精品二区| 欧美激情在线观看视频免费| 99久久精品免费看国产一区二区三区| 国产69精品久久久久久久久久| 色综合咪咪久久网| 日韩的一区二区| 亚洲欧美一区二区三区不卡| 在线看片福利| 亚洲网友自拍偷拍| 中文字幕色一区二区| 日韩精品视频无播放器在线看| 麻豆成人在线观看| 欧美一区二区三区图| 美国黄色小视频| 成人激情电影在线| 亚洲毛茸茸少妇高潮呻吟| 久草福利在线观看| 欧美激情福利| 91黄色免费版| 成人免费观看视频在线观看| 激情视频在线观看| 国产精品入口麻豆九色| 久久国产精品精品国产色婷婷| 国产福利第一视频| 青草国产精品久久久久久| 2019中文字幕在线观看| 福利所第一导航| 无码一区二区三区视频| 最近2019年好看中文字幕视频 | 日本少妇一区二区| 7m第一福利500精品视频| 国产亚洲色婷婷久久99精品| 91久久夜色精品国产按摩| 亚洲欧美综合区自拍另类| 欧亚乱熟女一区二区在线| 777久久精品| 日韩美女一区二区三区| 三级网站免费看| 久久伊人影院| 欧美成人一区二区三区片免费| 日本高清免费观看| 美国十次综合久久| 日韩美女视频在线| 国产精品成人免费一区久久羞羞| 欧美一级大片在线视频| 欧美一区二区三区免费| 亚洲在线观看网站| 欧美经典一区| 精品成人一区二区三区| xfplay5566色资源网站| 日韩a级大片| 亚洲女同精品视频| 国产人妻大战黑人20p| 欧美限制电影| 日韩一区二区三区xxxx| 国产精品视频在| 婷婷综合激情| 久久久久久中文字幕| 日产亚洲一区二区三区| 天堂蜜桃一区二区三区| 国产精品欧美久久久| 亚洲一级视频在线观看| 国产综合色精品一区二区三区| 亚洲xxx大片| 性xxxx视频| 国产精品三级视频| 成人在线视频一区二区三区| 国产99在线观看| 在线视频一区二区免费| 欧美一级特黄aaa| 国产精品久久久久久久久久白浆| 亚洲欧美另类自拍| 在线免费看av网站| 一本色道久久综合亚洲精品高清 | 亚洲人精品午夜射精日韩| 亚洲天堂手机| 欧美日韩国产综合草草| 男生和女生一起差差差视频| 亚洲av无码乱码国产精品fc2| 搡老熟女老女人一区二区| 91精品论坛| 欧美日韩精品一区视频| 久久人妻少妇嫩草av蜜桃| 久久99高清| 欧美巨大黑人极品精男| wwwwww国产| 国产一区二区三区美女| 乱一区二区三区在线播放| 免费av毛片在线看| 欧美日韩在线第一页| 手机看片国产精品| 久久不卡国产精品一区二区 | 国产传媒在线看| 欧美日韩亚洲一区| 国产精品老女人视频| 人妻一区二区三区四区| 国产女人水真多18毛片18精品视频| 麻豆视频传媒入口| 亚洲综合在线电影| 亚洲高清色综合| 亚洲欧美精品久久| 另类国产ts人妖高潮视频| 91免费福利视频| 国产视频精品久久| 香港成人在线视频| 日本亚洲一区二区三区| 欧美韩一区二区| 九九热在线精品视频| 国产成人av免费| 91啪九色porn原创视频在线观看| 狠狠精品干练久久久无码中文字幕| 日韩欧美一区二区三区免费观看| 亚洲第一中文字幕在线观看| 777777国产7777777| 免费精品视频| 久久久久久九九九九| 啦啦啦中文在线观看日本| 69久久99精品久久久久婷婷| 老头老太做爰xxx视频| 亚洲欧美日韩综合国产aⅴ| 国产亚洲一区在线播放| 青青草原国产在线| 日韩欧美国产一区在线观看| 艳妇荡乳欲伦69影片| 免费在线看成人av| 视频在线99re| ww久久综合久中文字幕| 日韩国产欧美区| 中文字字幕在线中文| 26uuu亚洲婷婷狠狠天堂| 91成人在线观看喷潮教学| 超碰在线亚洲| 韩国国内大量揄拍精品视频| 韩国av免费在线观看| 亚洲伊人伊色伊影伊综合网 | 91视频在线观看免费| 三上悠亚久久精品| 青青一区二区| 欧日韩不卡在线视频| 青青久在线视频| 91成人免费网站| 免费看日本黄色片| 麻豆91精品视频| 伊人久久大香线蕉av一区| 国产日韩在线观看视频| 久久国产加勒比精品无码| 99在线观看免费| 亚洲午夜久久久久久久久电影网 | 日本一区二区高清| xx欧美撒尿嘘撒尿xx| 99久久九九| 91天堂在线观看| 色呦呦呦在线观看| 精品小视频在线| 亚洲国产av一区二区三区| 国产欧美日韩另类视频免费观看| 在线观看日本一区二区| 综合天堂av久久久久久久| 国产精品裸体一区二区三区| 嗯啊主人调教在线播放视频| 亚洲色图美腿丝袜| 国产又粗又猛又黄又爽| 亚洲图片一区二区| 最近中文字幕免费视频| 狠狠久久亚洲欧美| 日韩一级性生活片| 精品99久久| 亚洲影影院av| 日韩伦理在线一区| 日韩中文在线中文网在线观看| 国产福利免费视频| 欧美性色视频在线| 男人晚上看的视频| 99热精品一区二区| 亚洲免费999| 亚洲精品美女91| 亚洲欧美丝袜| 国产精品久久久久av蜜臀| 国产精品爽爽爽爽爽爽在线观看| 怡红院红怡院欧美aⅴ怡春院| 亚洲精品在线91| 国产女人18毛片水真多| 欧美性xxxxx极品娇小| 九九精品视频免费| 久久日一线二线三线suv| 三年中文在线观看免费大全中国| 亚洲一区二区伦理| 99久久久无码国产精品性色戒| 粉嫩的18在线观看极品精品| 国产精品亚发布| 啊啊啊久久久| 久久久成人精品视频| 青青草视频在线观看| 欧美一区二区三区日韩| 波多野结衣家庭主妇| 亚洲成人自拍偷拍| 国产尤物在线播放| 国产免费成人在线视频| 91超薄肉色丝袜交足高跟凉鞋| 日韩av电影一区| 国产资源在线视频| 欧美午夜a级限制福利片| 亚洲一区二区三区乱码| 亚洲区小说区图片区qvod| 高清不卡日本v二区在线| 欧美极品在线| 国产精品白嫩美女在线观看| 国产直播在线| 欧美极品美女电影一区| 麻豆网在线观看| 中文字幕9999| 国产露出视频在线观看| 亚洲精品www久久久久久广东| 午夜精品久久久久久久99| 欧美人体做爰大胆视频| 自拍偷拍精品视频| 91电影在线观看| 国产精品久久久久久久久久久久久久久久久 | 久久精品在线视频| a√在线中文网新版址在线| 日韩精品www| 五十路在线观看| 亚洲国产日韩精品在线| 国精产品乱码一区一区三区四区| 日韩久久精品一区| 国产白浆在线观看| 88在线观看91蜜桃国自产| 伊人免费在线观看| 欧美三级日韩在线| 一区二区视频播放| 欧美日韩国产首页| 91亚洲精品国偷拍自产在线观看| 欧美视频你懂的| 中文字幕+乱码+中文| 欧美日韩免费观看一区三区| 波多野结衣二区三区| 在线观看视频一区二区| 最近中文字幕免费观看| 欧美色国产精品| 97人妻一区二区精品免费视频| 欧美日产在线观看| 国产日本精品视频| 日韩免费观看高清完整版| 可以免费观看的毛片| 亚洲第一网中文字幕| 日本在线视频1区| 国产一区二区三区在线免费观看| 国产1区2区3区在线| 最新亚洲国产精品| 91麻豆免费在线视频| 亚洲91精品在线观看| 欧美电影免费观看| 国产美女91呻吟求| 蜜桃精品一区二区三区| 国产精品一区二区三区免费观看| 噜噜噜狠狠夜夜躁精品仙踪林| 麻豆久久久9性大片| 国产精品一区二区av日韩在线| 亚洲免费精品视频| 欧美三级乱码| 日韩在线xxx| 久久99国产精品久久99| 精品国产aⅴ一区二区三区东京热| 成人免费高清视频在线观看| 成年人网站免费在线观看| 国产精品情趣视频| 久久久综合久久久| 色狠狠综合天天综合综合| 国产精品视频一二区| 亚洲国产欧美日韩精品| 大地资源中文在线观看免费版| 久久久国产精品x99av| 超碰在线99| 成人av.网址在线网站| 国产精品2023| 一本色道久久综合亚洲二区三区| 欧美日韩视频| 亚洲综合日韩欧美| 白白色 亚洲乱淫| 在线免费看视频| 香蕉成人啪国产精品视频综合网| 最近中文字幕在线免费观看| 亚洲精品一线二线三线无人区| 国产福利小视频在线观看| 欧美激情小视频| 国产成人精品一区二区三区视频| 国产 高清 精品 在线 a| 精品香蕉视频| 性欧美大战久久久久久久| 狠狠色丁香久久婷婷综| 久久只有这里有精品| 亚洲成av人片| 亚洲资源在线播放| 亚洲男人天堂久| 91破解版在线观看| 999国产在线| 久久国产中文字幕| 国产a级一级片| 成人综合婷婷国产精品久久免费| 国产7777777| 色综合天天综合网国产成人综合天 | 亚洲美女少妇无套啪啪呻吟| 高潮一区二区三区| 久久嫩草精品久久久精品| 国产精彩视频在线观看| 在线成人av影院| 91精品专区| 国产精品精品国产| 免费观看久久av| 国产午夜大地久久| 成人国产在线观看| 男人的天堂久久久| 在线播放中文字幕一区| 国产在线色视频| 欧美在线亚洲在线| 日韩电影不卡一区| 久久综合色视频| 不卡欧美aaaaa| 五月天婷婷丁香| 欧美精品一区二区三区高清aⅴ| av免费在线网站| 91色琪琪电影亚洲精品久久| 91欧美日韩| 中文字幕66页| 中文字幕亚洲一区二区va在线| 中文字字幕在线中文乱码| 中文字幕不卡av| 成人不卡视频| 香蕉久久夜色| 免费黄网站欧美| 2017亚洲天堂| 欧美人伦禁忌dvd放荡欲情| 日韩欧美小视频| 91精品国产综合久久香蕉最新版| 国产一区二区亚洲| 男女视频在线看| 亚洲国产精品高清| 亚洲一线在线观看| 精品精品国产国产自在线| 成人网av.com/| 白白操在线视频| 成人高清视频免费观看| 日本三级网站在线观看| 日韩精品视频在线观看免费| 中老年在线免费视频| 日本午夜一区二区三区| 蜜臀99久久精品久久久久久软件| 蜜桃av.com| 欧美大片在线观看一区| 2020av在线| 日韩欧美亚洲区| 精彩视频一区二区| 九九视频免费在线观看| 日韩精品在线电影| 成人在线免费av| 99久热在线精品视频| 99久久久精品| 中文文字幕一区二区三三| 欧美成aaa人片在线观看蜜臀| 9l亚洲国产成人精品一区二三 | 一区一区三区| 亚洲欧洲日夜超级视频| 国产一区二区导航在线播放| 国产午夜小视频| 在线播放国产一区二区三区| 亚洲国产一区二区久久| 无码 制服 丝袜 国产 另类| 久久久亚洲午夜电影| 国产精品国产av| 91av成人在线| 97精品国产福利一区二区三区| 4438x全国最大成人| 欧美午夜激情在线| 国产三区在线观看| 久久99九九| 国产美女在线观看一区| 999这里只有精品| 久久九九亚洲综合| 亚洲免费福利一区| 午夜免费福利网站| 91福利在线观看| 暧暧视频在线免费观看| 亚洲一区二区在线看| 99久久精品一区| 国产农村老头老太视频| 国产激情视频一区| 在线看片日韩| 91香蕉一区二区三区在线观看| 国产丝袜高跟一区|