精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美做受高潮电影o| 日韩精品一区二区三区视频播放 | 欧美成人日韩| 日韩亚洲欧美在线观看| 2018国产在线| 免费观看成年在线视频网站| 精品一区在线看| 国内外成人免费激情在线视频网站| 日日摸日日碰夜夜爽av| 成人在线视频成人| 粉嫩av一区二区三区| 欧美影院在线播放| 老司机成人免费视频| 秋霞蜜臀av久久电影网免费| 欧美美女喷水视频| 免费在线激情视频| 182tv在线播放| 久久精品欧美一区二区三区麻豆| 91精品国产色综合久久不卡98| 亚洲av毛片在线观看| 77thz桃花论族在线观看| 国产女同性恋一区二区| 国产精品一区二区三区在线观| 欧美色图亚洲视频| 精品一区电影| 亚洲国产黄色片| 17c国产在线| free欧美| 欧美日韩亚洲视频| 国产精品自拍合集| 在线免费黄色| 久久久久9999亚洲精品| 成人av影视在线| 91久久国语露脸精品国产高跟| 久久美女视频| 亚洲欧美日本另类| 伊人网综合视频| 日韩电影精品| 日本二三区不卡| 热99这里只有精品| 男人添女人下部高潮视频在线观看| 成人夜色视频网站在线观看| 成人深夜直播免费观看| 自拍偷拍精品视频| 日韩成人一区二区| 国产97在线视频| 三级视频在线观看| 亚洲在线视频| 奇门遁甲1982国语版免费观看高清| 日韩女同一区二区三区| 日本欧美韩国国产| 亚洲国产精品电影在线观看| 香蕉在线观看视频| 一区中文字幕| 精品欧美乱码久久久久久1区2区| 成人观看免费完整观看| 日韩伦理在线一区| 欧美视频一区二区三区…| 欧美变态另类刺激| 中文字幕在线看片| 狠狠做深爱婷婷久久综合一区 | 一级欧洲+日本+国产| 精品国产网站地址| 日本一二三区在线观看| 在线观看国产精品入口| 中文字幕在线观看日韩| 美女网站视频色| 亚洲国产精品成人| 欧美福利视频在线| 一区二区三区视频免费看| 国产视频一区免费看| 91av成人在线| jizz国产在线| 久久国产精品一区二区| 91亚洲精品在线| 人妻精品一区二区三区| 91丨九色丨黑人外教| 日本一区不卡| 麻豆视频在线观看免费网站| 亚洲靠逼com| 欧美一级视频免费看| av资源亚洲| 欧美美女一区二区| 一级黄色片毛片| 曰本一区二区三区视频| 色综久久综合桃花网| 日韩a级片在线观看| 亚洲另类黄色| 成人免费福利在线| 无码精品黑人一区二区三区| 欧美高清一级片在线观看| 艳母动漫在线观看| 91福利在线尤物| 亚洲大尺度视频在线观看| 日本999视频| 精品一区二区三区中文字幕在线 | 亚洲另类春色校园小说| 亚洲精品日韩欧美| 久久国产精品国语对白| 亚洲精品美女91| 国产精品入口夜色视频大尺度| 婷婷激情五月网| 开心九九激情九九欧美日韩精美视频电影| 91成品人片a无限观看| 最新中文字幕免费| 成人精品免费网站| 一区二区三区免费看| av影片在线| 在线成人小视频| mm131美女视频| 欧美aa国产视频| 日韩美女视频中文字幕| www.好吊色| 亚洲国产高清在线观看视频| 久久久性生活视频| 国内不卡的一区二区三区中文字幕| 欧美日韩中文一区| 大尺度做爰床戏呻吟舒畅| 日韩片欧美片| 欧美一区二区三区艳史| 亚洲成人精品女人久久久| 日本一区二区免费在线观看视频| 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | 中文字幕免费不卡| 波多野结衣综合网| 二区三区精品| 亚洲最新av在线| 国产福利拍拍拍| 国产精品一区二区免费不卡 | 成人小说亚洲一区二区三区| 中文在线免费一区三区高中清不卡| 亚洲精品永久www嫩草| 成年男女免费视频网站不卡| 欧美一区二区在线免费播放 | 91一区二区在线| 美女在线免费视频| 日本亚洲欧洲无免费码在线| 国产一区二区三区视频| 成人免费毛片视频| 国产视频一区二区三区在线观看| 亚洲一二区在线| 自拍偷拍欧美视频| 日韩电影中文 亚洲精品乱码| youjizz亚洲女人| 六月丁香综合| 美国av一区二区三区| 98色花堂精品视频在线观看 | 国产suv一区二区| 欧美国产欧美亚州国产日韩mv天天看完整 | 国产调教一区二区三区| 久久乐国产精品| 精品人妻一区二区三区四区不卡 | 久久久精品成人| 亚洲永久网站| 热舞福利精品大尺度视频| 亚洲wwww| 最好看的2019的中文字幕视频| 日韩女优一区二区| 丁香一区二区三区| 男人日女人视频网站| 精品资源在线| 日本高清不卡的在线| 成人一区二区不卡免费| 欧美主播一区二区三区| 四虎永久免费地址| 国产精品1区二区.| 无码人妻精品一区二区蜜桃网站| 91福利精品在线观看| 亚洲伦理中文字幕| 这里只有久久精品视频| 中文字幕中文字幕中文字幕亚洲无线| 日本韩国欧美在线观看| 一区二区导航| 国产在线拍揄自揄视频不卡99| 午夜视频1000| 在线亚洲一区二区| 国产1区2区3区4区| 成人一区二区在线观看| 波多野结衣家庭教师在线| 国产尤物久久久| 成人信息集中地欧美| av漫画网站在线观看| 伊人成人开心激情综合网| 国产巨乳在线观看| 精品久久久中文| 国产三级aaa| www.久久精品| 97超碰人人爽| 日韩香蕉视频| 每日更新成人在线视频| 国产精品一区二区不卡视频| 日日av拍夜夜添久久免费| 久久久精品久久久久| 少妇无码一区二区三区| 在线精品视频免费观看| 久草视频免费在线| 国产日韩亚洲欧美综合| 99久久综合网| 巨乳诱惑日韩免费av| 玖玖精品在线视频| 亚州综合一区| 91久久久久久久久久久久久| 美女的胸无遮挡在线观看 | 精品人妻aV中文字幕乱码色欲| 国产精品理论在线观看| 久久久久无码精品| 日韩和欧美一区二区三区| 黄色a级片免费看| 日韩免费特黄一二三区| 久久狠狠久久综合桃花| 久久久久久久久久久久电影| 国产成人a亚洲精品| 亚洲www色| 久久精品国产免费观看| 国产在线一二三| 亚洲第一二三四五区| 中文字幕+乱码+中文字幕明步 | 亚洲毛片aa| 欧美在线关看| 99久久自偷自偷国产精品不卡| 蜜臀av在线| 国产一区二区日韩| 欧美孕妇性xxxⅹ精品hd| 亚洲第一视频网站| 精品人妻少妇AV无码专区| 欧美巨大另类极品videosbest | 夫妇交换中文字幕| 91在线精品一区二区| 午夜福利三级理论电影| 国产乱国产乱300精品| 红桃视频 国产| 美女视频黄频大全不卡视频在线播放| 日本成人性视频| 欧美日韩老妇| 日本欧美色综合网站免费| 婷婷亚洲成人| 精品日韩欧美| 国产精品久av福利在线观看| 91九色精品视频| 国产精品亚洲一区二区在线观看| 国内精品久久久久久| 污污的视频在线观看| 久久91精品国产| 视频在线这里都是精品| 欧美成人免费在线观看| 91中文在线| 久久99精品久久久久久噜噜| 4438x成人网全国最大| 久久69精品久久久久久久电影好| 欧美精品少妇| 亚洲欧美日韩国产精品| 国产在线超碰| 色琪琪综合男人的天堂aⅴ视频| 国产福利免费视频| 日韩精品中午字幕| 黑人乱码一区二区三区av| 精品国产亚洲在线| 超碰在线人人干| 亚洲成人a**站| 性xxxxbbbb| 亚洲午夜国产成人av电影男同| 丰满肉嫩西川结衣av| 精品电影一区二区三区| 天堂在线视频观看| 亚洲偷欧美偷国内偷| av在线收看| 美女视频黄免费的亚洲男人天堂| 日韩欧美在线观看一区二区| 国产亚洲免费的视频看| 日本福利在线| 欧美乱大交xxxxx| 国产黄大片在线观看| 国产精品欧美久久久| 国产激情精品一区二区三区| 国产日韩亚洲精品| 国产一区二区三区四区五区传媒 | 国产欧美日韩在线观看视频| 日本在线观看一区二区三区| 99久久精品费精品国产风间由美| 日产精品一线二线三线芒果| 大色综合视频网站在线播放| 久久久99精品视频| 性欧美videos另类喷潮| 亚洲综合日韩欧美| 丁香另类激情小说| 亚洲成人黄色av| 亚洲精品欧美综合四区| 午夜精品三级久久久有码| 欧美日韩激情一区二区三区| 蜜臀av在线观看| 中文字幕精品—区二区| 四季久久免费一区二区三区四区| 久久这里只有精品99| www成人免费观看| 国产精品视频最多的网站| 成人性生交大片免费看中文视频| 91gao视频| 国产在线观看91一区二区三区 | 91成人超碰| 69堂免费视频| 国产一区二区三区国产| 巨胸大乳www视频免费观看| 一区二区三区精密机械公司| 久久精品偷拍视频| 亚洲国产成人91精品| 素人av在线| 热草久综合在线| 亚洲一区二区三区四区电影| 水蜜桃一区二区| 亚洲深爱激情| av影片在线播放| 国产精品沙发午睡系列990531| 国产精品久久久视频| 午夜日韩在线观看| 国产浮力第一页| 日韩中文av在线| 日韩精品一区二区三区| 精品国产一区二区三区麻豆免费观看完整版 | 五码日韩精品一区二区三区视频| 精品国产一区二区三区香蕉沈先生 | 波多野结衣激情视频| 亚洲精品福利视频| 亚洲综合伊人久久大杳蕉| 国产欧美精品一区二区| 国产探花一区| 成人在线免费播放视频| 99久久er热在这里只有精品15| 一区二区三区免费在线观看视频| 国产香蕉久久精品综合网| 日本系列第一页| 欧美成人伊人久久综合网| 国产在线观看av| 91精品久久久久久久久久久久久久 | av在线首页| 国产精品日韩专区| 精品国产91久久久久久浪潮蜜月| 中文字幕一区二区三区5566| 天堂一区二区在线| 熟女俱乐部一区二区| 欧美性猛交xxxx久久久| 天天在线女人的天堂视频| 午夜精品久久久久久99热软件| 欧美福利在线播放| 日本最新一区二区三区视频观看| 91精品观看| 伊人五月天婷婷| 亚洲欧美在线视频观看| 国产乱淫片视频| 九九热这里只有精品6| 超碰成人福利| 自慰无码一区二区三区| 2023国产精品视频| 成人h动漫精品一区二区下载 | 日日干日日操日日射| 国产精品欧美一级免费| 97人妻人人澡人人爽人人精品| 亚洲国产精品va在线观看黑人| 91亚洲精选| 国产在线视频不卡| 欧美激情第8页| 中文字幕精品视频在线| 欧美性xxxx在线播放| 国产香蕉在线| 91精品久久久久久久久| 欧美天堂亚洲电影院在线观看 | 色综合久久久| 强伦女教师2:伦理在线观看| 国产精品99久久久| 91精品国产高潮对白| 亚洲欧洲美洲在线综合| se69色成人网wwwsex| 国产人妻互换一区二区| 成人国产精品免费网站| 五月天婷婷导航| 久久精品国产欧美激情| 黄色成人美女网站| 日本男人操女人| 亚洲激情中文1区| 午夜影院免费视频| 国产精品中文字幕在线观看| 国产精品a级| 小早川怜子久久精品中文字幕| 欧美午夜xxx| av在线女优影院| 国产经品一区二区| 天堂在线亚洲视频| 免费在线黄色片| 中文字幕亚洲欧美日韩高清| 69精品国产久热在线观看| 国产三级日本三级在线播放| 亚洲欧美日韩一区| 日韩精品123| 91在线观看免费高清| 亚洲精品视频啊美女在线直播| 中国极品少妇xxxx| 在线亚洲免费视频| xxx.xxx欧美| 亚洲成人蜜桃| 97久久久精品综合88久久| 国产丝袜在线视频|