IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue中让canvas适应外层盒子的宽高 -> 正文阅读

[JavaScript知识库]vue中让canvas适应外层盒子的宽高

注:是适应不是自适应,指移动端不同尺寸的手机下,为了让canvas宽高能根据外层盒子的大小进行匹配,而非自适应(让canvas随外层盒子大小变化实时自变化)。


场景:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
案例采用的是阿里的AntV F2图表库


html:

<!-- 环形饼图开始 -->
<div class="bingtu" id="huanjing">
	<div class="chart">
		<canvas id="container" :height="chartHeight" :width="chartWidth"></canvas>
	</div>
</div>

js:

import F2 from '@antv/f2/lib/index-all'    // 用这个方式引入
 
export default {
  data() {
    return {
      datetime3: '2016-06',
      data: null,
      chartHeight: 180,  // 常见尺寸屏幕的高度设为默认值,下同
      chartWidth: 327,
    }
  },
  methods: {
    // 让canvas的宽高适应
    getChartWH() {
      let chartDiv = document.getElementById('huanjing')
      let canvas = document.getElementById('container')
      canvas.width = chartDiv.offsetWidth
      canvas.height = chartDiv.offsetHeight - 15
    }
  }
  mounted() {
    this.getChartWH()
  }
}

阿里F2图表结合vue的实现请见本人的其他帖子:

(占位,之后来补上地址)


题外话(思路&踩的坑):

一开始是打算把offset拿到的宽高值赋值给this.chartWidth和this.chartHeight,然后在标签上通过:height=“chartHeight” :width="chartWidth"来绑定外层盒子的宽高,但把绑定宽高的方法放在create或beforeMount中时,外层盒子还未渲染在DOM上,document.getElementById这一步就报错了,故offset只能取到undefined,于是canvas的宽高会变成默认值;而放在Mounted中时,canvas会先在DOM渲染时取到默认值,将canvas绘制完成,再到挂载阶段执行绑定宽高的方法,然而此时:height=“chartHeight” :width="chartWidth"中的变量再改变已经没有用了,因为canvas在绘制完成后宽高不会再随样式变化而变化,只有刷新后才能改变。

那么如何在取得新的宽高值后让canvas刷新呢?不妨换个思路:宽高改变时,重新绘制新的canvas,那么在Mounted里改变canvas.width和canvas.height值就好了,这两个值改变就会重新绘制canvas,将获得的外层盒子的宽高赋值给这两个值,于是页面中的canvas宽高就会和外层元素适应了。

THX~

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-11 12:37:51  更:2021-11-11 12:39:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:07:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码