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 相关文章推荐
eval的两组性能测试数据
Aug 17 Javascript
JavaScript每天必学之数组和对象部分
Sep 17 Javascript
微信小程序 使用canvas制作K线实例详解
Jan 12 Javascript
js 性能优化之算法和流程控制
Feb 15 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
Mar 25 Javascript
JavaScript 巧学巧用
May 23 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
Sep 26 Javascript
node.js中TCP Socket多进程间的消息推送示例详解
Jul 10 Javascript
详解vue微信网页授权最终解决方案
Jun 16 Javascript
js实现计时器秒表功能
Dec 16 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
Apr 09 Javascript
深入理解 ES6中的 Reflect用法
Jul 18 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
无限级别菜单的实现
2006/10/09 PHP
检测png图片是否完整的php代码
2010/09/06 PHP
php代码架构的八点注意事项
2016/01/25 PHP
php ajax异步读取rss文档数据
2016/03/29 PHP
PHP 5.6.11中CURL模块问题的解决方法
2016/08/08 PHP
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
js屏蔽鼠标键盘(右键/Ctrl+N/Shift+F10/F11/F5刷新/退格键)
2013/01/24 Javascript
基于pthread_create,readlink,getpid等函数的学习与总结
2013/07/17 Javascript
删除select中所有option选项jquery代码
2013/08/12 Javascript
使用mouse事件实现简单的鼠标经过特效
2015/01/30 Javascript
javascript中caller和callee详解
2015/08/10 Javascript
jQuery基础知识点总结(DOM操作)
2016/06/01 Javascript
Node.js实现注册邮箱激活功能的方法示例
2018/03/23 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
2018/07/03 jQuery
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
python原始套接字编程示例分享
2014/02/21 Python
Python的Bottle框架中返回静态文件和JSON对象的方法
2015/04/30 Python
Python实现提取谷歌音乐搜索结果的方法
2015/07/10 Python
Python实现动态图解析、合成与倒放
2018/01/18 Python
python opencv实现旋转矩形框裁减功能
2018/07/25 Python
浅谈Python中函数的定义及其调用方法
2019/07/19 Python
MNIST数据集转化为二维图片的实现示例
2020/01/10 Python
python中执行smtplib失败的处理方法
2020/07/01 Python
AmazeUI 缩略图的实现示例
2020/08/18 HTML / CSS
NEW LOOK官网:英国时装零售巨头之一,快时尚品牌
2017/01/11 全球购物
美国汽车零部件和配件网站:CarParts
2019/03/13 全球购物
Java里面有没有全局变量?为什么?
2015/02/06 面试题
建筑毕业生自我鉴定
2013/10/18 职场文书
安全环保标语
2014/06/09 职场文书
党的群众路线教育实践活动查摆剖析材料
2014/10/10 职场文书
蓬莱阁导游词
2015/02/04 职场文书
2015年初中教务处工作总结
2015/07/21 职场文书
2019年警察入党转正申请书最新范文
2019/09/03 职场文书
MySQL多表查询机制
2022/03/17 MySQL
《艾尔登法环》发布最新「战技」宣传片
2022/04/03 其他游戏