今天小编跟大家讲解下有关高清屏下canvas重置尺寸引发的问题的解决 ,相信小伙伴们对这个话题应该有所关注吧,小编也收集到了有关高清屏下canvas重置尺寸引发的问题的解决 的相关资料,希望小伙伴们看了有所帮助。
我们知道 清空canvas画布内容有以下两个方法。
第一种方法是cearRect函数:
context.cearRect(0,0,canvas.width,canvas.height)第二种方法就是用原值重新设置一下canvas的宽(或者高)
canvas.width = canvas.width// or canvas.height = canvas.height第二种方法可以起作用 是因为canvas的一个特点:
每当画布的高度或宽度被重设时 画布内容就会被清空。相关内容可以参考 https://www.w3school.com.cn/html5/att_canvas_width.asp
在一个可视化项目中 我们发现在一些电脑上面总是会出现效果错乱的情况。
经过调试 我们发现 原来是“canvas.width = canvas.width”惹的祸。普通屏幕下面下不会有问题 但是如果屏幕是高清屏 就会出现问题。这是因为 高清屏下 我们为了处理绘制图形模糊的问题 通常会做如下处理:
function setupCanvas(canvas) { let width = canvas.width, height = canvas.height, dpr = window.devicePixelRatio || 1.0; if (dpr != 1.0 ) { canvas.style.width = width + "px"; canvas.style.height = height + "px"; canvas.height = height * dpr; canvas.width = width * dpr; ctx.scale(dpr, dpr); } }我们知道 高清屏下window.devicePixelRatio都大于1。所以在绘图之前画笔会被缩放:
ctx.scale(dpr, dpr);我们知道cavnas是基于状态的绘图组件。 其中缩放比例值也在状态管理之中。 当我们重新设置canvas的宽(高也一样)的时候 不仅会清空canvas的画布内容 同时还会把绘图状态重置到最原始的状态 原始状态下画笔的缩放比例是1 缩放比例值会被重置为1 因而导致绘制效果错乱。
以上就是本文的全部内容 希望对大家的学习有所帮助 也希望大家多多支持爱蒂网。
来源:爱蒂网