canvas 绘图解决方案(高清屏下canvas重置尺寸引发的问题的解决)
类别:Web前端 浏览量:2770
时间:2021-10-04 01:40:42 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,因而导致绘制效果错乱。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
您可能感兴趣
- canvas心形水波(Canvas波浪花环的示例代码)
- canvas俄罗斯方块(JavaScript canvas实现俄罗斯方块游戏)
- 微信小程序canvas缩放(微信小程序之html5 canvas绘图并保存到系统相册)
- html5 canvas touch(html5 canvas手势解锁源码分享)
- canvas如何调试(关于canvas.toDataURL 在iOS运行失败的问题解决)
- canvas绘制动态线条(5分钟实现Canvas鼠标跟随动画背景)
- html5的canvas代码(H5最强接口之canvas实现动态图形功能)
- 微信小程序canvas 动画(微信小程序使用canvas绘制钟表)
- html5canvas案例(h5使用canvas画布实现手势解锁)
- canvas处理图片风格(html2 canvas生成清晰的图片实现打印功能)
- canvas 中增加组件(如何在Canvas中添加事件的方法示例)
- canvas绘制分辨率(通过canvas转换颜色为RGBA格式及性能问题的解决)
- html 设置canvas的背景图可缩放(浅析canvas元素的html尺寸和css尺寸对元素视觉的影响)
- html5canvas图形怎么打印(HTML5 Canvas 实现K线图的示例代码)
- canvas绘图问题(记一次高分屏下canvas模糊问题)
- html5 canvas 特效(JavaScript canvas实现流星特效)
- 东南亚安全吗(好不好挣钱)
- 潘长江小品《照亮全家福》台词剧本完整版(潘长江小品照亮全家福台词剧本完整版)
- 一窗通办政务服务小品剧本(一窗通办政务服务小品剧本)
- 刘韬涛丁子贺小品《根治低头族》台词剧本(刘韬涛丁子贺小品根治低头族台词剧本)
- 看完《夺冠》,黄渤的演技我实在夸不起来,彭昱畅反令人惊喜(黄渤的演技我实在夸不起来)
- 黄渤泪目 我的痴呆父亲,我内心永远的痛(黄渤泪目我的痴呆父亲)
热门推荐
- 如何采集nginx的日志(Filebeat 采集 Nginx 日志的方法)
- python怎么输出一个矩阵(python实现转圈打印矩阵)
- dedecms如何发表文章(dedecms实现调用所有顶级栏目下最新文章的方法)
- 通过接口访问mysql数据库(使用mysql记录从url返回的http GET请求数据操作)
- dedecms代码在哪里(dedecms 解决rss相对路径问题)
- laravel视图组件(Laravel5.4框架中视图共享数据的方法详解)
- css3所有动画(CSS3常见动画的实现方式)
- thinkphp权限认证怎么用(ThinkPHP框架结合Ajax实现用户名校验功能示例)
- socket和tcp什么关系(TCP socket SYN队列和Accept队列区别原理解析)
- 面向对象的装封、继承、多态的概念理解
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9