当在垂直方向滚动页面时就会触发 mousewheel 事件
detail与wheelDelta
判断鼠标滚轮滚动方向在各浏览器的属性不同
现在五大浏览器(IE、Opera、Safari、Firefox、Chrome)中Firefox 使用detail,其余四类使用wheelDelta;两者只在取值上不一致,代表含义一致
detail与wheelDelta只各取两个 值,detail取±3,wheelDelta取±120, 两值正负代表的方向相反
在非firefox浏览器中,滚轮向上滚动返回的数值是120,向下滚动返回-120
而在firefox浏览器中,滚轮向上滚动返回的数值是-3,向下滚动返回3
上下滚动检测
var scrollFunc = function (e) {
e = e || window.event;
if (e.wheelDelta) { //判断浏览器IE,谷歌滑轮事件
if (e.wheelDelta > 0) { //当滑轮向上滚动时
alert("滑轮向上滚动");
}
if (e.wheelDelta < 0) { //当滑轮向下滚动时
alert("滑轮向下滚动");
}
} else if (e.detail) { //Firefox滑轮事件
if (e.detail< 0) { //当滑轮向上滚动时
alert("滑轮向上滚动");
}
if (e.detail> 0) { //当滑轮向下滚动时
alert("滑轮向下滚动");
}
}
}
//给页面绑定滑轮滚动事件
//火狐使用DOMMouseScroll绑定鼠标滚动
document.addEventListener('DOMMouseScroll', scrollFunc, false);
//其他浏览器用mousewheel绑定
document.onmousewheel = scrollFunc;
获取滚动方向后可以实现某元素的 下滚隐藏 / 上滚显示
使用js改变css:
document.getElementById(id).style.property = new style
可以在上下滚动时修改display
或visible
(根据实际布局)
document.getElementById(id).style.display = none;
//document.getElementById(id).style.visibility = hidden;
隐藏导航栏例子
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
body {
margin: 0;
height: 200vh;
background-color: darkcyan;
}
div#nav {
position: fixed;
width: 100vw;
height: 40px;
background-color: blanchedalmond;
margin: 0 auto;
}
</style>
</head>
<body>
<div id="nav"></div>
<script>
var scrollFunc = function (e) {
let nav = document.getElementById('nav');
e = e || window.event;
if (e.wheelDelta) { //判断浏览器IE,谷歌滑轮事件
if (e.wheelDelta > 0) { //当滑轮向上滚动时
nav.style.position = "fixed";
}
if (e.wheelDelta < 0) { //当滑轮向下滚动时
nav.style.position = "absolute";
}
} else if (e.detail) { //Firefox滑轮事件
if (e.detail < 0) { //当滑轮向上滚动时
nav.style.position = "fixed";
}
if (e.detail > 0) { //当滑轮向下滚动时
nav.style.position = "absolute";
}
}
}
document.addEventListener('DOMMouseScroll', scrollFunc, false);
document.onmousewheel = scrollFunc;
</script>
</body>
</html>
此demo更改导航栏的position值,实现不在首页时上滚也能显示导航栏(利用fixed定位)