vue监听dom大小改变案例


Posted in Javascript onJuly 29, 2020

需求描述:layout左边菜单栏收缩,右边的content区域的swiper宽度没有改变(没有图,朋友的问题,大体画一下)

vue监听dom大小改变案例

类似于点击折叠左边目录会变小,右边内容区域会变大,但是swiper在刚开始的时候就确定了宽度,所以我的想法是监听右边宽度大小去updata一下。但是我用vue的watch监听$refs.swiper.offsetwidth失败了!!!!但是宽度确实是在改变的很费解,先说一下解决方法把

1、使用element-resize-detector

var elementResizeDetectorMaker = require("element-resize-detector")
erd.listenTo(document.getElementById("swiper"), function(element) {
 var width = element.offsetWidth;
 var height = element.offsetHeight;
 console.log("Size: " + width + "x" + height);
});
//别为我为什么vue用getid。。我懒得改了。用ref获取dom也可以

2 、使用ResizeObserver

this.observer = new ResizeObserver(entries => {
   entries.forEach(() => {
    swiper.updata()
   })
  })
  let content = document.getElementById('swiper')
  this.observer.observe(content)

至于为什么watch不能兼听我的宽度的问题。。我感觉是只能监听被双向绑定的数据,也就是MVVM的数据,比如我们经常用watch监听data和$route。但还是不太确定希望有大佬帮我~~~

补充知识:vue 监听某个容器大小变化(饼状图适应容器大小变化)

需求

echarts图表 根据容器大小改变大小

主要应用了vue 监听 dom元素 尺寸的变化

element提供的 element-resize-detector 可以轻松解决问题的存在

安装依赖

npm install element-resize-detector

require 引入使用,需要用到的页面 ***.vue 引入

phontoImage(){   //渲染饼图调用的方法
       var echarts = require('echarts');
       var elementResizeDetectorMaker = require("element-resize-detector");//引入监听dom变化的组件
       var erd = elementResizeDetectorMaker();
       var worldMapContainer = document.getElementById('main4'); //获取 图标容器dom元素
        var that = this;
     //用于使chart自适应高度和宽度,通过窗体高宽计算容器高宽
     var resizeWorldMapContainer = function () {
       worldMapContainer.style.width = worldMapContainer.scrollWidth+'px';
       worldMapContainer.style.height = worldMapContainer.clientHeight+'px';
     };

     // 基于准备好的dom,初始化echarts实例
     var myChart = echarts.init(worldMapContainer);

        //var myChart = echarts.init(document.getElementById('main1'));
        myChart.on('click',function(params){

            that.open(params);

        });

        myChart.setOption({
          title:[
           {
             text: this.data4.name, //环形饼图中间部分的名称
             //subtext:rentalVal,
             textStyle:{  //中间部分字体样式
               fontSize:14,
               color:"black" 
             },
             subtextStyle: { // 中间下边一行字体样式
               fontSize:14,
               color: 'black'
             },
             textAlign:"center",
             x: '43%',   //字体在饼图中的位置
             y: '44%',
           }],
           tooltip : {
             trigger: 'item',
             formatter: "{a} <br/>{b} : {c} ({d}%)"
           },
           legend: {
             type: 'scroll',
             orient: 'vertical',
             right: 10,
             top: 20,
             bottom: 20,
             data: this.data4.names, 
           },
           series : [
             {
               name: this.data4.name,
               type: 'pie',
               radius : ['40%', '60%'], //设置一个区间 就是环形饼状图
               center: ['45%', '50%'],
               data:this.data4.values,
               itemStyle: {
                 emphasis: {
                   shadowBlur: 10,
                   shadowOffsetX: 0,
                   shadowColor: 'rgba(0, 0, 0, 0.5)'
                 },
                 normal:{
                   color:function(params) {
                   //自定义颜色
                   var colorList =['#7c277d','#7460ee', '#FC3468', '#1e88e5', '#ffb22b', '#fc4b6c', '#708069', '#26c6da','#fcc525', '#8d6658'];
                     return colorList[params.dataIndex]
                    }
                 }
               }
             }
           ]
        });
        erd.listenTo(worldMapContainer, function (element) { //执行监听 
          that.$nextTick(function () {
            myChart.resize(); //变化重新渲染饼图

   })
  })
      },

以上这篇vue监听dom大小改变案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery 选项卡效果(JS与HTML的分离)
Apr 01 Javascript
在JQuery dialog里的服务器控件 事件失效问题
Dec 08 Javascript
禁止IE用右键的JS代码
Dec 30 Javascript
javascript中的循环语句for语句深入理解
Apr 04 Javascript
Jquery实现动态切换图片的方法
May 18 Javascript
JavaScript制作淘宝星级评分效果的思路
Jun 23 Javascript
微信小程序实现滑动删除效果
May 19 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
Jun 01 Javascript
vue2.0的虚拟DOM渲染思路分析
Aug 09 Javascript
vue webpack打包后图片路径错误的完美解决方法
Dec 07 Javascript
vue.js实现简单的计算器功能
Feb 22 Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
Jul 20 Javascript
VUE实时监听元素距离顶部高度的操作
Jul 29 #Javascript
详解JavaScript作用域 闭包
Jul 29 #Javascript
Angular+ionic实现折叠展开效果的示例代码
Jul 29 #Javascript
Vue 监听元素前后变化值实例
Jul 29 #Javascript
使用eslint和githooks统一前端风格的技巧
Jul 29 #Javascript
vue-cli或vue项目利用HBuilder打包成移动端app操作
Jul 29 #Javascript
小程序实现列表展开收起效果
Jul 29 #Javascript
You might like
php有效防止图片盗用、盗链的两种方法
2016/11/01 PHP
Symfony2创建基于域名的路由相关示例
2016/11/14 PHP
使用WAMP搭建PHP本地开发环境
2017/05/10 PHP
PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
2018/05/23 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
PHP进阶学习之反射基本概念与用法分析
2019/06/18 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
2020/04/06 PHP
PHP7 字符串处理机制修改
2021/03/09 PHP
JavaScript While 循环基础教程
2007/04/05 Javascript
js限制文本框只能输入数字(正则表达式)
2012/07/15 Javascript
jquery图片放大镜功能的实例代码
2013/03/26 Javascript
Node.js异步I/O学习笔记
2014/11/04 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
jQuery DOM节点的遍历方法小结
2017/08/15 jQuery
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
使用Angular-CLI构建NPM包的方法
2018/09/07 Javascript
函数式编程入门实践(一)
2019/04/20 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
2019/04/28 Javascript
react使用antd表单赋值,用于修改弹框的操作
2020/10/29 Javascript
jQuery列表动态增加和删除的实现方法
2020/11/05 jQuery
[01:21]DOTA2周边文化主题展 神秘商店火热开售
2017/07/30 DOTA
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
Django框架首页和登录页分离操作示例
2019/05/28 Python
django基础学习之send_mail功能
2019/08/07 Python
在python中利用pycharm自定义代码块教程(三步搞定)
2020/04/15 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
2020/05/24 Python
Python如何给函数库增加日志功能
2020/08/04 Python
详解Scrapy Redis入门实战
2020/11/18 Python
基于HTML5的齿轮动画特效
2016/02/29 HTML / CSS
全球最大的在线橄榄球商店:Lovell Rugby
2018/05/20 全球购物
英国领先的电动可调床制造商:Laybrook
2019/12/26 全球购物
俄罗斯游戏商店:Buka
2020/03/01 全球购物
一些Unix笔试题和面试题
2012/09/25 面试题
会计专业自荐信
2014/06/03 职场文书
2015年电气技术员工作总结
2015/07/24 职场文书
Java 多态分析
2022/04/26 Java/Android