国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

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

2010-05-19 10:40:46

Subversion

2009-10-26 11:11:33

linux Emacs

2011-08-09 13:22:31

iPhoneSqlite數據庫

2010-08-31 08:59:06

marginHTML

2009-12-02 18:03:00

PHP cURL

2010-05-21 12:37:49

SVN使用教程

2010-05-19 10:57:34

Subversion配

2010-05-26 14:01:47

SVN安裝使用手冊

2010-05-26 13:17:55

SVN簡易使用手冊

2010-05-26 13:51:40

SVN安裝使用手冊

2010-05-26 12:59:48

SVN簡易使用手冊

2010-05-27 13:35:43

SVN簡易使用手冊

2010-06-07 12:38:37

Cacti使用手冊

2010-06-09 17:01:26

Cacti使用手冊

2015-08-06 11:10:46

開源IaaS軟件ZStack本地存儲
點贊
收藏

51CTO技術棧公眾號

精品国产一区av| 久久网站最新地址| 国产亚洲激情| 福利视频一区二区| 一区二区三区日本久久久| 日韩欧美一中文字暮专区| 夜夜躁狠狠躁日日躁2021日韩| 欧美日韩一级片在线观看| 国产精品一二三在线观看| 日韩高清a**址| 国产原创精品在线| 午夜视频在线观看精品中文 | 国产99久久精品一区二区永久免费 | 经典三级一区二区| 欧美一区二视频| 在线看片地址| 国产在线精品一区二区三区不卡 | 欧美激情成人在线| 国产精品中文字幕在线| 免费观看性欧美大片无片| 在线观看欧美视频| 亚洲热av色在线播放| xxav国产精品美女主播| 久久影视精品| 久久艳片www.17c.com| 国产精品一区二区三区av| 日韩av在线电影网| 超碰在线免费公开| 亚洲精品久久久久久下一站| 日韩三级电影网| 日韩人在线观看| 亚洲香蕉av在线一区二区三区| 欧美主播一区二区三区美女 久久精品人| 午夜欧美精品久久久久久久| 国产专区欧美专区| 午夜在线观看免费一区| 91精品黄色| 久久国产精品露脸对白| av网站手机在线观看| 另类欧美日韩国产在线| 手机成人在线| 国产.欧美.日韩| 狠狠色综合欧美激情| 国产91露脸合集magnet| 国产真实乱子伦| 日本中文字幕一区二区有限公司| 亚洲mm色国产网站| 欧美精品国产| 自拍偷拍一区二区三区| 亚洲午夜在线观看视频在线| 成年女人在线看片| 国产精品影视在线观看| 日本中文字幕高清视频| 日韩精品在线观看网站| 国产精品成久久久久| 国产二级片在线观看| 日韩一区二区高清| 五月久久久综合一区二区小说| 日韩免费毛片视频| 亚洲国产一区二区三区在线观看 | 亚洲日本一区二区| 精品入口麻豆88视频| 精品成人一区二区三区免费视频| 欧日韩免费视频| 97在线视频免费| 日韩欧美在线视频观看| 成人短视频在线| 亚洲欧美日韩第一区| 极品中文字幕一区| 六十路精品视频| 欧美日韩成人一区| 久久五月精品| 日韩av成人在线| 日韩毛片在线免费观看| 极品美女销魂一区二区三区| 超碰免费在线观看| 久久999免费视频| 亚洲成人在线观看视频| 中文字幕资源网在线观看免费| 久久亚洲欧美日韩精品专区 | 精品免费国产一区二区| 欧美高清在线一区| 最近中文字幕mv免费高清在线| 欧美日韩中文字幕综合视频| 96av在线| 一区二区日本伦理| 精品一区精品二区| 国产精品xvideos88| 在线视频不卡一区二区| 懂色av影视一区二区三区| 国产精品久久久久久久久久辛辛| 午夜精品视频在线观看一区二区 | 国产xxx69麻豆国语对白| 欧美一区二区三区免费视频 | 激情视频小说图片| 少妇淫片在线影院| 国产真实生活伦对白| 久久国产精品影片| 欧美一区二区三区另类| 国产免费永久在线观看| 国产精品热视频| 亚洲护士老师的毛茸茸最新章节 | 四虎国产精品免费久久5151| 国产在线视频资源| 欧美成人精品免费| 少妇高潮 亚洲精品| 中文字幕亚洲欧美在线不卡| 国产69精品一区二区亚洲孕妇| 国产福利电影在线| 五月天久久狠狠| 亚洲一区二区三区乱码aⅴ蜜桃女| 精品国产区一区二区三区在线观看| 亚洲欧洲制服丝袜| 欧美成人福利| 亚洲一区日韩精品| 成人久久久久爱| 欧美日韩国产一级片| 亚洲特级毛片| 欧美成人免费电影| 欧美18 19xxx| 欧洲国产精品| 国产精品视频一二| 午夜亚洲影视| 岛国av在线网站| 91视频成人免费| 国产精品揄拍一区二区| 国语自产精品视频在线看一大j8 | 疯狂做受xxxx欧美肥白少妇| 亚洲精品成人a在线观看| 国产精品嫩草99a| 欧美永久精品| 波多野结衣在线观看| 中国人体摄影一区二区三区| 欧美精品videosex性欧美| 欧美精品一区二区三区很污很色的| 日韩欧美国产综合一区| 亚洲福利一区二区| 亚洲国产精品影院| 在线免费观看日本一区| 在线观看国产精品网站| 国产精品久久久久久久久久久免费看| 欧美视频不卡| 91大神在线观看线路一区| 免费观看成人高潮| 69日本xxxxxxxxx49| 成人免费乱码大片a毛片软件| 91高清视频在线免费观看| 欧美一区二区二区| 3d成人动漫网站| 精品视频久久久久久| 欧美亚洲国产视频| 伦理中文字幕亚洲| 日韩有码在线观看| www.成人av| 国产99久久九九精品无码| 国产精选一区二区| 狠狠精品干练久久久无码中文字幕 | 国产熟人av一二三区| 成人av小说网| 国产午夜精品一区理论片| 宅男在线观看免费高清网站| 久久青草视频| 在线看片不卡| 国产69精品久久99不卡| 舔着乳尖日韩一区| 亚洲精品视频播放| 国产精品热视频| 国产女教师bbwbbwbbw| 中文在线三区| 亚洲精品aaa| 久久伊人亚洲| 精品久久香蕉国产线看观看亚洲| 亚洲精品影视在线观看| 91在线网站视频| 男人女人黄一级| 99精品视频免费在线观看| 17c精品麻豆一区二区免费| 欧美一级夜夜爽| 国产成人精品免费久久久久 | 精彩国产在线| 欧洲美女日日| 五月天激情小说综合| 欧美亚洲国产日本| 羞羞的视频免费| 日韩aaa久久蜜桃av| 国产精品国产三级国产普通话99 | 中文字幕www| 欧美性xxx| 9久草视频在线视频精品| 亚洲区中文字幕| 黄色特一级视频| 欧美性受ⅹ╳╳╳黑人a性爽| 亚洲制服av| 7777精品久久久大香线蕉| 国产嫩草一区二区三区在线观看| 视频一区二区三区在线看免费看| 欧美福利专区| 欧美一级黄色大片| 日韩电影大全在线观看| 在线观看v片|