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 面向对象全新理练之继承与多态
Dec 03 Javascript
浅谈JavaScript的Polymer框架中的behaviors对象
Jul 29 Javascript
浅谈JavaScript 标准对象
Jun 02 Javascript
JS实现鼠标框选效果完整实例
Jun 20 Javascript
用原生JS对AJAX做简单封装的实例代码
Jul 13 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
Jul 22 Javascript
JS验证不重复验证码
Feb 10 Javascript
JS实现简易换图时钟功能分析
Jan 04 Javascript
Vue 父子组件的数据传递、修改和更新方法
Mar 01 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
May 16 jQuery
vue实现简单跑马灯效果
May 25 Javascript
使用React-Router实现前端路由鉴权的示例代码
Jul 26 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中iconv函数使用方法
2008/05/24 PHP
php下网站防IP攻击代码,超级实用
2010/10/24 PHP
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
通过PHP修改Linux或Unix口令的方法分享
2012/01/30 PHP
微信获取用户地理位置信息的原理与步骤
2015/11/12 PHP
PHP获取数组中指定的一列实例
2017/12/27 PHP
laravel中短信发送验证码的实现方法
2018/04/25 PHP
[原创]后缀就扩展名为js的文件是什么文件
2007/12/06 Javascript
js获取浏览器的可视区域尺寸的实现代码
2011/11/30 Javascript
js函数的延迟加载实现代码
2012/10/11 Javascript
document.createElement()用法
2013/03/13 Javascript
javascript每日必学之继承
2016/02/23 Javascript
jquery实现全选功能效果的实现代码
2016/05/05 Javascript
Angular2中select用法之设置默认值与事件详解
2017/05/07 Javascript
JavaScript实现QQ聊天消息展示和评论提交功能
2017/05/22 Javascript
微信小程序实现图片压缩功能
2018/01/26 Javascript
微信小程序实现人脸检测功能
2018/05/25 Javascript
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
2019/08/15 Javascript
从零学python系列之新版本导入httplib模块报ImportError解决方案
2014/05/23 Python
Python实现针对给定字符串寻找最长非重复子串的方法
2018/04/21 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
Django 中使用流响应处理视频的方法
2018/07/20 Python
Python延时操作实现方法示例
2018/08/14 Python
python识别图像并提取文字的实现方法
2019/06/28 Python
Python考拉兹猜想输出序列代码实践
2019/07/05 Python
英国著名音像制品和图书游戏购物网站:Zavvi
2016/08/04 全球购物
Redbubble法国:由独立艺术家设计的独特产品
2019/01/08 全球购物
Ariat官网:美国马靴和服装品牌
2019/12/16 全球购物
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
几道Java和数据库的面试题
2013/05/30 面试题
十八届三中全会学习方案
2014/02/16 职场文书
《桃花心木》教学反思
2014/02/17 职场文书
最美家庭活动方案
2014/08/31 职场文书
优秀共产党员事迹材料
2014/12/18 职场文书
团干部培训班心得体会
2016/01/06 职场文书