在处理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,小心代码覆盖。