当前位置:首页 » 《休闲阅读》 » 正文

使用ResizeObserver观察DOM元素的尺寸变化

16 人参与  2024年09月30日 18:40  分类 : 《休闲阅读》  评论

点击全文阅读


在这里插入图片描述

文章目录

关于ResizeObserver示例代码示例代码结果如下所示echarts自适应容器div大小示例代码结果如下所示echarts自适应容器大小的方式二

关于ResizeObserver

关于这个Web API,可以看mdn的官网,ResizeObserver - Web API | MDN (mozilla.org),这里面有关于这个ResizeObserver 接口的说明。这个在可视化大屏的时候,关于echarts图表可能会用到这个,也就是说,需要做到echarts自适应容器div的大小。或者是低代码平台中要开发关于echarts的组件时会用到,我在低代码项目中,自定义开发echarts组件,就用到了这个内置的API。

示例代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Resize Observer with Input Events Example</title>    <style>        #target {            background-color: lightblue;            margin: 20px;        }    </style></head><body><div id="target" style="width: 300px; height: 200px;">    这个是绑定观察的元素:当前宽:300px, 高:200px</div><label for="width">宽:</label><input type="number" id="width" value="300" min="0" max="500" placeholder="Set width"><label for="height">高:</label><input type="number" id="height" value="200" min="0" max="500" placeholder="Set height"><div>    <button onclick="resizeObserver.disconnect()">停止观察</button>    <button onclick="resizeObserver.observe(targetElement)">重新观察</button></div><script>    // 创建 ResizeObserver 实例    const resizeObserver = new ResizeObserver(entries => {        entries.forEach(entry => {            console.log(`元素大小改变为,宽: ${entry.contentRect.width}px ,高: ${entry.contentRect.height}px`);            targetElement.innerHTML = `这个是绑定观察的元素:当前宽:${entry.contentRect.width}px, 高:${entry.contentRect.height}px`;        });    });    // 观察目标元素    const targetElement = document.querySelector('#target');    // 开始观察,可以观察多个元素,根据需求选择不同的元素即可,这里只拿一个作为示例    // const targetElement1 = document.querySelector('#target1');    // resizeObserver.observe(targetElement1);    resizeObserver.observe(targetElement);    // 获取输入框元素    const widthInputElement = document.querySelector('#width');    const heightInputElement = document.querySelector('#height');    // 添加 input 事件监听器    widthInputElement.addEventListener('input', function() {        // 更新目标元素的宽度        targetElement.style.width = `${this.value}px`;    });    heightInputElement.addEventListener('input', function() {        // 更新目标元素的高度        targetElement.style.height = `${this.value}px`;    });    // 在不再需要观察时取消观察    // resizeObserver.unobserve(targetElement);    // 清理观察器    // resizeObserver.disconnect();</script></body></html>

示例代码结果如下所示

注意看GIF图中的宽高数字变化

在这里插入图片描述

echarts自适应容器div大小

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Resize Observer with Input Events Example</title>    <!-- 在线引入echarts,因为是在线的,所以有可能会失效,如果链接失效了,自己去echarts官网找,然后引用即可 -->    <script src="https://cdn.jsdelivr.net/npm/echarts@5.5.1/dist/echarts.min.js"></script></head><body>    <!-- 为 ECharts 准备一个定义了宽高的 DOM -->    <div id="main" style="width: 600px;height:400px;"></div>    <label for="width">宽:</label>    <input type="number" step="20" id="width" value="600" min="0" max="1000" placeholder="Set width">    <label for="height">高:</label>    <input type="number" step="20" id="height" value="400" min="0" max="800" placeholder="Set height">    <div>        <button onclick="resizeObserver.disconnect()">停止观察</button>        <button onclick="resizeObserver.observe(targetElement)">重新观察</button>    </div>    <script>        // 基于准备好的dom,初始化echarts实例        var myChart = echarts.init(document.getElementById('main'));        // 指定图表的配置项和数据        var option = {            title: {                text: 'ECharts 入门示例'            },            tooltip: {},            legend: {                data: ['销量']            },            xAxis: {                data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']            },            yAxis: {},            series: [                {                    name: '销量',                    type: 'bar',                    data: [5, 20, 36, 10, 10, 20]                }            ]        };        // 使用刚指定的配置项和数据显示图表。        myChart.setOption(option);        // 创建 ResizeObserver 实例        const resizeObserver = new ResizeObserver(entries => {            entries.forEach(entry => {                console.log(`元素大小改变为,宽: ${entry.contentRect.width}px ,高: ${entry.contentRect.height}px`);                myChart.resize();            });        });        // 观察目标元素        const targetElement = document.querySelector('#main');        // 开始观察,可以观察多个元素,根据需求选择不同的元素即可,这里只拿一个作为示例        // const targetElement1 = document.querySelector('#target1');        // resizeObserver.observe(targetElement1);        // 如果在vue中,这个应该在组件挂载时调用        resizeObserver.observe(targetElement);        // 获取输入框元素        const widthInputElement = document.querySelector('#width');        const heightInputElement = document.querySelector('#height');        // 添加 input 事件监听器        widthInputElement.addEventListener('input', function () {            // 更新目标元素的宽度            targetElement.style.width = `${this.value}px`;        });        heightInputElement.addEventListener('input', function () {            // 更新目标元素的高度            targetElement.style.height = `${this.value}px`;        });        // 在不再需要观察时取消观察,如果是在vue中,这个应该在组件销毁时调用        // resizeObserver.unobserve(targetElement);        // 清理观察器,如果是在vue中,这个应该在组件销毁时调用        // resizeObserver.disconnect();    </script></body></html>

示例代码结果如下所示

具体看下面的GIF图,这里通过输入数字的方式,模拟div大小变化时,echarts自适应容器大小。

在这里插入图片描述

echarts自适应容器大小的方式二

文章一:Echarts自适应div大小_echarts div resize-CSDN博客
文章二:vue3项目中让echarts适应div的大小变化,跟随div的大小改变图表大小_echart图根据div大小变化-CSDN博客


点击全文阅读


本文链接:http://zhangshiyu.com/post/166762.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 云清故事会_云舒小姐太后新上热文_小说后续在线阅读_无删减免费完结_
  • 顶流小师妹撕我剧本,他却成了我的裙下之臣好评_沈澈谢谢帅哥最新目录_小说后续在线阅读_无删减免费完结_
  • 老公要娶狐狸做平妻,我杀疯了精选作品_陈默老公小少爷精彩分享_小说后续在线阅读_无删减免费完结_
  • 婆婆在我婚礼上跳钢管舞热门榜首_林昊婆婆周慧慧无错版_小说后续在线阅读_无删减免费完结_
  • 害我入狱,我成狱神后你们连跪都不配!独家番外_陆见秋柳盈盈新上_小说后续在线阅读_无删减免费完结_
  • 斗罗v:从逮到千仞雪偷窃开始成神完结版_陈晨胡列娜大反击_小说后续在线阅读_无删减免费完结_
  • 末世开火车,顺便捡了个机械神格高分神作_李昂诺亚独家首发_小说后续在线阅读_无删减免费完结_
  • 云清免费看_云舒小姐太后校园甜文_小说后续在线阅读_无删减免费完结_
  • 军训前,童养媳拿我的病历本给心上人叠纸飞机后,我退婚了完结爽文_杨鹤童养媳阿鹤一口气完结_小说后续在线阅读_无删减免费完结_
  • 未婚夫女兄弟把婚车改成宠物灵车,我反手让她的宾利变破烂最新阅读_魏成鸣乔诗诗林书妍小编推荐_小说后续在线阅读_无删减免费完结_
  • 军训当天男友为校花虐功勋犬,重生后我杀疯了潜力榜_顾野杜璇闻言大结局_小说后续在线阅读_无删减免费完结_
  • 天塌了!大佬们全被我捡回家了阿昭,小白,李惊雪小说整本+后续(阿昭,小白,李惊雪)清爽版阅读

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1