因为layer弹窗全屏自适应而发现window.onresize和$(window).resize的神奇小区别

在处理layer的自动全屏功能时,发现在关闭弹窗后重新打开

通过$.resize方法调用的layer全屏方法出错,layer会抛出一个找不到top的错误

因为layer的index传的是上一个弹窗的,因此发现了$.resize和onresize的一些小区别

	var box = window.top.layer.open({
            type: 2,
            area: ['100%', '100%'],
            success:function(layero,index){
            	window.top.layer.full(index);
        	}
    })
	$(window).resize(function(){
		window.top.layer.full(box) //关闭弹窗后重新打开报错!!!
	})
window.onresize

基本写法如下

window.onresize = function(){
	alert(1)
}
window.onresize = function(){
	alert(2)
}

如上写法,在页面窗口大小变化后,只会alert出2,也就是说onresize的方法只能声明一遍,再次声明会覆盖


$(window).resize

基本写法如下

$(window).resize(function(){
	alert(1)
})
$(window).resize(function(){
	alert(2)
})

如上写法,在页面窗口大小变化后,会先提示1然后会提示2,也就是说$.resize的方法能多次声明,并会把回调函数内部方法按声明顺序整理合并到一起,按顺序执行

既然是整合,并且先后执行,那作用域是不是也会混合到一起呢

$(window).resize(function(){
  const a=0
  alert(a)
})
$(window).resize(function(){
  const a=1
  alert(a)
})

如上写法,const并未报错,提示也正常,如果作用域整合的话,首先const会报错,如果用var也会因为变量自提升问题导致两次提示都是1,所以$.resize方法多次声明是顺序执行,作用域并不会混合


所以,layer的自适应全屏一定要用onresize声明,不然弹窗index变化后,因为$.resize方法顺序执行,layer找不到之前弹窗的index就会报错,但是如果其他地方也用了onresize,小心代码覆盖。

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值