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实现增加删除行的方法
Feb 03 Javascript
详解JavaScript对W3C DOM模版的支持情况
Jun 16 Javascript
javascript实现在指定元素中垂直水平居中
Sep 13 Javascript
jQuery带进度条全屏图片轮播特效代码分享
Jun 28 Javascript
全面解析Bootstrap图片轮播效果
Dec 03 Javascript
JavaScript操作表单实例讲解(上)
Jun 20 Javascript
微信小程序 加载 app-service.js 错误解决方法
Oct 12 Javascript
JavaScript实现格式化字符串函数String.format
Dec 16 Javascript
JS实现百度搜索接口及链接功能实例代码
Feb 02 Javascript
js数组去重的N种方法(小结)
Jun 07 Javascript
vue 封装 Adminlte3组件的实现
Mar 18 Javascript
vue项目两种方式实现竖向表格的思路分析
Apr 28 Vue.js
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+oracle 分页类
2006/10/09 PHP
php实现mysql数据库备份类
2008/03/20 PHP
PHP实现的汉字拼音转换和公历农历转换类及使用示例
2014/07/01 PHP
php检测数组长度函数sizeof与count用法
2014/11/17 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
php访问数组最后一个元素的函数end()用法
2015/03/18 PHP
javascript 动态修改样式和层叠样式表代码
2010/04/27 Javascript
发布一个基于javascript的动画类 Fx.js
2010/11/05 Javascript
jquery对单选框,多选框,文本框等常见操作小结
2014/01/08 Javascript
Node.js中创建和管理外部进程详解
2014/08/16 Javascript
JavaScript对象属性检查、增加、删除、访问操作实例
2015/07/08 Javascript
第一次接触Bootstrap框架
2016/10/24 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
Vue中的数据监听和数据交互案例解析
2017/07/12 Javascript
Dropify.js图片宽高自适应的方法
2017/11/27 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
微信小程序中使用Async-await方法异步请求变为同步请求方法
2019/03/28 Javascript
使用post方法实现json往返传输数据的方法
2019/03/30 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
2020/10/28 Javascript
从源码角度来回答keep-alive组件的缓存原理
2021/01/18 Javascript
Java中重定向输出流实现用文件记录程序日志
2015/06/12 Python
Python字符串切片操作知识详解
2016/03/28 Python
PyQt4实时显示文本内容GUI的示例
2019/06/14 Python
python中pytest收集用例规则与运行指定用例详解
2019/06/27 Python
vscode 配置 python3开发环境的方法
2019/09/19 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
传统HTML页面实现模块化加载的方法
2018/10/15 HTML / CSS
设计师珠宝:Ylang 23
2018/05/11 全球购物
香港最新科技与优质家居产品购物网站:J SELECT
2018/08/21 全球购物
毕业生个人求职自荐信
2014/02/26 职场文书
车间核算员岗位职责
2014/07/01 职场文书
村安全生产责任书
2014/08/25 职场文书
客户答谢会致辞
2015/01/20 职场文书
小学班主任工作经验交流材料
2015/11/02 职场文书
选对餐饮营销策略,营业额才会上涨
2019/08/27 职场文书
详解Vue项目的打包方式(生成dist文件)
2022/01/18 Vue.js