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

首頁 > 編程 > HTML > 正文

html2canvas實現dashed虛線邊框的示例

2024-08-26 00:20:36
字體:
來源:轉載
供稿:網友

html2canvas是一個將html元素生成canvas的庫,繪制的canvas大部分樣式和CSS一致。比如截止1.0.0-alpha.12,虛線邊框依然繪制為實線,border-collapse依然有問題。

這里根據github issues里的一個思路,模擬實現了dashed邊框效果。

適用情況:單獨邊框較多,即不是完整邊框,同時不考慮border-radius

1、首先,在html2canvas繪制前,找出需要繪制canvas的元素中的所有虛線邊框的 方向和位置

findDashedBorders = (page) => {        const tds = page.querySelectorAll("td");        const borders = [];        tds.forEach(td => {            const computedStyle = window.getComputedStyle(td);            const borderStyle = computedStyle.borderStyle ? computedStyle.borderStyle.split(' ') : [];            const dashedIndex = findAll(borderStyle, 'dashed');            if (dashedIndex.length) {                const rect = td.getBoundingClientRect();                dashedIndex.map(index => {                    const border = {                        rect,                        border: dashedBorder[index]                    }                    borders.push(border);                    td.style[`border${dashedBorder[index]}Color`] = 'transparent';                });            }        });        return borders;    }

page是需要繪制canvas的元素,我這里有dashed邊框的都是td元素,所以查找所有td元素,使用getComputedStyle()方法查找它的borderStyle,如果它有dashed邊框,那么這個屬性的值的形式為"dashed dashed none none",所以根據findAll()這個自定義方法找到所有的dashed的方向(比如"dashed dashed none none"將返回[0, 1]),其中dashedBorder數組如下:

const dashedBorder = ["Top", "Right", "Bottom", "Left"];

找到方位后同時獲取它的位置,將方向和位置信息存入borders數組,同時將這條邊框設為透明,使html2canvas不繪制這條框,我們之后會單獨處理。 (注意:這個頁面的虛線邊框都會透明掉,這里并沒有考慮繪制完成后將透明邊框變回原來的顏色)

2、使用html2canvas得到繪制后的canvas

pages.forEach((page, idx) => {    const borders = this.findDashedBorders(page);    const parentRect = page.getBoundingClientRect();    html2canvas(page, {scale: 2, logging: false, useCORS: true}).then((canvas) => {       this.drawDashedBorder(canvas, borders, parentRect);       ......    })})

pages是需要繪制canvas的所有元素,我們在獲取每個page的虛線邊框時,同時獲取這個page的位置,以便我們繪制dashed邊框時得到邊框相對于這個頁面的位置。待html2canvas繪制canvas后,我們通過drawDashedBorder()方法進一步繪制出dashed邊框,下面實現這個方法。

3、drawDashedBorder()在得到canvas后進一步繪制虛線。

drawDashedBorder = (canvas, borders, parentRect) => {        var ctx = canvas.getContext("2d");        ctx.setLineDash([6, 3]);        ctx.strokeStyle = '#3089c7';        ctx.lineWidth = 1;        ctx.globalAlpha = 1;        borders.forEach(border => {            var left = (border.rect.left + 0.5 - parentRect.left)*2;            var right = (border.rect.right - 0.5 - parentRect.left)*2;            var top = (border.rect.top + 0.5 - parentRect.top)*2;            var bottom = (border.rect.bottom - 0.5 - parentRect.top)*2;            switch (border.border) {                case 'Top':                    ctx.beginPath();                    ctx.moveTo(left, top);                    ctx.lineTo(right, top);                    ctx.stroke();                    break;                case 'Right':                    ctx.beginPath();                    ctx.moveTo(right, top);                    ctx.lineTo(right, bottom);                    ctx.stroke();                    break;                case 'Bottom':                    ctx.beginPath();                    ctx.moveTo(left, bottom);                    ctx.lineTo(right, bottom);                    ctx.stroke();                    break;                case 'Left':                    ctx.beginPath();                    ctx.moveTo(left, top);                    ctx.lineTo(left, bottom);                    ctx.stroke();                    break;                default:                    break;            }        })    }

意思就是根據borders里dashed邊框的方向和位置信息,在canvas里獲取2d上下文后使用setLineDash方法把虛線繪制出來。位置都*2是因為我們之前canvas使用了2倍大小。

4、這個方法目前只在chrome測試可用,firefox無效,因為firefox下getComputedStyle返回的信息和chrome不同。

由于對canvas理解不深無法pr,只能期待html2canvas的官方實現了。

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


注:相關教程知識閱讀請移步到HTML教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91影院在线免费观看视频| 青青草国产精品一区二区| 亚洲成人激情在线| 青草青草久热精品视频在线网站| 国产91免费观看| 午夜精品久久久久久久久久久久久| 久久91亚洲精品中文字幕| 久久久成人的性感天堂| 国产在线不卡精品| 国产综合在线观看视频| 国产精品自产拍高潮在线观看| 久久影院在线观看| 亚洲自拍偷拍第一页| 91精品国产一区| 日本成人激情视频| 久久精品视频播放| 欧美国产在线视频| 92版电视剧仙鹤神针在线观看| 欧美激情影音先锋| 在线视频欧美日韩精品| 亚洲影院高清在线| 97**国产露脸精品国产| 91国产美女视频| 国产一区二区日韩精品欧美精品| 亚洲视频电影图片偷拍一区| 国产精品毛片a∨一区二区三区|国| 久久久国产视频| 亚洲精品在线91| 久久久久国产精品免费| 69**夜色精品国产69乱| 亚洲欧美日韩网| 午夜剧场成人观在线视频免费观看| 亚洲毛茸茸少妇高潮呻吟| 欧美人成在线视频| 色偷偷偷亚洲综合网另类| 精品国产成人av| 久久人人爽人人爽人人片av高清| 亚洲视频综合网| 国产一区二区色| 欧美午夜久久久| 国产97免费视| 欧美裸体视频网站| 亚洲人成在线观| 精品福利免费观看| 国产欧美va欧美va香蕉在| 欧美视频专区一二在线观看| 福利一区福利二区微拍刺激| 亚洲精品久久7777777| 91成人在线视频| 欧美精品国产精品日韩精品| 欧美成人精品三级在线观看| 久久天堂电影网| 色av吧综合网| 久久久精品久久| 91理论片午午论夜理片久久| 亚洲欧美激情另类校园| 国产九九精品视频| 欧美午夜丰满在线18影院| 国产盗摄xxxx视频xxx69| 国产精品揄拍500视频| 欧美另类69精品久久久久9999| 日韩电影免费观看在线| 久久精品国产欧美激情| 日韩欧美高清视频| 亚洲人精选亚洲人成在线| 亚洲尤物视频网| 欧美激情乱人伦一区| 日韩欧美国产成人| 一区二区三区国产在线观看| 成人h片在线播放免费网站| 久久久久国产精品www| 欧美乱大交做爰xxxⅹ性3| 美女性感视频久久久| 国产精品小说在线| 国产精品av在线| 成人午夜一级二级三级| 欧洲日本亚洲国产区| 狠狠操狠狠色综合网| 国产极品精品在线观看| 成人xxxx视频| www高清在线视频日韩欧美| 日本精品久久久久久久| 久久久久免费视频| 久久91亚洲人成电影网站| 久久久精品视频成人| 最近的2019中文字幕免费一页| 成人乱人伦精品视频在线观看| 欧美日韩成人在线播放| 亚洲欧美资源在线| 亚洲四色影视在线观看| 午夜精品久久久久久久白皮肤| 亚洲人成电影网| xxxxx成人.com| 精品视频在线导航| 国产精品福利在线观看| 国产精品视频久久久| 97视频在线观看免费高清完整版在线观看| 亚洲自拍在线观看| 色婷婷久久一区二区| 国产成人精品优优av| 国外视频精品毛片| 亚洲国产小视频| 国产国语刺激对白av不卡| 欧美成人午夜激情在线| 国内精品一区二区三区| 亚洲精品日韩激情在线电影| 久久久久久久久久亚洲| 亚洲第一精品福利| 秋霞成人午夜鲁丝一区二区三区| 国语自产偷拍精品视频偷| 欧美日韩一区二区免费在线观看| 亚洲天堂男人天堂| 国产精品久久电影观看| 96精品久久久久中文字幕| 日韩在线一区二区三区免费视频| 久久国产加勒比精品无码| 中文字幕在线看视频国产欧美在线看完整| 久久久国产一区二区三区| 欧美黄网免费在线观看| 国产精品久久久久77777| 欧美影院久久久| 久久精品国产一区| 成人a在线视频| 日韩av免费在线| 亚洲高清一二三区| 亚洲国产成人在线视频| 国产+人+亚洲| 国产成人亚洲精品| 日韩电影在线观看永久视频免费网站| 欧美激情第99页| 欧美大片大片在线播放| 欧美精品成人91久久久久久久| 国产综合久久久久久| 日韩成人在线视频网站| www.久久久久久.com| 国模视频一区二区| 777午夜精品福利在线观看| 国产精品一区久久| 久久精品国产2020观看福利| 色系列之999| 最近2019中文字幕大全第二页| 欧美激情综合亚洲一二区| 亚洲男人av在线| 亚洲欧洲偷拍精品| 97成人精品视频在线观看| 丝袜美腿精品国产二区| 97久久精品国产| 国产精品一区二区三区久久久| 亚洲国产成人精品久久| 亚洲精品网站在线播放gif| 一道本无吗dⅴd在线播放一区| 日产日韩在线亚洲欧美| 亚洲欧美日韩综合| 亚洲视频在线播放| 亚洲aa中文字幕| 国产精品xxx视频| 色av中文字幕一区| 欧美有码在线观看视频| 欧美男插女视频| 欧美精品久久久久久久免费观看| 视频在线观看99| 成人激情视频小说免费下载| 成人www视频在线观看| 欧美影院在线播放|