vue监听页面大小变化重新刷新布局
2019-01-24 14:53
806 查看
在项目中由于某些div元素在布局的时候需要初始化宽高,因为当浏览器缩小屏幕的时候需要重新刷新页面视图。
分析思路:
1、在store中创建state,用于保存当前浏览器的宽、高值。
2、在mounted中,使用window.onresize,监听页面大小是否发生变化。若发生变化则,则this.$store.commit修改store中的的宽、高;
3、在computed中获取到宽高的值。由于页面宽或者高其中一个变化都需要重新进行页面视图刷新,因此在computed中进行宽高合并,只需要监听合并后的值widthOrHight既可。
4、在watch中监听widthOrHight,若widthOrHight发生变化,则重新初始化div的宽高。
另外,由于子组件中图表初始化的宽高是父组件的宽高,在父组件中页面视图重新发生了变化,需要子组件重新渲染视图,因此只需要给子组件定义一个key值,然后修改key值则子组件会重新初始化。
1 <template> 2 <div> 3 <!--省略DOM代码--> 4 <videoDoorCtrl style="height: 90%;width: 100%;background-color: rgba(2, 31, 95, 0.3);" :key="compKey.videoDoorCtrl"></videoDoorCtrl><!--里面是echarts图表--> 5 <wifiCollect style="height: 90%;width: 100%;background-color: rgba(2, 31, 95, 0.3);" :key="compKey.wifiCollect"></wifiCollect><!--里面是echarts图表--> 6 </div> 7 </template> 8 9 <script> 10 import { mapGetters } from 'vuex'; 11 import videoDoorCtrl from './components/videoDoorCtrl'; // 视频门禁信息 12 import wifiCollect from './components/wifiCollect'; // wifi数据采集 13 14 export default { 15 name: "deviceQueryEle", 16 components:{ 17 videoDoorCtrl, 18 wifiCollect 19 }, 20 21 data() { 22 return { 23 compKey:{ 24 videoDoorCtrl:3, 25 wifiCollect:6, 26 }, 27 } 28 }, 29 mounted() { 30 window.onresize = () => { 31 return (() => { 32 this.$store.commit('bodyWidthMut',document.body.clientWidth); 33 this.$store.commit('bodyHightMut',document.body.clientHeight); 34 })() 35 } 36 }, 37 computed: { 38 ...mapGetters(['bodyWidth','bodyHeight']), 39 widthOrHight(){ // 合并宽高,只需要监听一个值变化既可 40 return [this.bodyWidth,this.bodyHeight] 41 } 42 }, 43 watch: { 44 widthOrHight(){ // 监听页面宽度或者高度 45 let that = this; 46 setTimeout(function () { 47 that.initPage(); // 监听到页面size发生变化,则重新初始化div的宽高 48 const index = 10;//随便定义一个随机数 49 that.compKey.videoDoorCtrl =that.compKey.videoDoorCtrl*1+index*1; // 需要刷新子组件的数据,只需要改变子组件的定义的key值 50 that.compKey.wifiCollect = that.compKey.wifiCollect*1+index*1; // 需要刷新子组件的数据,只需要改变子组件的定义的key值 51 }, 400) 52 } 53 }, 54 computed: {}, 55 beforeCreate() {}, 56 created() {}, 57 methods: { 58 mapFun(param){ 59 // …… 60 }, 61 initPage() { 62 let pageHig = $(window).height(); 63 let pageWidth = $(window).width(); 64 let pageHeaderHig = 60; 65 let pageMainHig = pageHig - pageHeaderHig; //得出地图部分的区域 66 $("#headerID").height(pageHeaderHig); 67 $("#mainID").height(pageMainHig); 68 $("#mapLeftID").height(pageMainHig - 80); 69 $("#mapLeftID").width(pageWidth * 0.23); 70 $("#mapRightID").height(pageMainHig - 80); 71 $("#mapRightID").width(pageWidth * 0.23); 72 mapFun(this.mapParam); // 初始化地图 73 }, 74 } 75 } 76 </script> 77 78 <style rel="stylesheet/scss" lang="scss" scoped> 79 80 </style>
相关文章推荐
- Angular2监听页面大小变化的解决方法
- 哪种布局管理器的容器中的组件大小不随容器大小的变化而改变 .java 高手请进 容器被重新设置大小后
- rem布局,系统字体大小发生变化是,页面样式错乱的问题
- 解决vue 路由变化页面数据不刷新的问题
- vue路由名字不变,仅query发生变化,点击返回页面不重新渲染
- Angular 4_监听页面大小变化
- EF更新,数据库值变化,前台页面并不变化,刷新也不变化,重新运行程序则变化----开发中遇到的问题(已解决)
- Bootstrap3基础 栅格系统 页面布局随浏览器大小的变化而变化
- vue 刷新之后 嵌套路由不变 重新渲染页面的方法
- angular2监听页面大小变化
- 在Asp.net 2.0 中禁用页面缓存解决页面刷新(重新加载数据)的问题!
- vue.js 1.x与2.0中js实时监听input值的变化
- 对 键盘 事件 监听NSNotification 处理相应页面 变化UIKeyboardAnimation
- vue单页应用在页面刷新时保留状态数据的方法
- vue 后台数据获取与组件渲染、页面刷新数据消失的问题小结
- Angular URL地址参数改变,视图不更新的解决办法(监听URL变化,重新加载数据方法)
- vue项目刷新当前页面
- 如何用js监听浏览器页面的关闭/刷新事件
- WPF如何让控件随着窗口大小而变化,布局不乱