vue+element项目里实时监听某个div宽度的变化,然后执行相应的事件

摘要:
==style.height){binding.value();//关键}width=style.width;height=style.height;}el.__vueSetInterval__=setInterval;},unbind{clearInterval;}}}//然后在html中//绑定的resize是一个函数//在methods中resize(){//当宽高变化时就会执行//执行某些操作}2、如果是封装的全局自定义指令@/directives/index.jsimportVuefrom"vue"Vue.directive("chartsWeith",{bind(el,binding){//el为绑定的元素,binding为绑定给指令的对象letwidth='',height='';functionisReize(){conststyle=document.defaultView.getComputedStyle(el);if(width!

背景:vue项目中用到echarts图表,页面上有侧边栏,侧边栏收缩图表不能自适应,想通过监听内容部分的宽度让图表resize,试过window带的resize,只能监听浏览器窗口大小变化,为了监听某元素区域的变化而使echarts的尺寸重置。
vue+element项目里实时监听某个div宽度的变化,然后执行相应的事件第1张
可以看到收起时会图表不会发生变化(上面的折线图是已经调好的)
vue+element项目里实时监听某个div宽度的变化,然后执行相应的事件第2张
解决方式-----

  • 一、自定义指令的方式
    1、局部自定义指令
directives: {  // 使用局部注册指令的方式
  resize: { // 指令的名称
    bind(el, binding) { // el为绑定的元素,binding为绑定给指令的对象
      let width = '', height = '';
      function isReize() {
        const style = document.defaultView.getComputedStyle(el);
        if (width !== style.width || height !== style.height) {
          binding.value();  // 关键
        }
        width = style.width;
        height = style.height;
      }
      el.__vueSetInterval__ = setInterval(isReize, 300);
    },
    unbind(el) {
      clearInterval(el.__vueSetInterval__);
    }
  }
}
//然后在html中
<div v-resize="resize"></div> // 绑定的resize是一个函数
//在methods中
resize() {  // 当宽高变化时就会执行
  //执行某些操作
}

2、如果是封装的全局自定义指令
@/directives/index.js

import Vue from "vue"


Vue.directive("chartsWeith",{
    bind(el, binding) { // el为绑定的元素,binding为绑定给指令的对象
        let width = '', height = '';
        function isReize() {
            const style = document.defaultView.getComputedStyle(el);
            if (width !== style.width || height !== style.height) {
            binding.value();  // 关键
            }
            width = style.width;
            height = style.height;
        }
        el.__vueSetInterval__ = setInterval(isReize, 300);
    },
    unbind(el) {
        clearInterval(el.__vueSetInterval__);
    }
})

main.js中

...
import "@/directives"//引入自定义指令

图表页面中

//然后在html中
<div v-chartsWeith="resize"></div> // 绑定的resize是一个函数(v-chartsWeith表示全局指令的方法,resize表示执行的方法)
//在methods中
resize() {  // 当宽高变化时就会执行
  //执行某些操作
}
  • 二、element提供的 element-resize-detector(没实际使用,仅看到网上有这个方法)
    第一步:在项目中安装 element-resize-detector
npm install element-resize-detector

第二步:在项目中使用

html


<div id="test">
    <div id="eChart">
</div>

(1)script引入


<script src="http://t.zoukankan.com/node_modules/element-resize-detector/dist/element-resize-detector.min.js"></script>
 
 
// With default options (will use the object-based approach).
var erd = elementResizeDetectorMaker();
 
// With the ultra fast scroll-based approach.
// This is the recommended strategy.
var erdUltraFast = elementResizeDetectorMaker({
  strategy: "scroll" //<- For ultra performance.
});
 
 
 
//监听元素size变化,触发响应事件
erd.listenTo(document.getElementById("test"), function(element) {
  var width = element.offsetWidth;
  var height = element.offsetHeight;
  console.log("Size: " + width + "x" + height);
});

(2)require 引入使用,在cli项目中使用,需要用到的页面 ***.vue 引入

var elementResizeDetectorMaker = require("element-resize-detector")

在mounted中启用

 var erd = elementResizeDetectorMaker()
    erd.listenTo(document.getElementById("test"), function (element) {
      var width = element.offsetWidth
      var height = element.offsetHeight
      that.$nextTick(function () {
        console.log("Size: " + width + "x" + height)
        //使echarts尺寸重置
        that.$echarts.init(document.getElementById("eChart")).resize()
       
      })
    })

转载地址:https://blog.csdn.net/csl125/article/details/89245267

免责声明:文章转载自《vue+element项目里实时监听某个div宽度的变化,然后执行相应的事件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇FFmpeg滤镜使用指南ORACLE-dmp文件导出导入,了解一下?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

css基础-2 div布局

div布局   <html>         <head>                 <title>div布局 </title>                 <meta charset="utf-8">                 <style>       .toubu...

bxSlider使用

占个坑,有空仔细研究下。 官网:http://bxslider.com/ 优点: 1.完全响应-将适应任何设备2.水平,垂直和褪色模式3.它可以包括图片,视频,或HTML内容4.先进的触摸/刷卡支持内置5.使用css滑动动画(本地硬件加速!)6.全回调函数和公共方法7.小文件大小,完全主题,简单实现8.浏览器:Firefox,Chrome,Safari支持...

CSS样式实现溢出超出DIV边框宽度高度的内容自动隐藏方法

CSS样式实现溢出超出DIV边框宽度高度的内容自动隐藏方法 平时我们布局时候,有的文字内容多了会超过溢出我们限制的高度,有的图片会撑破DIV,让网页错位变乱。 这样我们就需要解决如何使用CSS来超出设置CSS宽度和CSS高度的内容自动隐藏掉,又不撑破DIV布局。 特别是在IE6,如果内容超出对象高度和宽度承载,将会被撑破增高,这个时候我们可以利用以下解决方...

JS实现整个DIV里的字号整体放大或缩小

JS实现对DIV里内容的字体方法或缩小 html代码 只写主要代码,样式可以自己写 <div class="content_sms"> 这是需要放大或缩小的内容 </div> <!--放大缩小按钮--> <div id= "bigFontSize">放大 </div> <div id...

dom 绑定数据

一、绑定/修改 .jQuery修改属性值,都是在内存中进行的,并不会修改 DOM 1. 对象绑定$(selector).data(name) $("#form").data("name") 2. dom 绑定 $.data(element,name, val); jQuery.data($("#form")[0], "testing", 123); 3....

拖放排序插件Sortable.js 兼容好及功能全个人觉得比dragula.js 好的多

经测试,Sortable.js 兼容好和使用方便都是比较不错的,特别手机端使用很棒 介绍 Sortable.js是一款轻量级的拖放排序列表的js插件(虽然体积小,但是功能很强大)下载地址:https://github.com/RubaXa/Sor...官方DEMO:https://sortablejs.github.io/Sortable 特点 支持触屏...