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

基于 HTML5 的 3D 網絡拓撲樹呈現

開發 后端
在HT for Web中2D和3D應用都支持樹狀結構數據的展 示,展現效果各異,2D上的樹狀結構在展現層級關系明顯,但是如果數據量大的話,看起來就沒那么直觀,找到指定的節點比較困難,而3D上的樹狀結構在展現 上配合HT for Web的彈力布局組件會顯得比較直觀,一眼望去可以把整個樹狀結構數據看個大概,但是在彈力布局的作用下,其層次結構看得就不是那么清晰了。所以這時候結 構清晰的3D樹的需求就來了,那么這個3D樹具體長成啥樣呢,我們來一起目睹下~

HT for Web中2D和3D應用都支持樹狀結構數據的展 示,展現效果各異,2D上的樹狀結構在展現層級關系明顯,但是如果數據量大的話,看起來就沒那么直觀,找到指定的節點比較困難,而3D上的樹狀結構在展現 上配合HT for Web的彈力布局組件會顯得比較直觀,一眼望去可以把整個樹狀結構數據看個大概,但是在彈力布局的作用下,其層次結構看得就不是那么清晰了。所以這時候結 構清晰的3D樹的需求就來了,那么這個3D樹具體長成啥樣呢,我們來一起目睹下~

要實現這樣的效果,該從何下手呢?接下來我們就將這個問題拆解成若干個小問題來解決。

1. 創建一個樹狀結構

有了解過HT for Web的朋友,對樹狀結構數據的創建應該都不陌生,在這里我就不做深入的探討了。樹狀結構數據的創建很簡單,在這里為了讓代碼更簡潔,我封裝了三個方法來創建樹狀結構數據,具體代碼如下:

/**
 * 創建連線
 * @param {ht.DataModel} dataModel - 數據容器
 * @param {ht.Node} source - 起點
 * @param {ht.Node} target - 終點
 */
function createEdge(dataModel, source, target) {
    // 創建連線,鏈接父親節點及孩子節點
    var edge = new ht.Edge();
    edge.setSource(source);
    edge.setTarget(target);
    dataModel.add(edge);
}

/**
 * 創建節點對象
 * @param {ht.DataModel} dataModel - 數據容器
 * @param {ht.Node} [parent] - 父親節點
 * @returns {ht.Node} 節點對象
 */
function createNode(dataModel, parent) {
    var node = new ht.Node();
    if (parent) {
        // 設置父親節點
        node.setParent(parent);

        createEdge(dataModel, parent, node);
    }
    // 添加到數據容器中
    dataModel.add(node);
    return node;
}

/**
 * 創建結構樹
 * @param {ht.DataModel} dataModel - 數據容器
 * @param {ht.Node} parent - 父親節點
 * @param {Number} level - 深度
 * @param {Array} count - 每層節點個數
 * @param {function(ht.Node, Number, Number)} callback - 回調函數(節點對象,節點對應的層級,節點在層級中的編號)
 */
function createTreeNodes(dataModel, parent, level, count, callback) {
    level--;
    var num = (typeof count === 'number' ? count : count[level]);

    while (num--) {
        var node = createNode(dataModel, parent);
        // 調用回調函數,用戶可以在回調里面設置節點相關屬性
        callback(node, level, num);
        if (level === 0) continue;
        // 遞歸調用創建孩子節點
        createTreeNodes(dataModel, node, level, count, callback);
    }
}

嘿嘿,代碼寫得可能有些復雜了,簡單的做法就是嵌套幾個for循環來創建樹狀結構數據,在這里我就不多說了,接下來我們來探究第二個問題。

2. 在2D拓撲下模擬3D樹狀結構每層的半徑計算

在3D下的樹狀結構體***的問題就在于,每個節點的層次及每層節點圍繞其父親節點的半徑計算。現在樹狀結構數據已經有了,那么接下來就該開始計算半徑了,我們從兩層樹狀結構開始推算:

我現在先創建了兩層的樹狀結構,所有的子節點是一字排開,并沒有環繞其父親節點,那么我們該如何去確定這些孩子節點的位置呢?

首先我們得知道,每個末端節點都有一圈屬于自己的領域,不然節點與節點之間將會存在重疊的情況,所以在這里,我們假定末端節點的領域半徑為25,那 么兩個相鄰節點之間的最短距離將是兩倍的節點領域半徑,也就是50,而這些末端節點將均勻地圍繞在其父親節點四周,那么相鄰兩個節點的張角就可以確認出 來,有了張角,有了兩點間的距離,那么節點繞其父親節點的最短半徑也就能計算出來了,假設張角為a,兩點間最小距離為b,那么最小半徑r的計算公式為:

r = b / 2 / sin(a / 2);

那么接下來我么就來布局下這個樹,代碼是這樣寫的:

/**
 * 布局樹
 * @param {ht.Node} root - 根節點
 * @param {Number} [minR] - 末端節點的最小半徑
 */
function layout(root, minR) {
    // 設置默認半徑
    minR = (minR == null ? 25 : minR);
    // 獲取到所有的孩子節點對象數組
    var children = root.getChildren().toArray();
    // 獲取孩子節點個數
    var len = children.length;
    // 計算張角
    var degree = Math.PI * 2 / len;
    // 根據三角函數計算繞父親節點的半徑
    var sin = Math.sin(degree / 2),
        r = minR / sin;
    // 獲取父親節點的位置坐標
    var rootPosition = root.p();

    children.forEach(function(child, index) {
        // 根據三角函數計算每個節點相對于父親節點的偏移量
        var s = Math.sin(degree * index),
            c = Math.cos(degree * index),
            x = s * r,
            y = c * r;

        // 設置孩子節點的位置坐標
        child.p(x + rootPosition.x, y + rootPosition.y);
    });
}

在代碼中,你會發現我將末端半徑默認設置為25了,如此,我們通過調用layout()方法就可以對結構樹進行布局了,其布局效果如下:

從效果圖可以看得出,末端節點的默認半徑并不是很理想,布局出來的效果連線都快看不到了,因此我們可以增加末端節點的默認半徑來解決布局太密的問題,如將默認半徑設置成40的效果圖如下:

現在兩層的樹狀分布解決了,那么我們來看看三層的樹狀分布該如何處理。

將第二層和第三層看成一個整體,那么其實三層的樹狀結構跟兩層是一樣的,不同的是在處理第二層節點時,應該將其看做一個兩層的樹狀結構來處理,那么像這種規律的處理用遞歸***不過了,因此我們將代碼稍微該著下,在看看效果如何:

不行,節點都重疊在一起了,看來簡單的遞歸是不行的,那么具體的問題出在哪里呢?

仔細分析了下,發現父親節點的領域半徑是由其孩子節點的領域半徑決定的,因此在布局時需要知道自身節點的領域半徑,而且節點的位置取決于父親節點的領域半徑及位置信息,這樣一來就無法邊計算半徑邊布局節點位置了。

那么現在只能將半徑的計算和布局分開來,做兩步操作了,我們先來分析下節點半徑的計算:

首先需要明確最關鍵的條件,父親節點的半徑取決于其孩子節點的半徑,這個條件告訴我們,只能從下往上計算節點半徑,因此我們設計的遞歸函數必須是先遞歸后計算,廢話不多說,我們來看下具體的代碼實現:

/**
 * 就按節點領域半徑
 * @param {ht.Node} root - 根節點對象
 * @param {Number} minR - 最小半徑
 */
function countRadius(root, minR) {
    minR = (minR == null ? 25 : minR);

    // 若果是末端節點,則設置其半徑為最小半徑
    if (!root.hasChildren()) {
        root.a('radius', minR);
        return;
    }

    // 遍歷孩子節點遞歸計算半徑
    var children = root.getChildren();
    children.each(function(child) {
        countRadius(child, minR);
    });

    var child0 = root.getChildAt(0);
    // 獲取孩子節點半徑
    var radius = child0.a('radius');

    // 計算子節點的1/2張角
    var degree = Math.PI / children.size();
    // 計算父親節點的半徑
    var pRadius = radius / Math.sin(degree);

    // 設置父親節點的半徑及其孩子節點的布局張角
    root.a('radius', pRadius);
    root.a('degree', degree * 2);
}

OK,半徑的計算解決了,那么接下來就該解決布局問題了,布局樹狀結構數據需要明確:孩子節點的坐標位置取決于其父親節點的坐標位置,因此布局的遞歸方式和計算半徑的遞歸方式不同,我們需要先布局父親節點再遞歸布局孩子節點,具體看看代碼吧:

/**
* 布局樹
* @param {ht.Node} root - 根節點
*/
function layout(root) {
    // 獲取到所有的孩子節點對象數組
    var children = root.getChildren().toArray();
    // 獲取孩子節點個數
    var len = children.length;
    // 計算張角
    var degree = root.a('degree');
    // 根據三角函數計算繞父親節點的半徑
    var r = root.a('radius');
    // 獲取父親節點的位置坐標
    var rootPosition = root.p();

    children.forEach(function(child, index) {
        // 根據三角函數計算每個節點相對于父親節點的偏移量
        var s = Math.sin(degree * index),
            c = Math.cos(degree * index),
            x = s * r,
            y = c * r;

        // 設置孩子節點的位置坐標
        child.p(x + rootPosition.x, y + rootPosition.y);

        // 遞歸調用布局孩子節點
        layout(child);
    });
}

代碼寫完了,接下來就是見證奇跡的時刻了,我們來看看效果圖吧:

不對呀,代碼應該是沒問題的呀,為什么顯示出來的效果還是會重疊呢?不過仔細觀察我們可以發現相比上個版本的布局會好很多,至少這次只是末端節點重疊了,那么問題出在哪里呢?

不知道大家有沒有發現,排除節點自身的大小,倒數第二層節點與節點之間的領域是相切的,那么也就是說節點的半徑不僅和其孩子節點的半徑有關,還與其孫子節點的半徑有關,那我們把計算節點半徑的方法改造下,將孫子節點的半徑也考慮進去再看看效果如何,改造后的代碼如下:

/**
* 就按節點領域半徑
* @param {ht.Node} root - 根節點對象
* @param {Number} minR - 最小半徑
*/
function countRadius(root, minR) {
   ……

    var child0 = root.getChildAt(0);
    // 獲取孩子節點半徑
    var radius = child0.a('radius');

    var child00 = child0.getChildAt(0);
    // 半徑加上孫子節點半徑,避免節點重疊
    if (child00) radius += child00.a('radius');

   ……
}

下面就來看看效果吧~

哈哈,看來我們分析對了,果然就不再重疊了,那我們來看看再多一層節點會是怎么樣的壯觀場景呢?

哦,NO!這不是我想看到的效果,又重疊了,好討厭。

不要著急,我們再來仔細分析分析下,在前面,我們提到過一個名詞——領域半徑,什么是領域半徑呢?很簡單,就是可以容納下自身及其所有孩子節點的最 小半徑,那么問題就來了,末端節點的領域半徑為我們指定的最小半徑,那么倒數第二層的領域半徑是多少呢?并不是我們前面計算出來的半徑,而應該加上末端節 點自身的領域半徑,因為它們之間存在著包含關系,子節點的領域必須包含于其父親節點的領域中,那我們在看看上圖,是不是感覺末端節點的領域被侵占了。那么 我們前面計算出來的半徑代表著什么呢?前面計算出來的半徑其實代表著孩子節點的布局半徑,在布局的時候是通過該半徑來布局的。

OK,那我們來總結下,節點的領域半徑是其下每層節點的布局半徑之和,而布局半徑需要根據其孩子節點個數及其領域半徑共同決定。

好了,我們現在知道問題的所在了,那么我們的代碼該如何去實現呢?接著往下看:

/**
* 就按節點領域半徑及布局半徑
* @param {ht.Node} root - 根節點對象
* @param {Number} minR - 最小半徑
*/
function countRadius(root, minR) {
    minR = (minR == null ? 25 : minR);

    // 若果是末端節點,則設置其布局半徑及領域半徑為最小半徑
    if (!root.hasChildren()) {
        root.a('radius', minR);
        root.a('totalRadius', minR);
        return;
    }

    // 遍歷孩子節點遞歸計算半徑
    var children = root.getChildren();
    children.each(function(child) {
        countRadius(child, minR);
    });

    var child0 = root.getChildAt(0);
    // 獲取孩子節點半徑
    var radius = child0.a('radius'),
        totalRadius = child0.a('totalRadius');

    // 計算子節點的1/2張角
    var degree = Math.PI / children.size();
    // 計算父親節點的布局半徑
    var pRadius = totalRadius / Math.sin(degree);

    // 緩存父親節點的布局半徑
    root.a('radius', pRadius);
    // 緩存父親節點的領域半徑
    root.a('totalRadius', pRadius + totalRadius);
    // 緩存其孩子節點的布局張角
    root.a('degree', degree * 2);
}

在代碼中我們將節點的領域半徑緩存起來,從下往上一層一層地疊加上去。接下來我們一起驗證其正確性:

搞定,就是這樣子了,2D拓撲上面的布局搞定了,那么接下來該出動3D拓撲啦~

3. 加入z軸坐標,呈現3D下的樹狀結構

3D拓撲上面布局無非就是多加了一個坐標系,而且這個坐標系只是控制節點的高度而已,并不會影響到節點之間的重疊,所以接下來我們來改造下我們的程序,讓其能夠在3D上正常布局。

也不需要太大的改造,我們只需要修改下布局器并且將2D拓撲組件改成3D拓撲組件就可以了。

/**
* 布局樹
* @param {ht.Node} root - 根節點
*/
function layout(root) {
    // 獲取到所有的孩子節點對象數組
    var children = root.getChildren().toArray();
    // 獲取孩子節點個數
    var len = children.length;
    // 計算張角
    var degree = root.a('degree');
    // 根據三角函數計算繞父親節點的半徑
    var r = root.a('radius');
    // 獲取父親節點的位置坐標
    var rootPosition = root.p3();

    children.forEach(function(child, index) {
        // 根據三角函數計算每個節點相對于父親節點的偏移量
        var s = Math.sin(degree * index),
            c = Math.cos(degree * index),
            x = s * r,
            z = c * r;

        // 設置孩子節點的位置坐標
        child.p3(x + rootPosition[0], rootPosition[1] - 100, z + rootPosition[2]);

        // 遞歸調用布局孩子節點
        layout(child);
    });
}

上面是改造成3D布局后的布局器代碼,你會發現和2D的布局器代碼就差一個坐標系的的計算,其他的都一樣,看下在3D上布局的效果:

恩,有模有樣的了,在文章的開頭,我們可以看到每一層的節點都有不同的顏色及大小,這些都是比較簡單,在這里我就不做深入的講解,具體的代碼實現如下:

var level = 4,
    size = (level + 1) * 20;

var root = createNode(dataModel);
root.setName('root');
root.p(100, 100);

root.s('shape3d', 'sphere');
root.s('shape3d.color', randomColor());
root.s3(size, size, size);

var colors = {},
    sizes = {};
createTreeNodes(dataModel, root, level - 1, 5, function(data, level, num) {
    if (!colors[level]) {
        colors[level] = randomColor();
        sizes[level] = (level + 1) * 20;
    }

    size = sizes[level];

    data.setName('item-' + level + '-' + num);
    // 設置節點形狀為球形
    data.s('shape3d', 'sphere');
    data.s('shape3d.color', colors[level]);
    data.s3(size, size, size);
});

在這里引入了一個隨機生成顏色值的方法,對每一層隨機生成一種顏色,并將節點的形狀改成了球形,讓頁面看起來美觀些(其實很丑)。

提個外話,節點上可以貼上圖片,還可以設置文字的朝向,可以根據用戶的視角動態調整位置,等等一系列的拓展,這些大家都可以去嘗試,相信都可以做出一個很漂亮的3D樹出來。

到此,整個Demo的制作就結束了,今天的篇幅有些長,感謝大家的耐心閱讀,在設計上或則是表達上有什么建議或意見歡迎大家提出,點擊這里可以訪問HT for Web官網上的手冊

責任編輯:王雪燕 來源: xhload3d
相關推薦

2014-09-12 10:30:51

HTML5熱力圖

2014-02-24 11:43:44

HTML5機房監控

2012-02-27 10:00:50

HTML 5

2015-06-26 11:51:26

HTML5JavaScript

2009-12-14 08:58:25

HTML5網頁3DWebGL

2015-12-07 09:05:37

HTML5動畫源碼

2012-04-24 15:07:49

HTML5

2009-12-15 16:13:11

3D圖像

2011-08-01 16:43:51

ibmdwHTML5Dojo

2015-04-22 16:17:41

3D互聯網優锘

2016-10-09 09:57:41

Html5拓撲圖3D

2013-05-31 15:48:44

Atheer增強現實D11

2015-07-06 09:57:04

HTML5CSS框架BootFlat

2012-04-01 10:02:00

HTML5

2011-07-14 09:30:47

HTML 5Windows PhoMango

2013-01-24 10:26:04

HTML5HTML 5HTML5的未來

2024-07-18 06:58:36

2011-05-26 10:08:14

2013-05-28 11:08:51

人臉識別html5

2011-09-08 09:38:46

HTML5 WidgeDojo
點贊
收藏

51CTO技術棧公眾號

日韩精品系列| 97超碰人人干| 亚洲网站免费| 一片黄亚洲嫩模| 精品国产乱码久久久久久丨区2区| 三级黄色在线视频| 成人在线丰满少妇av| 免费观看在线综合色| 日韩有码在线电影| 精品熟女一区二区三区| 亚洲国产尤物| 亚洲国产美女搞黄色| 三区精品视频观看| 性生交生活影碟片| 欧美一级精品| 日韩欧美一区二区在线视频| 中国丰满人妻videoshd| 久草中文在线观看| 久久色.com| 91久久久一线二线三线品牌| 国产精品久久久久久人| 午夜精品久久99蜜桃的功能介绍| 亚洲人成电影在线观看天堂色| 精品国产午夜福利在线观看| 国产一区二区主播在线| 亚洲成人中文在线| 国产一区一区三区| 一区二区自拍偷拍| 尹人成人综合网| 精品国产一区av| 国产毛片久久久久久久| 日本在线啊啊| 一区二区三区四区不卡视频 | 超碰97在线资源| 免费看av在线| jlzzjlzz亚洲女人| 亚洲国产精品资源| 黑人无套内谢中国美女| 91在线中文| 欧美韩国一区二区| 老司机精品福利在线观看| 亚洲精品国产片| 国产在线精品视频| 国产欧美日韩高清| 蜜臀99久久精品久久久久小说| 亚洲人成久久| 国色天香2019中文字幕在线观看| 欧美日韩免费一区二区| 国内毛片久久| 欧美大胆一级视频| 亚洲av午夜精品一区二区三区| 亚洲男女网站| 在线91免费看| 网站在线你懂的| 99精品国产九九国产精品| 在线亚洲人成电影网站色www| 日韩视频精品| 国内精品一区视频| 久久久国产综合精品女国产盗摄| 国产综合色一区二区三区| 高h震动喷水双性1v1| 懂色av一区二区三区免费看| 久久伊人色综合| 中国老熟女重囗味hdxx| 精品91福利视频| 日韩视频一区在线观看| 久久综合桃花网| 亚洲超碰在线观看| 精品黑人一区二区三区久久| 中国xxxx性xxxx产国| 国产乱人伦丫前精品视频| 亚洲国内高清视频| 亚洲av综合一区二区| 国产成人影院| 日韩在线不卡视频| 久久久精品91| 国产亚洲一区在线| 国产精品看片资源| 国产精品无码久久久久成人app| 国产一区二区三区在线观看精品| 成人动漫在线视频| 色偷偷在线观看| 久久亚区不卡日本| 一区二区三区av在线| 手机电影在线观看| 欧美丝袜一区二区三区| 999精彩视频| 日韩在线视频一区二区三区| 亚洲电影av在线| 蜜臀久久99精品久久久久久| 91av精品| 欧美一级大片在线免费观看| 一级特黄aaaaaa大片| 国产传媒一区在线| 欧美日韩国产精品一卡| 日本高清在线观看wwwww色| 99精品热视频| 五月天久久综合网| 麻豆av在线播放| 在线观看日产精品| 潘金莲一级淫片aaaaa| 久操成人av| 久久综合网hezyo| 69国产精品视频免费观看| 极品美女销魂一区二区三区免费| 日本亚洲精品在线观看| 国产裸体永久免费无遮挡| 不卡影院免费观看| 亚洲在线色站| 欧美aa免费在线| 日韩一区二区在线免费观看| 国产人妻大战黑人20p| 欧美精品成人| 久青草国产97香蕉在线视频| 亚洲 欧美 日韩 综合| 国模吧视频一区| 国产精品久久久久高潮| 成人小说亚洲一区二区三区| 国产精品美女一区二区| 北条麻妃在线视频观看| 麻豆国产一区二区三区四区| 国产一区二区三区丝袜| 国产精品日日夜夜| 国产自产2019最新不卡| 日韩福利一区二区三区| 看黄在线观看| 精品国产一区a| 日本午夜在线观看| 日本va欧美va瓶| 国产精品一区久久久| 天天干天天爱天天操| 亚洲精品视频在线观看免费| 超碰超碰在线观看| 精品国产乱码久久久久久蜜坠欲下 | 色综合久久久久网| xfplay5566色资源网站| 欧美暴力喷水在线| 成人写真视频福利网| 2017亚洲天堂1024| 欧美视频完全免费看| 在线播放av中文字幕| 国内精品久久久久久久影视简单| 97在线观看免费高清| 欧美一级性视频| 亚洲国产精品自拍| 岛国精品一区二区三区| 欧美日本三区| 国产日韩欧美精品| 国产一二在线播放| 亚洲精品电影网站| 日韩三级免费看| 99久久综合国产精品| 国产极品粉嫩福利姬萌白酱| 国产精品宾馆| 69久久夜色精品国产69乱青草| 国产一区二区视频网站| 久久综合色天天久久综合图片| 美女日批免费视频| 日韩精品福利一区二区三区| 欧美一级片一区| 国产在线观看黄| 欧美三级电影在线看| 99视频在线观看视频| 亚洲色图二区| 97人摸人人澡人人人超一碰| 日本色护士高潮视频在线观看| 日韩美女视频在线| 日本少妇激情舌吻| 91视频观看视频| 国产又大又黄又粗的视频| 成人无号精品一区二区三区| 成人黄色片在线| 欧美寡妇性猛交xxx免费| 亚洲韩国欧洲国产日产av| www欧美在线| 日本一区二区成人在线| av女优在线播放| 国产精品久久久久久久久免费高清 | 国产高清在线观看| 欧美色图12p| 欧美毛片在线观看| 91亚洲精品乱码久久久久久蜜桃| www.xxx亚洲| 亚洲有吗中文字幕| 国产乱子伦精品| 日韩一级二级| 欧美富婆性猛交| 日韩福利一区二区| 欧美日本一区二区在线观看| 国产人妻人伦精品1国产丝袜| 免费亚洲一区| youjizz.com亚洲| 欧美一级三级| 成人高清视频观看www| 久久一卡二卡| 中文字幕日韩av电影| а√中文在线资源库| 色视频成人在线观看免| 国产美女福利视频| 97久久超碰国产精品| 亚洲18在线看污www麻豆| 亚洲精选一区| 亚洲三区在线观看| 欧美人体视频| 91gao视频| 成人亚洲免费| 欧美在线www| 免费污视频在线观看| 日韩在线免费观看视频| 色丁香婷婷综合久久| 3atv一区二区三区| 国产免费一区二区三区四区五区| 亚洲午夜免费福利视频| 国产又粗又长又黄的视频| 视频一区在线播放| 久久久久久av无码免费网站下载| 禁果av一区二区三区| 国产传媒一区二区三区| 91麻豆精品| 国产精品久久久久7777婷婷| 日本三级一区| 高清欧美性猛交| caopo在线| 久久精品99久久久香蕉| yiren22亚洲综合伊人22| 亚洲黄页视频免费观看| 超碰福利在线观看| 在线成人小视频| 中文字幕日韩经典| 日本韩国欧美在线| 国产专区第一页| 欧美日韩国产综合视频在线观看中文 | av片中文字幕| 亚洲一区欧美激情| 分分操这里只有精品| 亚洲电影在线一区二区三区| 亚洲欧美国产精品桃花| 亚洲电影二区| 国产精品久久久久久久久免费看 | 国产精品视频yy9099| 成人影院av| 青草青草久热精品视频在线网站 | 一本到不卡精品视频在线观看 | 91福利国产成人精品照片| 久久久久99精品成人片我成大片| 亚洲成在人线在线播放| 国产精品2020| 天天色天天操综合| 国产成人愉拍精品久久| 亚洲不卡av一区二区三区| av网站免费在线播放| 成人在线视频一区| caopor在线| av色综合久久天堂av综合| 亚洲男人在线天堂| 久久影院视频免费| 蜜乳av中文字幕| 国产精品久久久久久久久图文区 | 久久高清无码视频| 亚洲在线中文字幕| 一区二区三区视频免费看| 欧美丝袜一区二区三区| 欧美日韩 一区二区三区| 欧美色老头old∨ideo| 国产精品久久综合青草亚洲AV| 91精品国产高清一区二区三区 | 中国美女乱淫免费看视频| 91美女片黄在线观看91美女| 亚洲最大成人网站| 欧美高清在线一区| 青青青在线视频| 亚洲超碰精品一区二区| 日韩精品一区二区亚洲av观看| 欧美在线免费观看亚洲| 国产精品无码免费播放| 亚洲成人av在线| 国产在线网站| 欧美日韩国产成人在线| 亚洲精品永久免费视频| 国产精品中文在线| 91成人精品在线| 欧美午夜精品久久久久免费视| 色综合天天综合网中文字幕| 欧美日韩激情四射| 久久亚洲风情| 夜夜爽久久精品91| 99久久精品国产精品久久| 亚洲一二三四视频| 亚洲综合丁香婷婷六月香| 国产美女激情视频| 欧美精品欧美精品系列| 色婷婷激情五月| 日韩视频中文字幕| av漫画网站在线观看| 国产精品亚洲网站| 超碰在线成人| 亚洲va码欧洲m码| 欧美人成在线观看ccc36| 制服诱惑一区| 香蕉久久夜色精品| 日韩a一级欧美一级| 久久久午夜电影| 黄色在线观看免费| 在线观看国产一区二区| 人妻精品一区一区三区蜜桃91| 色噜噜狠狠色综合网图区 | 国产精品久久色| 牛牛影视久久网| 欧美另类videos| 日本在线播放一区二区三区| 2一3sex性hd| 亚洲久草在线视频| 91久久久久国产一区二区| 亚洲美女自拍视频| av福利在线导航| 亚洲aaa激情| 欧美freesextv| 欧美三级午夜理伦三级| 成人教育av在线| 99精品久久久久| 欧美二区三区的天堂| 98在线视频| 国产精品久久久久久久久借妻| 日本三级久久| 18禁免费观看网站| 成人18视频日本| 久久免费播放视频| 日韩一级免费观看| 国产在线高潮| 成人精品一区二区三区| 日韩免费av| 亚洲国产日韩欧美在线观看| 久久精品一区二区三区不卡| 久久久久久久久影院| 亚洲精品一区二区三区在线观看 | 亚洲精品欧美二区三区中文字幕| 免费又黄又爽又猛大片午夜| 日韩高清免费观看| 乱人伦视频在线| 麻豆av福利av久久av| 日韩一级欧洲| 国产乱了高清露脸对白| 午夜精品影院在线观看| 亚洲国产精品久久人人爱潘金莲| 久久91亚洲精品中文字幕| 美国十次综合久久| 国产免费xxx| 亚洲第一黄网| 欧美极品jizzhd欧美仙踪林| 亚洲综合色噜噜狠狠| 亚洲精品一级片| 久久久久久国产三级电影| 国产精品17p| 久久久久久久久久久99| 91麻豆国产在线观看| 五月婷婷激情视频| 亚洲石原莉奈一区二区在线观看| 亚洲不卡系列| 一区二区三区精品国产| 国产制服丝袜一区| 久久久久97国产| 亚洲国产精品网站| 欧美电影免费看| www.亚洲国产| 日本免费a视频| 成人永久aaa| av大片在线免费观看| 在线观看成人黄色| 国内精品视频| 精品久久久久久久久久中文字幕| 久久午夜电影网| 一级黄色大片免费| 美女精品视频一区| 欧美成人基地| 欧美三级午夜理伦三级富婆| 一区二区三区在线观看视频| 日韩激情视频| 午夜宅男久久久| 任你操精品视频| 精品久久一二三区| 天天免费亚洲黑人免费| 手机看片日韩国产| 99免费精品视频| 97av免费视频| 91精品国产91久久久久久吃药 | 亚洲欧美韩国| 亚洲欧美日韩精品久久久| 国产精品91xxx| 最新中文字幕一区| 欧美成人午夜激情| 最新国产一区| 丰满少妇中文字幕| 色一区在线观看| 麻豆福利在线观看| 亚洲视频在线二区| www.亚洲在线| 国产精品久久久久久久成人午夜| 91精品国产777在线观看| 97精品一区二区| 欧美高清性xxxx|