亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > HTML5 > 正文

Canvas 文字碰撞檢測并抽稀的方法

2024-09-05 07:19:34
字體:
來源:轉載
供稿:網友

需求背景

一般在做地圖相關的需求是才會用到文字抽稀,我也是在為公司的地圖引擎實現一個功能時才實現了該方法,在這里將其簡化了,就在普通的 Canvas 上進行操作,并沒有引入地圖概念

效果

碰撞檢測

計算文字在 canvas 中所占據的范圍

// 計算文字所需的寬度var p = {  x: 10,  y: 10,  name: "測試文字"};var measure = ctx.measureText(p.name);// 求出文字在 canvas 畫板中占據的最大 y 坐標var maxX = measure.width + p.x;// 求出文字在 canvas 畫板中占據的最大 y 坐標// canvas 只能計算文字的寬度,并不能計算出文字的高度。所以就利用文字的寬度除以文字個數計算個大概var maxY = measure.width / p.name.length + p.y;var min = { x: p.x, y: p.y };var max = { x: maxX, y: maxY };// bounds 為該文字在 canvas 中所占據的范圍。// 在取點位坐標作為最小范圍時,textAlign、textBaseline 按照以下方式設置會比較準確。// 如設置在不同的位置展示,范圍最大、最小點也需進行調整// ctx.textAlign = "left";// ctx.textBaseline = "top";var bounds = new Bounds(min, max);

Bounds 范圍對象

/** * 定義范圍對象 */function Bounds(min, max) {  this.min = min;  this.max = max;}/** * 判斷范圍是否與另外一個范圍有交集 */Bounds.prototype.intersects = function(bounds) {  var min = this.min,    max = this.max,    min2 = bounds.min,    max2 = bounds.max,    xIntersects = max2.x >= min.x && min2.x <= max.x,    yIntersects = max2.y >= min.y && min2.y <= max.y;  return xIntersects && yIntersects;};

檢測

// 每次繪制之前先與已繪制的文字進行范圍交叉檢測// 如發現有交叉,則放棄繪制當前文字,否則繪制并存入已繪制文字列表for (var index in _textBounds) {  // 循環所有已繪制的文字范圍,檢測是否和當前文字范圍有交集,如果有交集說明會碰撞,則跳過該文字  var pointBounds = _textBounds[index];  if (pointBounds.intersects(bounds)) {    return;  }}_textBounds.push(bounds);ctx.fillStyle = "red";ctx.textAlign = "left";ctx.textBaseline = "top";ctx.fillText(p.name, p.x, p.y);

示例、代碼地址

示例地址:示例

具體可查看完整代碼:Github 地址

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品国亚洲| 亚洲高清免费观看高清完整版| 日本一区二区三区四区视频| 欧美精品在线免费播放| 久久精品国亚洲| 亚洲人成免费电影| 欧美有码在线观看视频| 555www成人网| 日韩精品免费一线在线观看| 亚洲电影免费观看高清完整版| 姬川优奈aav一区二区| 欧美亚洲国产另类| 国产午夜精品一区二区三区| 久久久久国色av免费观看性色| 亚洲精品国产综合区久久久久久久| 欧美成人四级hd版| 亚洲美女性视频| 国产91精品久久久| 日韩欧美一区二区三区久久| 精品久久久久久久久中文字幕| 成人97在线观看视频| 中文字幕精品一区二区精品| 亚洲开心激情网| 久久在线免费视频| 91av中文字幕| 欧美日韩视频免费播放| 国产免费一区二区三区香蕉精| 日韩hd视频在线观看| 国产精品吹潮在线观看| 欧美香蕉大胸在线视频观看| 777国产偷窥盗摄精品视频| 国产午夜精品全部视频在线播放| 欧美一级视频一区二区| 永久免费精品影视网站| 成人高清视频观看www| 欧美激情久久久久久| 亚洲欧洲日本专区| 日韩av电影院| 久久久久久噜噜噜久久久精品| 欧美电影免费观看网站| 亚洲精品国产免费| 福利一区福利二区微拍刺激| 91久久精品日日躁夜夜躁国产| 日韩在线观看视频免费| 97久久精品人人澡人人爽缅北| 精品久久久久久久久久国产| 国产成人一区二区三区电影| 成人免费视频97| 91中文在线视频| 日韩av电影在线播放| 欧美电影免费观看高清| 亚洲少妇激情视频| 97超级碰在线看视频免费在线看| 国产精品美女在线| 国产精品成人一区二区| 久久精品国产清自在天天线| 国产日韩在线播放| 欧美激情久久久| 久久电影一区二区| 亚洲精品动漫100p| 国产丝袜一区二区| 亚洲精品福利免费在线观看| 中文.日本.精品| 国产精品成人v| 91视频免费网站| 亚洲美女性生活视频| 国产日韩精品综合网站| 欧美另类老肥妇| 国产成人精品久久久| 国产精品亚洲аv天堂网| 亚洲欧美中文日韩在线| 伊人久久五月天| 久久久久久噜噜噜久久久精品| www欧美日韩| 久久91亚洲精品中文字幕奶水| 91精品国产综合久久香蕉的用户体验| 91黑丝在线观看| 久久久免费在线观看| 国产精品wwww| 国产精品免费视频xxxx| 国产欧美va欧美va香蕉在| www.xxxx精品| 欧美性猛交99久久久久99按摩| 欧美多人乱p欧美4p久久| 亚洲免费福利视频| 亚洲sss综合天堂久久| 91人人爽人人爽人人精88v| 欧美精品在线免费| 亚洲欧美激情精品一区二区| 欧美激情亚洲视频| 欧美日韩国产中文精品字幕自在自线| 欧美怡红院视频一区二区三区| 色综合亚洲精品激情狠狠| 国产精品入口夜色视频大尺度| 日韩av123| 国产精品欧美日韩一区二区| 日本视频久久久| 97在线观看免费高清| 日韩激情av在线免费观看| 日韩精品视频在线| 欧美剧在线观看| 精品久久久久久久久久久久久久| 国产精品视频白浆免费视频| 久久久久免费精品国产| 日本成人激情视频| 国产精品视频精品| 亚洲视频在线观看| 最新国产精品亚洲| 正在播放欧美视频| 66m—66摸成人免费视频| 北条麻妃99精品青青久久| 亚洲2020天天堂在线观看| 亚洲国产精品系列| 日本亚洲欧洲色α| 91久久嫩草影院一区二区| 96国产粉嫩美女| 久久亚洲欧美日韩精品专区| 亚洲一区二区国产| 亚洲的天堂在线中文字幕| 欧美性猛交99久久久久99按摩| 中文字幕久久久av一区| 国产91久久婷婷一区二区| 第一福利永久视频精品| 狠狠综合久久av一区二区小说| 国产97在线|亚洲| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲va久久久噜噜噜久久天堂| 91精品中文在线| 国产精品亚洲аv天堂网| 国产精品免费看久久久香蕉| 久久国产精品久久久| 亚洲丝袜在线视频| 91精品久久久久久久久久久| 欧美日韩一区免费| 久久精品久久久久电影| 欧美疯狂做受xxxx高潮| 久久中文字幕国产| 亚洲精品在线不卡| 欧美日韩亚洲一区二区| 国产精品欧美久久久| 亚洲аv电影天堂网| 欧美日韩亚洲精品一区二区三区| 成人网在线免费观看| 成人性生交xxxxx网站| 国产视频亚洲视频| 欧美风情在线观看| 91免费视频国产| 国产一区二区三区18| 日韩精品小视频| 最近2019中文字幕在线高清| 91亚洲精华国产精华| www日韩欧美| 日本精品一区二区三区在线播放视频| 成人国产亚洲精品a区天堂华泰| 免费91在线视频| 性色av一区二区三区红粉影视| 日韩av中文字幕在线| 国产视频自拍一区| 国产精品国产自产拍高清av水多| 日本中文字幕成人| 不卡av在线播放| 久久免费福利视频| 久久精品国产久精国产一老狼| 91免费看国产|