婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 基于 HTML5 Canvas實現(xiàn) 的交互式地鐵線路圖

基于 HTML5 Canvas實現(xiàn) 的交互式地鐵線路圖

熱門標簽:威海營銷外呼系統(tǒng)招商 鶴壁手機自動外呼系統(tǒng)怎么安裝 鄭州電銷外呼系統(tǒng)違法嗎 農村住宅地圖標注 漳州人工外呼系統(tǒng)排名 濟南辦理400電話 ai電銷機器人連接網關 中紳電銷智能機器人 跟電銷機器人做同事

前言

前兩天在 echarts 上尋找靈感的時候,看到了很多有關地圖類似的例子,地圖定位等等,但是好像就是沒有地鐵線路圖,就自己花了一些時間搗鼓出來了這個交互式地鐵線路圖的 Demo,地鐵線路上的點是在網上隨便下載了一個,這篇文章記錄自己的一些收獲(畢竟我還是個菜鳥)以及代碼的實現(xiàn),希望能夠幫到一些朋友。當然,如果有什么意見的可以直接跟我說,大家一起交流才會進步。

效果圖

 

http://www.hightopo.com/demo/subway/index.html

地圖稍微內容有點多,要全部展示,字顯得有點小了,但是沒關系,可以按照需求放大縮小,字體和繪制的內容并不會失真,畢竟都是用矢量繪制的~

界面生成

底層的 div 是通過 ht.graph.GraphView 組件生成的,然后就可以利用 HT for Web 提供好的方法,調用 canvas 畫筆隨便繪制就好,先來看看怎么生成底層 div:
 

var dm = new ht.DataModel();//數(shù)據(jù)容器
var gv = new ht.graph.GraphView(dm);//拓撲組件
gv.addToDOM();//將拓撲圖組件添加進body中

addToDOM 函數(shù)聲明如下:

addToDOM = function(){   
    var self = this,
        view = self.getView(),   
        style = view.style;
    document.body.appendChild(view); //將組件底層div添加到body中           
    style.left = '0';//默認組件是絕對定位,所以要設置位置
    style.right = '0';
    style.top = '0';
    style.bottom = '0';      
    window.addEventListener('resize', function () { self.iv(); }, false); //窗口變化事件           
}

現(xiàn)在我就可以在這個 div 上亂涂亂畫了~首先我獲取下載好的地鐵線路圖上的點,我將它們放在 subway.js 中,這個 js 文件全部都是下載的內容,我沒有做其他的改動,主要是將這些點根據(jù)線路來分分配添加到數(shù)組中,比如:

mark_Point13 = [];//線路 數(shù)組內包含線路的起點和終點坐標以及這條線路的名稱
t_Point13 = [];//換成站點 數(shù)組內包含線路中的換乘站點坐標以及換成站點名稱
n_Point13 = [];//小站點 數(shù)組內包含線路中的小站點坐標以及小站點名稱
mark_Point13.push({ name: '十三號線', value: [113.4973,23.1095]}); 
mark_Point13.push({ name: '十三號線', value: [113.4155,23.1080]}); 
t_Point13.push({ name: '魚珠', value: [113.41548,23.10547]}); 
n_Point13.push({ name: '裕豐圍', value: [113.41548,23.10004]}); 

接下來來描繪地鐵線路,我聲明了一個數(shù)組 lineNum,用來裝 js 中所有的地鐵線路的編號,以及一個 color 數(shù)組,用來裝所有的地鐵線的顏色,這些顏色的 index 與 lineNum 中地鐵線編號的 index 是一一對應的:

var lineNum = ['1', '2', '3', '30', '4', '5', '6', '7', '8', '9', '13', '14', '32', '18', '21', '22', '60', '68'];
var color = ['#f1cd44', '#0060a1', '#ed9b4f', '#ed9b4f', '#007e3a', '#cb0447', '#7a1a57', '#18472c', '#008193', '#83c39e', '#8a8c29', '#82352b', '#82352b', '#09a1e0', '#8a8c29', '#82352b', '#b6d300', '#09a1e0'];

接著遍歷 lineNum,將 lineNum 中的元素和顏色傳到 createLine 函數(shù)中,根據(jù)這兩個參數(shù)來繪制地鐵線路以及配色,畢竟 js 文件中的命名方式也是有規(guī)律的,哪一條線路,則命名后面一定會加上對應的數(shù)字,所以我們只需要將字符串與這個編號結合即可獲得 js 中對應的數(shù)組了:

let lineName = 'Line' + num;
let line = window[lineName];
createLine 的定義也非常簡單,我的代碼設置了不少的樣式,所以看起來有點多。創(chuàng)建一個 ht.Polyline 管線,我們可以通過 polyline.addPoint() 函數(shù)向這個變量中添加具體的點,通過 setSegments 可以設置點的連接方式。
function createLine(num, color) {//繪制地圖線
    var polyline = new ht.Polyline();//多邊形 管線
    polyline.setTag(num);//設置節(jié)點tag標簽,作為唯一標示
    if(num === '68') polyline.setToolTip('A P M');//設置提示信息 
    else if(num === '60') polyline.setToolTip('G F'); 
    else polyline.setToolTip('Line' + num);
    if(color) {
        polyline.s({//s 為 setStyle 的簡寫,設置樣式
            'shape.border.width': 0.4,//設置多邊形的邊框寬度
            'shape.border.color': color,//設置多邊形的邊框顏色
            'select.width': 0.2,//設置選中節(jié)點的邊框寬度
            'select.color': color//設置選中節(jié)點的邊框顏色
        });
    }
    let lineName = 'Line' + num;
    let line = window[lineName];
    for(let i = 0; i < line.length; i++) {
        for(let j = 0; j < line[i].coords.length; j++) {
            polyline.addPoint({x: line[i].coords[j][0]*300, y: -line[i].coords[j][1]*300});
            if(num === '68'){//APM線(有兩條,但是點是在同一個數(shù)組中的)
                if(i === 0 && j === 0) {
                    polyline.setSegments([1]);
                }
                else if(i === 1 && j === 0) {
                    polyline.getSegments().push(1);
                }
                else {
                    polyline.getSegments().push(2);
                }
            }    
        }
    }
    polyline.setLayer('0');//將線設置在下層,點設置在上層“top”
    dm.add(polyline);//將管線添加進數(shù)據(jù)容器中儲存,不然這個管線屬于“游離”狀態(tài),是不會顯示在拓撲圖上的
    return polyline;
}

上面代碼中添加地鐵線上的點有分為幾種情況,是因為 js 中設置線的時候 Line68 有一個“跳躍”點的現(xiàn)象,所以我們必須“跳躍”過去,篇幅有限 Line68 數(shù)組具體的聲明自行看 subway.js。

這里說明一點,如果用的是 addPoint 函數(shù),不設置 segments 時,默認將添加進的點用直線連接,segments 的定義如下:

1: moveTo,占用 1 個點信息,代表一個新路徑的起點
 

2: lineTo,占用 1 個點信息,代表從上次最后點連接到該點
 

3: quadraticCurveTo,占用 2 個點信息,第一個點作為曲線控制點,第二個點作為曲線結束點
 

4: bezierCurveTo,占用 3 個點信息,第一和第二個點作為曲線控制點,第三個點作為曲線結束點
 

5: closePath,不占用點信息,代表本次路徑繪制結束,并閉合到路徑的起始點

所以我們要做“跳躍”的行為設置 segments 為 1 即可。

最后繪制這些地鐵線上的點,這個部分 subway.js 中也分離出來了,命名以“mark_Point”、“t_Point”以及“n_Point”開頭,我在前面 js 的展示部分有對這些數(shù)組進行解釋,大家動動中指劃上去看看。

我們在這些點的位置添加 ht.Node 節(jié)點,當節(jié)點一添加進 dm 數(shù)據(jù)容器中時,就會在拓撲圖上顯示,當然,前提是這個拓撲圖組件 gv 設置的數(shù)據(jù)容器是這個 dm。篇幅有限,添加地鐵線上的點的代碼部分我只展示添加“換乘站點”的點:

var tName = 't_Point' + num;
var tP = window[tName];//大站點
if(tP) {//有些線路沒有“換乘站點”
    for(let i = 0; i < tP.length; i++) {
        let node = createNode(tP[i].name, tP[i].value, color[index]);//在獲取的線路上的點的坐標位置添加節(jié)點
        node.s({//設置節(jié)點的樣式style
            'label.scale': 0.05,//文本縮放,可以避免瀏覽器限制的最小字號問題
            'label.font': 'bold 12px arial, sans-serif'//設置文本的font
        });
        node.setSize(0.6, 0.6);//設置節(jié)點大小。由于js中每個點之間的偏移量太小,所以我不得不把節(jié)點設置小一些
        node.setImage('images/旋轉箭頭.json');//設置節(jié)點的圖片
        node.a('alarmColor1', 'rgb(150, 150, 150)');//attr屬性,可以在這里面設置任何的東西,alarmColor1是在上面設置的image的json中綁定的屬性,具體參看 HT for Web 矢量手冊(http://www.hightopo.com/guide/guide/core/vector/ht-vector-guide.html#ref_binding)
        node.a('alarmColor2', 'rgb(150, 150, 150)');//同上
        node.a('tpNode', true);//這個屬性設置只是為了用來區(qū)分“換乘站點”和“小站點”的,后面會用上
    }
}

所有的地鐵線路以及站點都添加完畢。但是!你可能會看不見自己繪制的圖,因為他們太小了,這個時候可以設置 graphView 拓撲組件上的 fitContent 函數(shù),我們順便將拓撲圖上的所有東西不可移動也設置一下:

gv.fitContent(false, 0.00001);//自適應大小,參數(shù)1為是否動畫,參數(shù)2為gv與邊框的padding值
gv.setMovableFunc(function(){
    return false;//設置gv上的節(jié)點不可移動
});

這下你的地鐵線路圖就可以顯示啦~接下來看看交互。

交互

首先是鼠標移動事件,鼠標滑過具體線路時,線路會變粗,懸停一會兒還能看到這條線路的編號;當鼠標移動到“換乘站點”或“小站點”,站點對應的圖標都會變大并且變色,字體也會變大,鼠標移開圖標變回原來的顏色并且字體變小。不同點在于鼠標移動到“換乘站點”時,“換乘站點”會旋轉。

 

鼠標滑動事件,我直接基于 gv 的底層 div 進行的 mousemove 事件,通過 ht 封裝的 getDataAt 函數(shù)傳入事件 event 參數(shù),獲取事件下對應的節(jié)點,然后就可以隨意操作節(jié)點了:

gv.getView().addEventListener('mousemove', function(e) {
    var data = gv.getDataAt(e);//傳入邏輯坐標點或者交互event事件參數(shù),返回當前點下的圖元
    if(name) {
        originNode(name);//不管什么時候都要讓節(jié)點保持原來的大小
    }

    if (data instanceof ht.Polyline) {//判斷事件節(jié)點的類型
        dm.sm().ss(data);//選中“管道”
        name = '';
        clearInterval(interval);
    }
    else if (data instanceof ht.Node) {
        if(data.getTag() !== name && data.a('tpNode')) {//若不是同一個節(jié)點,并且mousemove的事件對象為ht.Node類型,那么設置節(jié)點的旋轉
            interval = setInterval(function() {
                data.setRotation(data.getRotation() - Math.PI/16); //在自身旋轉的基礎上再旋轉
            }, 100);
        }
        if(data.a('npNode')) {//如果鼠標移到“小站點”也要停止動畫
            clearInterval(interval);
        }
        expandNode(data, name);////自定義的放大節(jié)點函數(shù),比較容易,我不粘代碼了,可以去http://hightopo.com/   查看
        dm.sm().ss(data);//設置選中節(jié)點
        name = data.getTag();//作為“上一個節(jié)點”的存儲變量,可以通過這個值來獲取節(jié)點
    }
    else {//其他任何情況則不選中任何內容并且清除“換乘站點”上的動畫
        dm.sm().ss(null);
        name = '';
        clearInterval(interval);
    }
});

鼠標懸停在地鐵線路上時顯示“具體線路信息”,我是通過設置 tooltip 來完成的(注意:要打開 gv 的 tooltip 開關):

gv.enableToolTip();//打開 tooltip 的開關
if(num === '68') polyline.setToolTip('A P M');//設置提示信息 
else if(num === '60') polyline.setToolTip('G F'); 
else polyline.setToolTip('Line' + num);

然后我利用右下角的 form 表單,單擊表單上的具體線路,或者雙擊拓撲圖上任意一個“站點”或者線路,則拓撲圖會自適應到對應的部分,將被雙擊的部分展現(xiàn)到拓撲圖的中央。

 

form 表單的聲明部分我好像還沒有解釋。。。就是通過 new 一個 ht.widget.FomePane 類創(chuàng)建一個 form 表單組件,通過 form.getView() 獲取表單組件的底層 div,將這個 div 擺放在 body 右下角,然后通過 addRow 函數(shù)向 form 表單中添加一行的表單項,可以在這行中添加任意多個項,通過 addRow 函數(shù)的第二個參數(shù)(一個數(shù)組),對添加進的表單項進行寬度的設置,通過第三個參數(shù)設置這行的高度:

function createForm() {//創(chuàng)建右下角的form表單
    var form = new ht.widget.FormPane();
    form.setWidth(200);//設置表單寬度
    form.setHeight(416);//設置表單高度
    let view = form.getView();
    document.body.appendChild(view);//將表單添加進body中
    view.style.zIndex = 1000;
    view.style.bottom = '10px';//ht組件幾乎都設置絕對路徑
    view.style.right = '10px';
    view.style.background = 'rgba(211, 211, 211, 0.8)';
    names.forEach(function(nameString) {
        form.addRow([//向表單中添加行
            {//這一行中的第一個表單項
                button: {//向表單中添加button按鈕
                    icon: 'images/Line'+nameString.value+'.json',//設置按鈕的圖標
                    background: '',//設置按鈕的背景
                    borderColor: '',//設置按鈕的邊框顏色
                    clickable: false//設置按鈕不可點擊
                }
            },
            {//第二個表單項
                button: {
                    label: nameString.name,
                    labelFont: 'bold 14px arial, sans-serif',
                    labelColor: '#fff',
                    background: '',
                    borderColor: '',
                    onClicked: function() {//按鈕點擊回調事件
                        gv.sm().ss(dm.getDataByTag(nameString.value));//設置選中按下的按鈕對應的線路
                        gv.fitData(gv.sm().ld(), true, 5);//將選中的地鐵線路顯示在拓撲圖的中央
                    }
                }
            }
        ], [0.1, 0.2], 23);//第二個參數(shù)是設置第一參數(shù)中的數(shù)組的寬度,小于1是比例,大于1是實際寬度。第三個參數(shù)是該行的高度
    });
}

單擊“站點”顯示紅色標注,雙擊節(jié)點自適應放置到拓撲圖中央以及雙擊空白處將紅色標注隱藏的內容都是通過對拓撲組件 gv 的事件監(jiān)聽來控制的,非常清晰易懂,代碼如下:

var node = createRedLight();//創(chuàng)建一個新的節(jié)點,顯示為“紅燈”的樣式
gv.mi(function(e) {//ht 中拓撲組件中的事件監(jiān)聽
    if(e.kind === 'clickData' && (e.data.a('tpNode') || e.data.a('npNode'))) {//e.kind獲取當前事件類型,e.data獲取當前事件下的節(jié)點
        node.s('2d.visible', true);//設置node節(jié)點可見
        node.setPosition(e.data.getPosition().x, e.data.getPosition().y);//設置node的坐標為當前事件下節(jié)點的位置
    }
    else if(e.kind === 'doubleClickData') {//雙擊節(jié)點
        gv.fitData(e.data, false, 10);//將事件下的節(jié)點自適應到拓撲圖的中央,參數(shù)1為自適應的節(jié)點,參數(shù)2為是否動畫,參數(shù)3為gv與邊框的padding
    }
    else if(e.kind === 'doubleClickBackground') {//雙擊空白處
        node.s('2d.visible', false);//設置node節(jié)點不可見 查看 HT for Web 樣式手冊(http://www.hightopo.com/guide/guide/core/theme/ht-theme-guide.html#ref_style)
    }
});

注意 s(style) 和 a(attr) 定義是這樣的,s 是 ht 預定義的一些樣式屬性,而 a 是我們用戶來自定義的屬性,一般是通過調用字符串來調用結果的,這個字符串對應的可以是常量也可以是函數(shù),還是很靈活的。

最后還做了一個小小的部分,選中“站點”,則該“站點”的上方會顯示一個紅色的會“呼吸”的用來注明當前選中的“站點”。

 

“呼吸”的部分是利用 ht 的 setAnimation 函數(shù)來完成的,在用這個函數(shù)之前要先打開數(shù)據(jù)容器的動畫開關,然后設置動畫:

dm.enableAnimation();//打開數(shù)據(jù)容器的動畫開關
function createRedLight() {
    var node = new ht.Node();
    node.setImage('images/紅燈.json');//設置節(jié)點的圖片
    node.setSize(1, 1);//設置節(jié)點的大小
    node.setLayer('firstTop');//設置節(jié)點顯示在gv的最上層
    node.s('2d.visible', false);//節(jié)點不可見
    node.s('select.width', 0);//節(jié)點選中時的邊框為0,不可見
    node.s('2d.selectable', false);//設置這個屬性,則節(jié)點不可選中

    node.setAnimation({//設置動畫 具體參見 HT for Web 動畫手冊(http://www.hightopo.com/guide/guide/plugin/animation/ht-animation-guide.html)
        expandWidth: {
            property: "width",//設置這個屬性,并且未設置 accessType,則默認通過 setWidth/getWidth 來設置和獲取屬性。這里的 width 和下面的 height 都是通過前面設置的 size 得到的
            from: 0.5, //動畫開始時的屬性值
            to: 1,//動畫結束時的屬性值
            next: "collapseWidth"//字符串類型,指定當前動畫完成之后,要執(zhí)行的下個動畫,可將多個動畫融合
        },
        collapseWidth: {
            property: "width",
            from: 1, 
            to: 0.5,
            next: "expandWidth"
        },
        expandHeight: {
            property: "height",
            from: 0.5, 
            to: 1,
            next: "collapseHeight"
        },
        collapseHeight: {
            property: "height",
            from: 1, 
            to: 0.5,
            next: "expandHeight"
        },
        start: ["expandWidth", "expandHeight"]//數(shù)組,用于指定要啟動的一個或多個動畫
    });
    dm.add(node);
    return node;
}

全部代碼結束!

總結

這個 Demo 花了我兩天時間完成,總覺得有點不甘心啊,但是有時候思維又轉不過彎來,花費了不少的時間,但是總的來說收獲還是很多的,我以前一直以為只要通過 getPoints().push 來向多邊形中添加點就可以了,求助了大神之后,發(fā)現(xiàn)原來這個方法不僅繞彎路而且還會出現(xiàn)各種各樣的問題,比如 getPoints 之前,一定要在多邊形中已經有 points 才可以,但是在很多情況下,初始化的 points 并不好設置,而且會造成代碼很繁瑣,直接通過 addPoint 方法,直接將點添加進多邊形變量中,并且還會默認將點通過直線的方式連接,也不用設置 segments,多可愛的一個函數(shù)。

還有就是因為 ht 默認縮放大小是 20,而我這個 Demo 的間距又很小,導致縮放到最大地鐵線路圖顯示也很小,所以我在 htconfig 中更改了 ht 的默認 zoomMax 屬性,記住,更改這個值一定要在所有的 ht 調用之前,因為在 htconfig 中設置的值在后面定義都是不可更改的。

以上所述是小編給大家介紹的基于 HTML5 Canvas實現(xiàn) 的交互式地鐵線路圖,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

標簽:紅河 蘇州 甘南 萍鄉(xiāng) 咸陽 惠州 營口 文山

巨人網絡通訊聲明:本文標題《基于 HTML5 Canvas實現(xiàn) 的交互式地鐵線路圖》,本文關鍵詞  基于,HTML5,Canvas,實現(xiàn),的,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《基于 HTML5 Canvas實現(xiàn) 的交互式地鐵線路圖》相關的同類信息!
  • 本頁收集關于基于 HTML5 Canvas實現(xiàn) 的交互式地鐵線路圖的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久亚洲欧美国产精品乐播 | 欧美在线免费观看亚洲| 久久aⅴ国产欧美74aaa| 一区二区三区四区蜜桃| 国产精品视频yy9299一区| 欧美乱熟臀69xxxxxx| 在线一区二区三区做爰视频网站| 成人精品视频一区二区三区| 日韩va亚洲va欧美va久久| 成人黄色在线视频| 欧美性生活影院| 亚洲精品中文字幕乱码三区| 国产精品996| 国产婷婷色一区二区三区四区| 亚洲图片欧美视频| 欧美三级中文字| 爽好久久久欧美精品| 欧美卡1卡2卡| 激情综合网av| 欧美日韩一本到| 麻豆91精品91久久久的内涵| 亚洲动漫第一页| 丰满岳乱妇一区二区三区| 在线观看成人免费视频| 精品国产91乱码一区二区三区| 亚洲综合在线五月| 色久优优欧美色久优优| 久久这里都是精品| 男女男精品网站| 欧美性xxxxxx少妇| 亚洲精品成a人| 91小视频在线| 亚洲欧美日本在线| 99久久精品免费观看| 国产亲近乱来精品视频| 国产成人综合在线| 亚洲国产精品99久久久久久久久| 美女精品一区二区| 久久女同性恋中文字幕| 麻豆国产精品一区二区三区| 日韩一级片在线播放| 日韩影院免费视频| 欧美电视剧在线看免费| 麻豆免费看一区二区三区| 欧美一区2区视频在线观看| 日韩一区精品视频| 欧美日韩一区二区不卡| 亚洲国产日产av| 6080国产精品一区二区| 五月婷婷综合激情| 国产精品午夜久久| 成人教育av在线| 日韩av一级片| 成人午夜免费电影| 久久久久久久综合狠狠综合| 日韩一区二区精品葵司在线| 欧美色老头old∨ideo| 欧美在线免费观看亚洲| 欧美午夜视频网站| 色偷偷成人一区二区三区91| 99精品1区2区| 欧美一级久久久| 欧美色图一区二区三区| 欧美日韩在线直播| 日韩欧美国产午夜精品| 久久久久久麻豆| 亚洲桃色在线一区| 日日夜夜免费精品| 青青草国产精品97视觉盛宴| 国内一区二区在线| 色天天综合色天天久久| 欧美精品免费视频| 久久奇米777| 亚洲高清在线视频| 国产精品影视网| 北岛玲一区二区三区四区| 欧美日韩成人一区二区| 国产精品视频在线看| 免费在线观看一区二区三区| 国产一区二区导航在线播放| 91首页免费视频| 精品国产伦一区二区三区免费 | 欧美一卡二卡三卡四卡| www国产精品av| 婷婷国产v国产偷v亚洲高清| 成人av一区二区三区| 精品久久久三级丝袜| 三级久久三级久久| 在线看日韩精品电影| 国产欧美日韩精品在线| 日韩av不卡在线观看| 欧美视频精品在线观看| 91小视频免费观看| 精品三级在线看| 亚洲毛片av在线| 久久精品72免费观看| 成人h动漫精品一区二| 在线观看成人小视频| 3atv在线一区二区三区| 26uuu国产日韩综合| 亚洲精品视频免费观看| 国模无码大尺度一区二区三区| 99久久久精品| 国产精品嫩草影院com| 麻豆成人91精品二区三区| 99久久精品免费看国产免费软件| 日韩欧美激情一区| 美女在线一区二区| 欧美一区二区三区四区在线观看 | 欧美一级生活片| 亚洲欧洲性图库| 国产乱码精品一区二区三区av| 欧美一区二区三区不卡| 久久99热这里只有精品| 欧美日韩国产123区| 亚洲一区二区五区| 制服丝袜日韩国产| 亚洲成人动漫在线免费观看| 色诱视频网站一区| 天堂久久久久va久久久久| 欧美日韩美少妇| 久久精品久久综合| 欧美电影免费观看高清完整版在线 | 亚洲国产精品一区二区www在线| 欧美日韩精品专区| 精久久久久久久久久久| 亚洲欧美日本韩国| 欧美成人三级电影在线| 91免费看`日韩一区二区| 日韩激情中文字幕| 一区二区三区在线视频免费| 亚洲精品在线免费播放| 欧美三级三级三级| 在线观看区一区二| 欧美探花视频资源| 樱花草国产18久久久久| 欧美伦理影视网| 午夜欧美视频在线观看| 日韩一区国产二区欧美三区| 国产伦精品一区二区三区免费| 69堂国产成人免费视频| 另类小说视频一区二区| 一区二区三区鲁丝不卡| 精品国产三级电影在线观看| 精品视频在线免费看| 欧美电影一区二区三区| 色综合久久久久网| 粉嫩13p一区二区三区| 亚洲成人高清在线| 亚洲国产一区二区视频| 中文字幕五月欧美| 国产精品美女www爽爽爽| 欧美va在线播放| 日韩午夜在线观看视频| 欧美军同video69gay| 在线免费观看视频一区| 91成人在线免费观看| 91麻豆蜜桃一区二区三区| 91在线精品一区二区| 成人av综合一区| 高清视频一区二区| 成人爱爱电影网址| 91老师片黄在线观看| 91视视频在线观看入口直接观看www | 777xxx欧美| 欧美一区二区大片| 日韩视频免费直播| 久久精品网站免费观看| 亚洲手机成人高清视频| 一个色妞综合视频在线观看| 免费人成网站在线观看欧美高清| 久久精品国产精品青草| 国产成人免费av在线| 91久久精品日日躁夜夜躁欧美| 欧美日韩精品一区二区在线播放| 日韩精品自拍偷拍| 亚洲另类色综合网站| 日韩国产欧美在线播放| 国产乱对白刺激视频不卡| 色综合色综合色综合| 精品久久久久99| 日本一道高清亚洲日美韩| 国产传媒欧美日韩成人| 911精品国产一区二区在线| 欧美激情资源网| 蜜桃视频在线观看一区二区| 91最新地址在线播放| 中文字幕精品在线不卡| 美女视频一区在线观看| 欧美最猛黑人xxxxx猛交| 26uuu国产一区二区三区| 亚洲成人资源网| 欧美自拍丝袜亚洲| 一区免费观看视频| 国产一区二区成人久久免费影院| 欧美日韩在线精品一区二区三区激情 | 中文字幕av不卡| 国产精品一区免费在线观看| 在线电影一区二区三区| 一区二区三区中文免费|