vue3页面加载完成后获取宽度、高度

刚好H5项目有用到这个需求,页面加载完成后获取当前页面高度,记录一下。^_^

<template>
<div class="wrap" :style="{height:hHeight+'px'}">
</div>
</template>
<script lang='ts'>
import { defineComponent, reactive, nextTick, onMounted, toRefs } from "vue";
export default defineComponent({
  name: "Aboutus",
  setup() {
    let state = reactive({
      hHeight: 0,//页面高度
    });
  onMounted(() => {
    nextTick(()=>{
        state.hHeight = document.documentElement.clientHeight;
        console.log(document.documentElement.clientHeight)
    })
  })
  return {
      ...toRefs(state)
  }
  },
});
</script>

用vue3.2版本的也可以用语法糖来处理,直接上代码:

<template>
  <div class="wrap" :style="{height:state.hHeight+'px'}">
   </div>
</template>
<script setup>
import { reactive, nextTick } from "vue"
const state = reactive({
    hHeight: 0
})
nextTick(()=>{
     state.hHeight = document.documentElement.clientHeight;
     console.log(document.documentElement.clientHeight)
 })
</script>

亲测可用,大家可以试试! 

 

<think>嗯,用户想在Vue3页面加载时初始化ECharts图表。首先,我需要回忆一下Vue3的生命周期钩子,因为页面加载通常涉及onMounted。对了,Vue3的Composition API中,onMounted确实是在组件挂载后执行的,所以应该在这里初始化ECharts。 然后,安装ECharts包是必须的,用户可能已经知道要用npm或yarn安装,但最好还是提醒一下。接下来,在组件中引入ECharts,可能需要按需引入以减少包体积,不过基础教程的话,先完整引入也没问题。 接下来,需要在模板里放一个div作为容器,设置ref以便在代码中访问DOM元素。Vue3中使用ref函数创建响应式引用,所以在setup里用ref(null)初始化,然后在onMounted里通过value属性获取元素实例。 初始化图表的时候,要确保DOM已经渲染完成,否则ECharts无法正确获取容器的宽度高度。可能需要设置容器的样式,比如宽度高度,否则图表可能显示不出来或者尺寸不对。 配置选项部分,用户可能需要一个简单的示例,比如柱状图或者折线图。给出一个基本的option对象,包含标题、X轴Y轴的数据,以及系列数据。然后调用echarts.init方法初始化,并用setOption应用配置。 另外,记得在组件卸载时销毁ECharts实例,防止内存泄漏。Vue3的onUnmounted钩子可以用来调用dispose方法。 响应式处理可能也是需要的,比如窗口大小变化时调整图表大小。可以添加一个resize事件监听器,并在onUnmounted里移除监听器,避免副作用。 还有可能用户遇到的问题,比如容器没有设置尺寸导致图表不显示,或者多次初始化导致的内存问题。所以提示中要包含这些注意事项。 最后,把所有的步骤整理成一个清晰的代码示例,分步骤解释,确保用户能跟着操作。可能还需要提到按需引入打包优化的建议,但作为基础介绍,可能放在最后作为补充。</think>在Vue3中初始化ECharts图表可以通过以下步骤实现: ```html <template> <!-- 1. 准备图表容器 --> <div ref="chartContainer" style="width: 600px; height: 400px;"></div> </template> <script setup> import { onMounted, ref } from &#39;vue&#39; import * as echarts from &#39;echarts&#39; // 2. 引入ECharts // 3. 创建容器引用 const chartContainer = ref(null) onMounted(() => { // 4. 确保DOM已挂载后初始化 if (chartContainer.value) { // 5. 初始化图表实例 const myChart = echarts.init(chartContainer.value) // 6. 配置图表选项 const option = { title: { text: &#39;示例图表&#39; }, xAxis: { type: &#39;category&#39;, data: [&#39;Mon&#39;, &#39;Tue&#39;, &#39;Wed&#39;, &#39;Thu&#39;, &#39;Fri&#39;, &#39;Sat&#39;, &#39;Sun&#39;] }, yAxis: { type: &#39;value&#39; }, series: [{ data: [150, 230, 224, 218, 135, 147, 260], type: &#39;line&#39; }] } // 7. 应用配置 myChart.setOption(option) // 8. 窗口resize监听(可选) window.addEventListener(&#39;resize&#39;, () => { myChart.resize() }) } }) </script> ``` 关键步骤说明: 1. **准备容器** 需要给图表指定一个具有明确宽高的DOM容器,建议使用`ref`获取DOM引用 2. **生命周期控制** 使用`onMounted`确保DOM加载完成后再初始化图表 3. **销毁处理**(推荐添加) ```javascript import { onUnmounted } from &#39;vue&#39; onUnmounted(() => { if (myChart) { myChart.dispose() // 销毁实例 window.removeEventListener(&#39;resize&#39;, myChart.resize) // 移除监听 } }) ``` 4. **响应式处理** 可以配合`ResizeObserver`实现更精准的容器尺寸监听: ```javascript const resizeObserver = new ResizeObserver(() => { myChart.resize() }) resizeObserver.observe(chartContainer.value) ``` 注意事项: - 容器必须设置明确的宽高(可通过CSS设置) - 避免重复初始化,建议配合`shallowRef`管理图表实例 - 使用按需引入减小包体积: ```javascript import { init } from &#39;echarts/core&#39; import { LineChart } from &#39;echarts/charts&#39; // 按需引入其他组件... echarts.use([LineChart]) ``` 优化建议: 1. 将图表逻辑封装为可复用的Composable 2. 使用`autoresize` mixin处理响应式 3. 复杂图表建议使用`provide/inject`管理主题配置 4. 大数据量场景使用虚拟渲染(`large`模式)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赚成美业

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值