请问canvas内容自适应怎么实现的

发布于 2022-09-30 23:06:28 字数 129 浏览 22 评论 0

canvas的宽度变小,里面的内容也跟着缩放。
难道都是用百分比计算出来的位置?
有没有类似小程序rpx的技术?
图中是百度的echart

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

隔岸观火 2022-10-07 23:06:28

window.onresize的时候重新绘制canvas,echarts也是提供了resize方法的

梦晓ヶ微光ヅ倾城 2022-10-07 23:06:28

要不要试一下纯 CSS 的方式?

Kapture 2021-09-22 at 16.03.45.gif

https://codepen.io/xboxyan/pe...

浮华 2022-10-07 23:06:28

resize,此api需要手动调用来改变图表大小

window.onresize = function () {
  myChart.resize();
};

在线示例

祁梦 2022-10-07 23:06:28

这个有比较多的方案,比如图像计算中引入一个放缩变量(控制)系数(如果是等比例放缩,这个系数只需要一个,如果允许拉伸,则还需要有scX和scY的区别),这样在resize的处理中,先计算出这个系数,再在所有需要的地方计算则可以很快获取正确的结果。

或者先统一计算,再整个乘上放缩系数来映射放缩都是可以的。

无戏配角 2022-10-07 23:06:28

离线 canvas 原始大小
画完了,直接 缩放贴到 目标 canvas

很糊涂小朋友 2022-10-07 23:06:28
  • ECharts 是监听了屏幕缩放,然后调用实例的 resize 方法调整图像尺寸的;
  • rpx 的屏幕适配是基于屏幕宽度的,在开发中可以使用 px2rem 达到近似的效果。
    但是 canvas 比较特殊,除了 style.widthstyle.height 之外,它还有画布本身的 widthheight 属性,而屏幕适配只能修改 style.xxx,画布的内容则是等比缩放的,缩放倍数略大一点,就会导致图像出现锯齿或者边缘变糊。

虽然 canvas 呈现的是位图,但不妨碍人们为它封装矢量图绘制接口,如果因为缩放而影响画质的话就失去了矢量图绘制的优点了。
所以最好的方法是像 ECharts 那样,封装一个缩放的方法,跟随屏幕缩放。
再次一点的方案,可以把 canvaswidthheight 设为尺寸变化范围的最大值,因为图像缩小带来的不良效果通常要轻微一些(拟合通常比插值靠谱)。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文