vue监听页面大小变化重新刷新布局
在项目中由于某些div元素在布局的时候需要初始化宽高,因为当浏览器缩小屏幕的时候需要重新刷新页面视图。
分析思路:
1、在store中创建state,用于保存当前浏览器的宽、高值。
2、在mounted中,使用window.onresize,监听页面大小是否发生变化。若发生变化则,则this.$store.commit修改store中的的宽、高;
3、在computed中获取到宽高的值。由于页面宽或者高其中一个变化都需要重新进行页面视图刷新,因此在computed中进行宽高合并,只需要监听合并后的值widthOrHight既可。
4、在watch中监听widthOrHight,若widthOrHight发生变化,则重新初始化div的宽高。
另外,由于子组件中图表初始化的宽高是父组件的宽高,在父组件中页面视图重新发生了变化,需要子组件重新渲染视图,因此只需要给子组件定义一个key值,然后修改key值则子组件会重新初始化。
<template>
<div>
<!--省略DOM代码-->
<videoDoorCtrl style="height: 90%;width: 100%;background-color: rgba(2, 31, 95, 0.3);" :key="compKey.videoDoorCtrl"></videoDoorCtrl><!--里面是echarts图表-->
<wifiCollect style="height: 90%;width: 100%;background-color: rgba(2, 31, 95, 0.3);" :key="compKey.wifiCollect"></wifiCollect><!--里面是echarts图表-->
</div>
</template> <script>
import { mapGetters } from 'vuex';
import videoDoorCtrl from './components/videoDoorCtrl'; // 视频门禁信息
import wifiCollect from './components/wifiCollect'; // wifi数据采集 export default {
name: "deviceQueryEle",
components:{
videoDoorCtrl,
wifiCollect
}, data() {
return {
compKey:{
videoDoorCtrl:3,
wifiCollect:6,
},
}
},
mounted() {
window.onresize = () => {
return (() => {
this.$store.commit('bodyWidthMut',document.body.clientWidth);
this.$store.commit('bodyHightMut',document.body.clientHeight);
})()
}
},
computed: {
...mapGetters(['bodyWidth','bodyHeight']),
widthOrHight(){ // 合并宽高,只需要监听一个值变化既可
return [this.bodyWidth,this.bodyHeight]
}
},
watch: {
widthOrHight(){ // 监听页面宽度或者高度
let that = this;
setTimeout(function () {
that.initPage(); // 监听到页面size发生变化,则重新初始化div的宽高
const index = 10;//随便定义一个随机数
that.compKey.videoDoorCtrl =that.compKey.videoDoorCtrl*1+index*1; // 需要刷新子组件的数据,只需要改变子组件的定义的key值
that.compKey.wifiCollect = that.compKey.wifiCollect*1+index*1; // 需要刷新子组件的数据,只需要改变子组件的定义的key值
}, 400)
}
},
computed: {},
beforeCreate() {},
created() {},
methods: {
mapFun(param){
// ……
},
initPage() {
let pageHig = $(window).height();
let pageWidth = $(window).width();
let pageHeaderHig = 60;
let pageMainHig = pageHig - pageHeaderHig; //得出地图部分的区域
$("#headerID").height(pageHeaderHig);
$("#mainID").height(pageMainHig);
$("#mapLeftID").height(pageMainHig - 80);
$("#mapLeftID").width(pageWidth * 0.23);
$("#mapRightID").height(pageMainHig - 80);
$("#mapRightID").width(pageWidth * 0.23);
mapFun(this.mapParam); // 初始化地图
},
}
}
</script> <style rel="stylesheet/scss" lang="scss" scoped> </style>
vue监听页面大小变化重新刷新布局的更多相关文章
- vue 监听页面宽度变化 和 键盘事件
vue 监听页面窗口大小 export default { name: 'Full', components: { Header, Siderbar }, data () { return { scr ...
- angular2监听页面大小变化
一.现象 全屏页面中的图表,在很多的时候需要 resize 一把,以适应页面的大小变化 二.解决 1.引入 : import { Observable } from 'rxjs'; 2.使用(在ngO ...
- Vue监听属性的变化
监听属性的变化watch: { counter: function (nval, oval) { alert('计数器值的变化 :' + oval + ' 变为 ' + nval + '!') }}
- vue监听路由的变化,跳转到同一个页面时,Url改变但视图未重新加载问题
引入:https://q.cnblogs.com/q/88214/ 解决方法: 添加路由监听,路由改变时执行监听方法 methods:{ fetchData(){ console.log('路由发送变 ...
- vue监听浏览器窗口大小变化
首先,页面初始化mounted的时候,通过 document.body.clientWidth 和 document.body.clientHeight 来获取到浏览器的宽和高,然后通过 window ...
- vue监听页面中的某个div的滚动事件,并判断滚动的位置
在开发中常常会遇到这样一个vue页面,页面分为左右两部分,左边是目录树,右边是一个类名为xq-box的div,在xq-box中多个div上下并列布局,每个div中的内容就对应着左边目录树中的相应节点, ...
- vue 监听state 任意值变化、监听mutations actions
// store.watch((state) => state.count + 1, (newCount) => { // console.log(' 监听') // }) // stor ...
- vue同一个路由,但参数发生变化,页面不刷新的问题(vue监听路由参数变化重新渲染页面)
watch: { $route: function(newVal, oldVal) { console.log(oldVal); //oldVa 上一次url console.log(newVal); ...
- Vue - 监听页面刷新和关闭
一,在 created中 注册 页面刷新和关闭事件 created() { window.addEventListener('beforeunload', e => this.test(e)) ...
随机推荐
- test框架搭建
http://blog.csdn.net/huilan_same https://github.com/huilansame/Test_framework
- java中statickeyword
1.static变量 依照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:还有一种是没有被static修饰的变量,叫实例变量. 两者的差别是: 对于静态变量 ...
- Linux系统编程——特殊进程之僵尸进程
僵尸进程(Zombie Process) 进程已执行结束,但进程的占用的资源未被回收.这种进程称为僵尸进程. 在每一个进程退出的时候,内核释放该进程全部的资源.包含打开的文件.占用的内存等. 可是仍然 ...
- luogu1726 上白泽慧音
题目大意 求一个有向图含节点数最多且结点编号从小到大排列字典序最小的强连通分量. 注意事项 HDU1269那道题题面.数据太弱,在这道题上把我害惨了... Dfs点u时,如果与u相连的一个点v有Dfs ...
- velocity.js 中文文档 (教程)
velocity.js 是一个简单易用.高性能.功能丰富的轻量级JS动画库.它能和 jQuery 完美协作,并和$.animate()有相同的 API, 但它不依赖 jQuery,可单独使用. Vel ...
- CNN tensorflow text classification CNN文本分类的例子
from:http://deeplearning.lipingyang.org/tensorflow-examples-text/ TensorFlow examples (text-based) T ...
- hdu1533 费用流模板
Going Home Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- 90.商城登录页面Extjs
1. Ext.onReady(function(){ Ext.BLANK_IMAGE_URL = "Ext/resources/images/default/s.gif"; Ext ...
- DNS(域名系统)
DNS(Domain Name System),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的Ip数串.通过主机名,最终得到该主机 ...
- 明解C语言
本文为阅读书籍<明解C语言-中级篇>所积累的知识点及编译书本代码时遇到的问题.部分对应代码在\Code_2018\BK_明解C语言目录下.每个代码内都含有程序功能.思路.疑惑点等内容,如有 ...