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 ui(接口)介绍
Sep 17 Javascript
jquery实现页面图片等比例放大缩小功能
Feb 12 Javascript
AngularJS入门教程之XHR和依赖注入详解
Aug 18 Javascript
基于jQuery制作小图标上下滑动特效
Jan 18 Javascript
Vue实现typeahead组件功能(非常靠谱)
Aug 26 Javascript
JS实现去除数组中重复json的方法示例
Dec 21 Javascript
快速解决vue在ios端下点击响应延时的问题
Aug 27 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
Jan 05 jQuery
如何解决.vue文件url引用文件的问题
Jan 18 Javascript
Node.js之readline模块的使用详解
Mar 25 Javascript
微信小程序里引入SVG矢量图标的方法
Sep 20 Javascript
jQuery实时统计输入框字数及限制
Jun 24 jQuery
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遍历所有文件及文件夹的方法深入解析
2013/06/08 PHP
ThinkPHP缓存方法S()概述
2014/06/13 PHP
修改ThinkPHP缓存为Memcache的方法
2014/06/25 PHP
PHP 验证登陆类分享
2015/03/13 PHP
最新制作ThinkPHP3.2.3完全开发手册
2015/11/23 PHP
常用PHP封装分页工具类
2017/01/14 PHP
PHP从数组中删除元素的四种方法实例
2017/05/12 PHP
TNC vs RR BO3 第一场 2.14
2021/03/10 DOTA
window.onload 加载完毕的问题及解决方案(下)
2009/07/09 Javascript
简单实用jquery版三级联动select示例
2013/07/04 Javascript
Underscore源码分析
2015/12/30 Javascript
jQuery简单设置文本框回车事件的方法
2016/08/01 Javascript
浅谈jQuery before和insertBefore的区别
2016/12/04 Javascript
ajax异步请求详解
2017/01/06 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
JavaScript类的继承操作实例总结
2018/12/20 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
2019/04/04 Javascript
js中arguments对象的深入理解
2019/05/14 Javascript
python利用正则表达式提取字符串
2016/12/08 Python
Python学习入门之区块链详解
2017/07/25 Python
Django rest framework工具包简单用法示例
2018/07/20 Python
对PyTorch torch.stack的实例讲解
2018/07/30 Python
对Python random模块打乱数组顺序的实例讲解
2018/11/08 Python
在Pycharm terminal中字体大小设置的方法
2019/01/16 Python
初探利用Python进行图文识别(OCR)
2019/02/26 Python
Python常见读写文件操作实例总结【文本、json、csv、pdf等】
2019/04/15 Python
Python读取stdin方法实例
2019/05/24 Python
使用python写的opencv实时监测和解析二维码和条形码
2019/08/14 Python
django框架ModelForm组件用法详解
2019/12/11 Python
解决jupyter notebook显示不全出现框框或者乱码问题
2020/04/09 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
Pycharm操作Git及GitHub的步骤详解
2020/10/27 Python
意大利单身交友网站:Meetic
2020/07/12 全球购物
《狮子和兔子》教学反思
2014/03/02 职场文书
北京故宫的导游词
2015/01/31 职场文书
Python使用protobuf序列化和反序列化的实现
2021/05/19 Python