//  开始这样写,不执行
window.onresize = function() {
console.log('窗口发生变化')
} // 改成window监听事件
window.addEventListener('resize', function() {
console.log('窗口发生变化')
})

onresize的定义方式

一、直接在html中定义

如<body onresize="doResize()"/>

二、直接给onresize赋值

可以给window和body的onresize赋值

如window.onresize=function(){},document.body.onresize=function(){}

三、使用事件监听

只对window有作用

如window.addEventListener("resize",fn);

说明:

1、直接给onresize赋值会覆盖在html中定义。

2、直接给onresize赋值,window,body只有一个起作用,后定义的会覆盖先定义的

3、事件监听只对window有效,可以其它方式同时触发。

 .浏览器尺寸变化响应事件 :

 Js代码  收藏代码
window.onresize = function(){....} 获取变更后参数: Js代码 收藏代码
// 获取到的是变更后的页面宽度
var currentWidth = document.body.clientWidth;
这里需要注意的是,onresize响应事件处理中,因为已经刷新页面,所以获取到的页面尺寸参数是变更后的参数。 如果需要使用到变更之前的参数,需要建一个全局变量保存之前的参数(并且记得在onresize事件中刷新这个全局变量保存新的参数值)。
 .谷歌浏览器中  window.onresize 事件默认会执行两次(偶尔也会只执行一次,网上大部分说法认为这是Chrome的bug)。 

   解决方法:(为resize设置一个延迟)一般来说推荐新建一个标志位 延时复位控制它不让它自己执行第二次,代码如下:

 Js代码  收藏代码
var firstOnResizeFire = true;//谷歌浏览器onresize事件会执行2次,这里加个标志位控制 window.onresize = function()
{
if (firstOnResizeFire) {
NfLayout.tabScrollerMenuAdjust(homePageWidth);
firstOnResizeFire = false; //0.5秒之后将标志位重置(Chrome的window.onresize默认执行两次)
setTimeout(function() {
firstOnResizeFire = true;
}, );
} homePageWidth = document.body.clientWidth; //重新保存一下新宽度
} 例子: 监听屏幕的改变: Html代码 收藏代码
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, width=device-width">
<meta content="telephone=no" name="format-detection">
</head>
<body>
<label id="show"></label>
<script>
window.onresize = adjuest;
adjuest();
function adjuest(){
var label = document.getElementById("show");
label.innerHTML = "width = "+window.innerWidth+";height="+window.innerHeight;
}
</script>
</body>
</html>

效果:

  .监听div大小的改变

 Html代码  收藏代码
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div id="show_div" style="background-color: lightblue;width: 100%;height: 300px;"></div>
<label id="show"></label>
<script>
window.onresize = adjuest;
adjuest();
function adjuest(){
var label = document.getElementById("show");
var divCon = document.getElementById("show_div");
label.innerHTML = "width = "+divCon.offsetWidth+";height="+divCon.offsetHeight;
}
</script>
</body>
</html>

效果:

vue 中监听窗口发生变化,触发监听事件, window.onresize && window.addEventListener('resize',fn) ,window.onresize无效的处理方式的更多相关文章

  1. 【转】Vue中mintui的field实现blur和focus事件

    首先上代码说总结: <mt-field label="卡号" v-model="card.cardNo" @blur.native.capture=&qu ...

  2. 小程序的数据监听 用法和vue中的watch一样====使用通配符监听所有自数据字段的变化

    使用通配符监听所有自数据字段的变化

  3. Python窗口学习之监听窗口变化触发函数

    在窗口大小发生变化后,往往组件也需要调整 代码: #空间适应屏幕 def window_resiz(self,event=None): print(window.winfo_height()) pri ...

  4. vue中watch和computed为什么能监听到数据的改变以及不同之处

    先来个流程图,水平有限,凑活看吧-_-|| 首先在创建一个Vue应用时: var app = new Vue({ el: '#app', data: { message: 'Hello Vue!' } ...

  5. vue中eventbus被多次触发(vue中使用eventbus踩过的坑)【bus.$on事件被多次绑定】

    问题描述:只要页面没有强制刷新,存在组件切换,bus.$on方法会被多次绑定,造成事件多次触发   触发bus.$on中绑定的方法.png   bus.$on多次绑定.png 解决办法:在每次调用方法 ...

  6. Vue中父组件使用子组件的emit事件,获取emit事件传出的值并添加父组件额外的参数进行操作

    需求是这样的,需要输入这样一个列表的数据,可以手动添加行,每一行中客户编号跟客户姓名是自动关联的,就是说选取了客户姓名之后,客户编号是自动填充的,客户姓名是一个独立的组件,每一个下拉项都是一个大的对象 ...

  7. vue中一个dom元素可以绑定多个事件?

    其实这个问题有多个解决方法的  这里提出两点 第一种 第二种 现在dom上绑定一个 然后在你的methods中直接调用 如果要传参数  这时候千万别忘记 原创 如需转载注明出处 谢谢

  8. 父窗口jquery触发iframe按钮事件(转载)

    原文地址: http://blog.csdn.net/muziduoxi/article/details/11123923 <script type="text/javascript& ...

  9. vue中进行窗口变化的监听

    今天vue项目中用到的元素的宽度依赖与窗口的宽度,所以在进行宽度设置的时候涉及到窗口的变化,因为元素的宽度要随着窗口变化 分成几个步骤来实现这一过程 1.首先元素的宽度依赖与窗口的宽度,就需要有接受窗 ...

随机推荐

  1. 深入理解java:4.3.1. 框架编程之MyBatis---SQL语句执行的完整流程

    Mybatis的整个的执行流程.如下图所示: 原理详解: MyBatis应用程序根据XML配置文件创建SqlSessionFactory, SqlSessionFactory在根据配置,配置来源于两个 ...

  2. java application.properties 密码加密

    main方法 public static void main(String[] args) { BasicTextEncryptor textEncryptor = new BasicTextEncr ...

  3. python 爬虫 基于requests模块的get请求

    需求:爬取搜狗首页的页面数据 import requests # 1.指定url url = 'https://www.sogou.com/' # 2.发起get请求:get方法会返回请求成功的响应对 ...

  4. PTA(Basic Level)1026.程序运行时间

    要获得一个 C 语言程序的运行时间,常用的方法是调用头文件 time.h,其中提供了 clock() 函数,可以捕捉从程序开始运行到 clock() 被调用时所耗费的时间.这个时间单位是 clock ...

  5. 【转贴】使用sar进行性能分析

    使用sar进行性能分析 https://www.cnblogs.com/bangerlee/articles/2545747.html 很早之前就看过 但是自己一直没用过.. 2012-06-12 0 ...

  6. IO库中的宽字符语言

    wchar_t是C/C++的字符类型,是一种扩展的存储方式.wchar_t类型主要用在国际化程序的实现中,但它不等同于uni编码.uni编码的字符一般以wchar_t类型存. IO库为了支持宽字符语言 ...

  7. 用纯 CSS 创作一个在容器中反弹的小球

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/jKVbyE 可交互视频教 ...

  8. Communication between C++ and Javascript in Qt WebEngine(转载)

    Communication between C++ and Javascript in Qt WebEngine admin January 31, 2018 0 As Qt WebKit is re ...

  9. 冒泡排序(java可直接跑,算法思想等小儿科不多说直接上代码)

    import java.util.Arrays; /** *冒泡排序:时间复杂度O(N^2),空间复杂度O(1),稳定的排序 * 每趟确定一个元素的位置,所以需要arr.length趟排序, */pu ...

  10. 安装Mybatis插件

    http://blog.csdn.net/nextyu/article/details/69225004