午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > html5中監聽canvas內部元素點擊事件的三種方法

html5中監聽canvas內部元素點擊事件的三種方法

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

canvas內部元素不能像DOM元素一樣方便的添加交互事件監聽,因為canvas內不存在“元素”這個概念,他們僅僅是canvas繪制出來的圖形。這對于交互開發來說是一個必經障礙,想要監聽圖形的點擊事件思路很簡單,只要監聽canvas元素本身的點擊事件,再判斷點擊坐標位于哪一個圖形內部,就變相實現了圖形點擊事件。本文將介紹三種方法,判斷坐標點是否位于某個canvas圖形內部。

約定

本文介紹的三種方法適用于識別canvas內形狀不規則而且位置無規律的圖形點擊事件,對于形狀規則或者位置有規律的場景,肯定有更簡便的實現,這里不做討論。

像素法

像素檢測法的思路是,將canvas中的多個圖形(如果有多個的話)分別離屏繪制,并用 getImageData() 方法分別獲取到像素數據保存起來。當canvas元素監聽到點擊事件時,通過點擊坐標可以直接推算出點擊發生在canvas上的第幾個像素,然后遍歷前面保存的圖形數據,看看這個像素的alpha值是不是0,如果是0說明落點不在當前圖形內,否則就說明點到了這個圖形。

根據點擊坐標得到所點擊的像素序號的方法:

像素序號 = (縱坐標-1) * canvas寬度 + 橫坐標

比如在寬度為 5 的畫布上點擊坐標 (3,3) ,根據上述公式得到像素序號是 (3-1) * 5 + 3 = 18 ,如圖所示:

因為canvas導出的圖形數據是將每個像素以 rgba 的順序存成4個數字組成的數組,所以想訪問指定像素的alpha值,只要讀取這個數組的第 pIndex * 4 + 3 個值就可以了,如果這個值不為0,說明該像素可見,也就是點擊到了該圖形。

這個方法是我認為思路最直接、結果最準確、而且對圖形形狀沒有任何要求的方法,但這個方法有一個致命的局限,當圖形需要在畫布上移動時,要頻繁的創建數據緩存才能保證檢測結果準確,受到畫布尺寸和圖形數量的影響, getImageData() 方法的性能會成為嚴重的瓶頸。所以如果canvas圖形是靜態的,這個方法非常適合,否則就不適合用這個方法了。

角度法

角度判斷法的原理很容易理解,如果一個點在多邊形內部,則該點與多邊形所有頂點兩兩構成的夾角,相加應該剛好等于360°。

計算過程可以轉變為以下三個步驟:

1.已知多邊形頂點和已知坐標,將坐標與頂點兩兩組合成三點隊列
2. 已知三點求夾角,可以使用 余玄定理
3.判斷夾角之和是否360°

每一步都很簡單,實現如下:

//計算兩點距離
const getDistence = function (p1, p2) {
  return Math.sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y))
};
//角度法判斷點在多邊形內部
const checkPointInPolyline = (point, polylinePoints) => {
    let totalA = 0;
    const A = point;
    for (let i = 0; i < polylinePoints.length; i++) {
        let B, C;
        if (i === polylinePoints.length - 1) {
            B = {
                x: polylinePoints[i][0],
                y: polylinePoints[i][1]
            };
            C = {
                x: polylinePoints[0][0],
                y: polylinePoints[0][1]
            };
        } else {
            B = {
                x: polylinePoints[i][0],
                y: polylinePoints[i][1]
            };
            C = {
                x: polylinePoints[i + 1][0],
                y: polylinePoints[i + 1][1]
            };
        }
        //計算角度
        const angleA = Math.acos((Math.pow(getDistence(A, C), 2) + Math.pow(getDistence(A, B), 2) - Math.pow(getDistence(B, C), 2)) / (2 * getDistence(A, C) * getDistence(A, B)))
        totalA += angleA
    }
    //判斷角度之和
    return totalA === 2 * Math.PI
}

這個方法有一個局限性,就是圖形必須是 凸多邊形 。如果不是凸多邊形需要先切割成凸多邊形再計算,這就比較復雜了。

類似的思路還有面積法,如果一個點在多邊形內部,那么該點與多邊形所有頂點兩兩構成的三角形,面積相加應該等于多邊形的面積,首先計算多邊形的面積就很麻煩,所以這種方法可以直接pass掉。

射線法

射線法是一個我講不清道理但非常好用的方法,只要判斷點與多邊形一側的交點個數為奇數,則點在多邊形內部。需要注意的是,只要數任何一側的焦點個數就可以,比如左側。這個方法不限制多邊形的類型,凸多邊形、凹多邊形甚至環形都可以。

實現起來也非常簡單:


 

const checkPointInPolyline = (point, polylinePoints) => {
    //射線法
  let leftSide = 0;
  const A = point;
  for (let i = 0; i < polylinePoints.length; i++) {
    let B, C;
    if (i === polylinePoints.length - 1) {
      B = {
        x: polylinePoints[i][0],
        y: polylinePoints[i][1]
      };
      C = {
        x: polylinePoints[0][0],
        y: polylinePoints[0][1]
      };
    } else {
      B = {
        x: polylinePoints[i][0],
        y: polylinePoints[i][1]
      };
      C = {
        x: polylinePoints[i + 1][0],
        y: polylinePoints[i + 1][1]
      };
    }
    //判斷左側相交
    let sortByY = [B.y, C.y].sort((a,b) => a-b)
    if (sortByY[0] < A.y && sortByY[1] > A.y){
      if(B.x<A.x || C.x < A.x){
        leftSide++
      }
    }
  }
  return leftSide % 2 === 1
}

射線法有一種特殊情況,當點在多變形的一條邊上時需要特殊處理。但在工程中我認為也可以不處理,因為如果用戶剛好點在圖形的邊界上,那么程序認為他沒有點到也講的過去。

總結

以上三種方法都可以實現canvas中不規則圖形的點擊檢測。其中,像素法的優勢在于不挑形狀,而且在靜態場景中有一定的性能優勢;角度法應該說只有理論價值,實用性不佳;工程中最實用的當屬射線法,局限性小,實現簡單,多數時候只需要知道射線法就可以了。
 

 

標簽:萍鄉 惠州 紅河 營口 蘇州 咸陽 甘南 文山

巨人網絡通訊聲明:本文標題《html5中監聽canvas內部元素點擊事件的三種方法》,本文關鍵詞  html5,中,監聽,canvas,內部,元素,點擊,事件,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《html5中監聽canvas內部元素點擊事件的三種方法》相關的同類信息!
  • 本頁收集關于html5中監聽canvas內部元素點擊事件的三種方法的相關信息資訊供網民參考!
  • 推薦文章
    日韩美女一区| 日韩av在线免费观看| 香蕉网在线播放| 色久综合一二码| 国产精品成人无码免费| 在线播放日韩欧美| 国产一区二区视频免费观看| 91精品国产91久久久久| 天天射天天干天天| 91久久精品美女高潮| 波多野结衣中文字幕一区| 视频一区免费观看| 日本一区二区成人| 网站在线你懂的| 亚洲品质视频自拍网| 天天综合网入口| 国产伦精品免费视频| 91在线高清观看| www.偷拍.com| 久久国产精品久久国产精品| 日本精品999| 欧美日韩在线观看一区| 精品国产91久久久久久老师| 亚洲区一区二区三| 国产福利视频一区二区| 国产精品影视天天线| 分分操这里只有精品| 欧美日韩亚洲国产一区| 亚洲黄网在线观看| 久久天堂国产精品| 日韩毛片精品高清免费| 亚洲xxxx3d动漫| 韩国一区二区三区美女美女秀| 欧美极品少妇xxxxⅹ高跟鞋| 欧美美女一级片| 日韩精品视频在线播放| 久久精品伊人| 青青草原av在线播放| 欧美精品1区2区3区| 天堂а√在线中文在线新版 | 日韩最新中文字幕| 欧美日韩国产123区| 香蕉污视频在线观看| 麻豆av一区二区| 在线不卡的av| 少妇高潮久久久| 久艹视频在线免费观看| 中文字幕亚洲一区二区三区| 国产一本一道久久香蕉| 久久无码人妻一区二区三区| 欧美激情aaaa| 高跟丝袜欧美一区| 5月丁香婷婷综合| 久久久久久久精| 在线视频1卡二卡三卡| 成人一级片免费看| 国产福利影院在线观看| 牛人盗摄一区二区三区视频| 欧美日产国产成人免费图片| 色综合久久六月婷婷中文字幕| 91国偷自产一区二区三区成为亚洲经典| 国产成人自拍网| 国产伦精品一区二区三区视频网站| 精品无码一区二区三区爱欲| 精品蜜桃一区二区三区| 欧美绝品在线观看成人午夜影视| 国产精品一区一区| 91久久免费视频| 欧美黄网免费在线观看| 97精品视频在线观看自产线路二| 黄色av免费播放| 一本久道久久综合狠狠爱亚洲精品 | 成人午夜免费影院| 久草精品电影| 伊人久久免费视频| 国产精品每日更新| japanese国产在线观看| 热久久精品免费视频| 91青草视频久久| 亚洲国产精品一区二区久| proumb性欧美在线观看| 国产一级一级片| 欧美日韩在线中文| 成人91免费视频| 国产亚洲欧美日韩一区二区| 亚洲精品v日韩精品| 国产日韩欧美一区二区东京热| 日韩女优在线视频| 杨幂一区欧美专区| 久久久久久伊人| 欧美性色黄大片手机版| 91在线观看下载| 六月婷婷综合网| 最近日韩免费视频| av无码一区二区三区| 日韩欧美一区二区三区四区五区 | 极品少妇xxxx偷拍精品少妇| 日韩高清dvd碟片| 成人三级视频在线播放| 国产精品theporn88| 久久天堂av综合合色| 欧美久久一二三四区| 国产精品伦一区| 视频一区二区不卡| 青青草偷拍视频| 国产伦精品一区二区三区88av| 国产日产欧美视频| 精品一区二区三区日本| 久久久久久中文字幕| 亚洲视频在线观看网站| 91精品福利在线一区二区三区| 国产精品素人一区二区| 日韩av网站在线观看| 国精产品一品二品国精品69xx | 老司机亚洲精品| 国产强被迫伦姧在线观看无码| 侵犯稚嫩小箩莉h文系列小说| 色综合天天色综合| 水蜜桃一区二区| 国产一区二区在线观看免费播放| 久久久免费观看视频| 亚洲九九九在线观看| 欧美成人a∨高清免费观看| 色悠悠久久综合| 国产精品久久久久久久浪潮网站| 亚州男人的天堂| 色呦呦免费观看| 国产精品久久久久久免费播放| 国产亚洲精久久久久久无码77777| 国产三级黄色片| 在线免费观看a级片| 男操女免费网站| 亚洲va综合va国产va中文| 日韩黄色片视频| 妞干网视频在线观看| 无码人妻精品一区二区三区99v| 玖玖精品在线视频| 成年人深夜视频| www.-级毛片线天内射视视| 国产精品88久久久久久妇女| 亚洲日本japanese丝袜| 欧美一区二视频在线免费观看| 国产日韩欧美精品| 国产精品免费一区二区三区在线观看| 亚洲在线www| 欧美色图亚洲自拍| 免费看av软件| 久久精品99国产| 黄大色黄女片18第一次| 台湾佬美性中文| 日本一级大毛片a一| 亚洲国产欧美视频| wwwav国产| 国产小视频在线免费观看| 国产三级av片| 美女尤物久久精品| 国产在线视频一区二区| 成人国产精品免费观看| 亚洲精品自拍动漫在线| 午夜精品福利一区二区蜜股av | 国产精品乱人伦一区二区| 精品国产91久久久久久老师| 在线亚洲免费视频| 中文字幕精品久久| 欧美怡春院一区二区三区| 亚洲综合第一页| 佐佐木明希av| 久热在线视频观看| 五月天综合视频| 亚洲综合精品在线| 国产经典欧美精品| 亚洲成av人片| 日韩精品免费在线观看| 青青在线视频一区二区三区| 激情久久av| 天天碰免费视频| 极品蜜桃臀肥臀-x88av| 九九热精品视频在线| 日韩精品免费专区| 中文字幕一区二区三区在线不卡| 欧美三级三级三级爽爽爽| 中文字幕欧美日韩精品| 国产在线观看一区二区三区 | 日韩精品在线视频美女| 26uuu另类亚洲欧美日本老年| 精品一区久久久| 国产3p在线播放| 男人日女人网站| 麻豆成人综合网| 亚洲免费观看高清完整版在线观看 | 国产精品美女在线播放| 亚洲黄色片免费看| 国产成人在线免费观看视频| 日韩精品一区国产麻豆| 日韩高清dvd| 国产毛片毛片毛片毛片| 一本一道久久a久久精品| 日韩欧美国产二区| 丰满人妻老熟妇伦人精品| 图片区小说区区亚洲影院| 久久人人爽人人| 精品99在线观看| 日韩一区二区免费在线电影 | 国产在线国偷精品免费看| 伊人精品久久久久7777| 欧美日韩精品在线| 波多野结衣影院| 欧美一区二区三区日韩| 熟女av一区二区| 亚洲欧美激情视频| 免费人成视频在线播放| 免费成人美女女在线观看| 成人午夜视频精品一区| 欧美体内she精视频| 日韩国产美国| 国产又粗又猛又爽又| 久久99热这里只有精品国产| 色婷婷久久综合中文久久蜜桃av| 欧美mv日韩mv国产网站| 超碰超碰超碰超碰超碰| 国产超碰在线一区| 国产精品视频不卡| 色一情一区二区| 日韩在线视频第一页| 欧美亚洲国产bt| 国产又爽又黄的激情精品视频| www.国产免费| 欧美日高清视频| 99在线视频免费观看| 成人一区二区三区仙踪林| 中日精品一色哟哟| 亚洲一区二区三区小说| 色yeye香蕉凹凸一区二区av| 丝袜老师办公室里做好紧好爽 | v8888av| 亚洲欧洲综合另类在线| 亚洲女人天堂网| 亚洲欧洲在线一区| 午夜影院免费在线观看| 久久琪琪电影院| 国产一区福利在线| 亚洲爆乳无码精品aaa片蜜桃| 亚洲午夜久久久久久久久电影院| 粉嫩av懂色av蜜臀av分享| 欧美日韩国产一级二级| 国产一区二区三区免费视频| 国产激情片在线观看| 亚洲欧美怡红院| 色综合久久av| 国产日韩一级二级三级| 国产美女主播在线播放| 夜夜揉揉日日人人青青一国产精品 | 国产精品一二三区在线| 国内精品视频在线| 国产不卡高清在线观看视频| 欧美日韩二三区| 午夜精品在线看| 日韩欧美中文视频| 欧美日本一区二区三区| 成人免费视频观看视频| 日本熟伦人妇xxxx| 欧美成年人视频网站欧美| 真实的国产乱xxxx在线91| 国产精品久久久久久av下载红粉 | 欧美一级片免费播放| 久久婷婷成人综合色| 日本在线视频www色| 国产精品亚洲视频| 日本成人在线免费视频| 国产精品不卡在线观看| 一区二区精品在线观看| 日韩中文字幕影院| 人体精品一二三区| 中文字幕一区二区三区四区视频 | 精品亚洲夜色av98在线观看| 国产乱叫456| 亚洲免费av高清| 国产成人亚洲综合无码| hitomi一区二区三区精品| 97se视频在线观看| 黄色av免费观看| 91爱视频在线| 在线观看国产小视频| 亚洲天堂男人天堂| 波多野结衣av在线观看| 制服丝袜亚洲精品中文字幕| 亚洲精品第三页| 欧美在线视频日韩| 欧美在线一区视频| 亚洲人成人一区二区在线观看| 精品久久久无码人妻字幂| 一区二区视频在线| 国产精品wwwww| 91精品国产欧美一区二区成人| 亚洲一区二区三区四区av| 欧美日韩中文精品| 日本泡妞xxxx免费视频软件| 中文字幕精品av| 国产一级片久久| 日韩精品中文字幕一区| 国产探花视频在线播放| 欧美r级电影在线观看| 欧美黄色免费在线观看| 久久免费视频在线| 国产又粗又猛又爽又黄的| 国产精品一区二区三| 激情六月婷婷久久| 亚洲天堂资源在线| 国产999精品| 蜜臀久久99精品久久久画质超高清 | 亚洲国产欧美一区二区三区同亚洲| 放荡的美妇在线播放| 欧美日韩成人在线视频| 性生活视频软件| 精选一区二区三区四区五区| 国产精品乱码人人做人人爱| 污视频在线观看免费网站| 日韩成人小视频| 在线免费观看高清视频| 国产在线视频不卡| 国产99久久久久久免费看农村| 国产制服91一区二区三区制服| 一区二区三区小说| 短视频在线观看| 午夜欧美大片免费观看| 麻豆成人av在线| 好男人www社区| 精品乱人伦小说| 国产在成人精品线拍偷自揄拍| 国产精品青青在线观看爽香蕉 | 亚洲天堂2021av| 亚洲在线视频一区二区| 一本久久精品一区二区| 亚洲影院在线播放| 欧美精品亚洲精品| 天天色 色综合| 天堂网免费视频| 日韩高清专区| 亚洲黄网站在线观看| 高清国产在线观看| 国产成人精品午夜| 毛片不卡一区二区| 天天碰免费视频| 久久久国产精品视频| 精品夜夜嗨av一区二区三区| 老司机久久精品| 欧美黑人性猛交| 成人性生交大片| 国产野外作爱视频播放| 精品亚洲一区二区| 久久亚洲欧洲| 成人在线观看a| 俺去亚洲欧洲欧美日韩| 91色婷婷久久久久合中文| 乐播av一区二区三区| 高清免费日韩| 欧美日韩国产高清一区二区| 亚洲图片小说视频| 国产极品尤物在线| 亚洲欧美日韩国产成人| 最近中文在线观看| 免费人成在线观看视频播放| 一个色综合导航| 99久久国产综合精品女不卡| a在线视频播放观看免费观看| 色综合视频二区偷拍在线| 午夜精品视频一区| 精品处破女学生| 亚洲bt欧美bt日本bt| 欧美日韩激情一区| 精品在线播放午夜| youjizz.com国产| 精品一区二区三区日本| 一本久久a久久精品亚洲| 免费三级在线观看| 国产精品免费一区二区三区| 午夜精品一区二区三区免费视频 | 超碰97人人做人人爱少妇| 久久无码av三级| 欧美人禽zoz0强交| 亚洲欧洲国产日韩精品| 亚洲高清色综合| 国产一区福利在线| 放荡的美妇在线播放| 欧美成人免费高清视频| 国产精品夜色7777狼人| 日韩欧美成人激情| 91老师片黄在线观看| 日本一区二区三区免费视频| a级黄色片网站| 欧美一区二区三区免费观看| 亚洲激情六月丁香| 国产一级一片免费播放| 妞干网在线播放| 国产精品视频久久| 一区二区三欧美| 91精品国产综合久久久久久| yourporn久久国产精品| 成人免费视频国产| 欧美三级黄色大片| 亚洲制服中文字幕| 亚洲综合第一| 91精品在线影院| 91高清视频在线免费观看| 国产一区二区av| 日韩一区二区不卡| 91国内精品野花午夜精品| 亚洲资源在线观看| 亚洲欧洲三级电影| 久久久夜色精品亚洲|