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 相关文章推荐
javascript之ESC(第二类混淆)
May 06 Javascript
Jquery实现的一种常用高亮效果示例代码
Jan 28 Javascript
使用JavaScript 编写简单计算器
Nov 24 Javascript
JS实现从表格中动态删除指定行的方法
Mar 31 Javascript
AngularJS 中的事件详解
Jul 28 Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
Jul 17 Javascript
浅谈手写node可读流之流动模式
Jun 01 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
Nov 10 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
Feb 14 jQuery
Layui带搜索的下拉框的使用以及动态数据绑定方法
Sep 28 Javascript
layui table 表格上添加日期控件的两种方法
Sep 28 Javascript
js实现淘宝浏览商品放大镜功能
Oct 28 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快速统计某个数据库中每张表的数据量
2012/09/04 PHP
Javascript与PHP验证用户输入URL地址是否正确
2014/10/09 PHP
JavaScript 编程引入命名空间的方法
2007/06/29 Javascript
Javascript select下拉框操作常用方法
2009/11/09 Javascript
js限制文本框为整数和货币的函数代码
2010/10/13 Javascript
Jquery实现三层遍历删除功能代码
2013/04/23 Javascript
js实现的类似于asp数据字典的数据类型代码实例
2014/09/03 Javascript
小结Node.js中非阻塞IO和事件循环
2014/09/18 Javascript
jQuery实现点击该行即可删除HTML表格行
2014/10/17 Javascript
简介AngularJS中使用factory和service的方法
2015/06/17 Javascript
js实现获取当前时间是本月第几周的方法
2015/08/11 Javascript
学习JavaScript设计模式(单例模式)
2015/11/26 Javascript
JavaScript html5 canvas绘制时钟效果(二)
2016/03/27 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
2017/01/01 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
使用layer模态框给新页面传值的方法
2019/09/27 Javascript
Python使用中文正则表达式匹配指定中文字符串的方法示例
2017/01/20 Python
解读python如何实现决策树算法
2018/10/11 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
2018/11/29 Python
python实现两张图片的像素融合
2019/02/23 Python
python 根据字典的键值进行排序的方法
2019/07/24 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
Python 文件数据读写的具体实现
2020/01/24 Python
Python基于requests库爬取网站信息
2020/03/02 Python
在 Pycharm 安装使用black的方法详解
2020/04/02 Python
Django自定义列表 models字段显示方式
2020/04/03 Python
Python中Qslider控件实操详解
2021/02/20 Python
战略合作意向书范本
2014/04/01 职场文书
动漫设计与制作专业推荐信
2014/07/07 职场文书
2014年党的群众路线学习心得体会
2014/11/05 职场文书
2014年精神文明建设工作总结
2014/11/19 职场文书
2016年党员学习廉政准则心得体会
2016/01/20 职场文书
Python基础之字符串格式化详解
2021/04/21 Python
如何用python绘制雷达图
2021/04/24 Python
MySQL中出现乱码问题的终极解决宝典
2021/05/26 MySQL
如何在Python项目中引入日志
2021/05/31 Python