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

首頁 > 編程 > HTML > 正文

html2canvas實現dashed虛線邊框的示例

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

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的官方實現了。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人小视频在线观看| 国产精品色婷婷视频| 亚洲精品aⅴ中文字幕乱码| 一区二区成人av| 日韩精品日韩在线观看| 91九色国产视频| 久久久精品国产亚洲| 91精品在线观| 日韩欧美极品在线观看| 国产成人精品免费久久久久| 一本色道久久88亚洲综合88| 亚洲女在线观看| 欧美高清视频在线| 性欧美长视频免费观看不卡| 亚洲一区二区三区香蕉| 中文字幕无线精品亚洲乱码一区| 欧美极品美女电影一区| 午夜精品一区二区三区在线播放| 97视频在线观看成人| 美女性感视频久久久| 91社影院在线观看| 色一情一乱一区二区| 伊人久久五月天| 亚洲国产精品成人精品| 欧美韩日一区二区| 国产成人欧美在线观看| 国产成人精品999| 国产精品r级在线| 日韩av在线看| 久久资源免费视频| 欧美肥老太性生活视频| 一区二区三区四区精品| 亚洲香蕉成人av网站在线观看| 欧美国产日韩中文字幕在线| 国产女人精品视频| 欧美性猛交99久久久久99按摩| 92裸体在线视频网站| 久久影院在线观看| 亚洲护士老师的毛茸茸最新章节| 国产精品成人品| 国产精品777| 亚洲人成网站免费播放| 久久九九精品99国产精品| 色综合色综合久久综合频道88| 国产成人午夜视频网址| 精品久久国产精品| 色777狠狠综合秋免鲁丝| 成人免费视频a| 日韩在线视频线视频免费网站| 精品中文字幕在线| 国产一区二区三区三区在线观看| 亚洲精品美女久久久久| 4438全国亚洲精品在线观看视频| 国产一区二区三区丝袜| 日本成人免费在线| 欧美日韩免费在线观看| 国产成人a亚洲精品| 欧美日韩免费观看中文| 北条麻妃一区二区在线观看| 欧美极品少妇xxxxx| 成人97在线观看视频| …久久精品99久久香蕉国产| 亚洲欧洲在线视频| 国产精品久久久久久超碰| 午夜精品在线观看| 国产精品久久久久999| 日韩欧美主播在线| 日韩高清a**址| 亚洲图片欧美午夜| 国产一区二区黑人欧美xxxx| 国产欧美欧洲在线观看| 国产精品老女人视频| 亚洲男人的天堂在线| 国产精品视频久久久久| 欧美极品美女视频网站在线观看免费| 亚洲第一av网| 中文字幕欧美亚洲| 欧美理论片在线观看| 神马国产精品影院av| 国产玖玖精品视频| 国产综合香蕉五月婷在线| 国产精品自拍网| 日韩欧美极品在线观看| 亚洲国产精品va| 久久久噜噜噜久久| 欧美性猛交xxxx免费看久久久| 久久免费少妇高潮久久精品99| 欧美日韩在线另类| 亚洲影院在线看| 日韩国产精品视频| 中文字幕视频一区二区在线有码| 久久久亚洲福利精品午夜| 日韩精品中文在线观看| 久久久91精品国产一区不卡| 亚洲理论在线a中文字幕| 91美女高潮出水| 久久精品视频va| 国产拍精品一二三| 欧美黄色成人网| 欧美成人午夜激情在线| 欧美日韩亚洲一区二区三区| 韩曰欧美视频免费观看| 日韩一区二区三区在线播放| 精品动漫一区二区三区| 日韩女在线观看| 久久久亚洲影院你懂的| 亚洲网站在线观看| 久久天天躁狠狠躁夜夜av| 日韩欧美在线看| 国产精品精品视频一区二区三区| 亚洲国产精品专区久久| 亚洲精品视频在线观看视频| 欧美性xxxx极品高清hd直播| 91精品国产色综合| 亚洲成人av片| 亚洲电影免费在线观看| 日韩有码在线视频| 色综合视频一区中文字幕| 国产精品久久久久久av福利| 97国产在线视频| 欧美大全免费观看电视剧大泉洋| 中文字幕国产精品| 欧美日韩亚洲视频一区| 欧美多人爱爱视频网站| 欧美乱妇40p| 在线成人中文字幕| 91精品国产91久久久久久久久| 日韩成人在线电影网| 亚洲欧美激情另类校园| 国产一区二区丝袜| 中文字幕在线国产精品| 久久免费精品日本久久中文字幕| 精品久久香蕉国产线看观看gif| 伦伦影院午夜日韩欧美限制| 国产成人aa精品一区在线播放| www.美女亚洲精品| 欧美裸体xxxx极品少妇| 久久久久久久久久婷婷| 久久偷看各类女兵18女厕嘘嘘| 深夜精品寂寞黄网站在线观看| 91精品久久久久久久| 亚洲精品久久7777777| 国外色69视频在线观看| 亚洲淫片在线视频| 色综合亚洲精品激情狠狠| 久久精品中文字幕一区| 久久亚洲影音av资源网| 超碰97人人做人人爱少妇| 欧美日韩福利在线观看| 日韩精品极品毛片系列视频| 久久久av网站| 欧美日韩第一视频| 91精品国产91久久久久久久久| 国产成人jvid在线播放| 亚洲精品美女在线观看| 影音先锋日韩有码| 97国产精品久久| 国内精品视频一区| 亚洲直播在线一区| 国产精品一香蕉国产线看观看| 国产欧美亚洲精品| yw.139尤物在线精品视频| 日韩精品视频免费专区在线播放| 亚洲天堂免费在线|