这篇文章是在测试网站的视差动效部分(详情可以看这里),在safari上测试的时候,完全无法实现滚动
在一行一行输出测试的时候,最终发现了一个大问题。。
在safari中$('html').scrollTop()
部分输出一直为0
这就导致了代码根本无法检测滚动距离
在查资料之后才发现,原来这个部分在safari中需要使用$('body').scrollTop()
进行读取
然后在网上有着一种判断浏览器的方法:$.browser.safari
,对于这种方法我并没有实验成功
于是找了各种资料都无法实现这个判断
我测试了一下,确认了在chrome(win)下其读取到的$('body').scrollTop()
值一直为0,而在safari下,其读取到的$('html').scrollTop()
值为0。
因此我想到,直接将两个相加不就好了,不做判断,反正两个正好是互补的(我好聪明 bushi
文件scroll.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| var totalPicNum = 64; var movePX = 600; function scrollEvent(e) { - const scrollTop = $('html').scrollTop(); + const scrollTop = $('html').scrollTop()+$('body').scrollTop(); // Chrome读取html, safari读取body 两者另一个都是0,所以直接相加 let newAsset = ''; if (scrollTop > startOpen && scrollTop < startOpen + movePX) { console.log("scrollTop: " + scrollTop); console.log("startOpen: " + startOpen); console.log(scrollTop > startOpen && scrollTop < startOpen + movePX); let offset = Math.floor((scrollTop - startOpen) / movePX * totalPicNum); console.log("offset: " + offset); if (offset < 1) { offset = 1; } else if (offset > totalPicNum) { offset = totalPicNum; } if (offset < 10) { newAsset = `large_000${offset}`; } else if (offset < 100) { newAsset = `large_00${offset}`; } else { newAsset = `large_0${offset}`; } $('#pic1').attr('src', '/source/img/roll/' + newAsset + '.jpg'); } } startOpen = $('#imgWrapper').offset().top + (window.innerHeight / 2 + $('#picBox').height() / 2); document.addEventListener('scroll', scrollEvent, true);
|