一、html代码
<div class="box"...>
二、css样式
<style>
* {
margin: 0;
padding: 0;
}
.box {
margin: 50px auto;
border: 2px solid skyblue;
height: 500px;
width: 500px;
position: relative;
overflow: hidden;
}
.bar {
position: absolute;
height: 500px;
width: 20px;
right: 0;
top: 0;
background-color: gray;
}
.content {
padding: 20px;
position: absolute;
}
.slideBar {
height: 60px;
width: 20px;
background-color: blue;
position: absolute;
top: 0;
right: 0;
}
</style>
三、开始写js
1、首先获取界面元素
var box = document.querySelector('.box');
var content = document.querySelector('.content');
var bar = document.querySelector('.bar');
var slideBar = document.querySelector('.slideBar');
2、设置滚动条的高度
①计算整个内容的高度与显示屏高度的比例
var rate = content.clientHeight / box.clientHeight;
②根据比例的关系设置滚动条的高度
var hight = bar.clientHeight / rate; slideBar.style.height = hight + 'px';
设置开关判断是否可以移动
var flag = false;
3、鼠标按下事件绑定给滚动条
var delY = 0;
slideBar.onmousedown = function () {
flag = true;
delY = event.clientY - slideBar.offsetTop;
//取消节点默认行为
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
}
};
/* 改变距离 */
var y = 0;
function changeDis() {
/* 范围校验 */
if (y < 0) {
y = 0;
}
if (y > bar.clientHeight - slideBar.clientHeight) {
y = bar.clientHeight - slideBar.clientHeight;
}
slideBar.style.top = y + 'px';
content.style.top = -y * rate + 'px';
}
4、鼠标移动事件绑定给滚动背景box
box.onmousemove = function () {
if (flag) {
y = event.clientY - delY;
changeDis();
}
};
5、鼠标抬起事件可以绑定给document
document.onmouseup = function () {
flag = false;
};
6、给box绑定滚轮事件
function wheelScroll(event) {
console.log('11111111111111111');
//向上滚动时 输出1 向下滚动时输出-1
event = event || window.event;
console.log(event);
//取消节点默认行为 box滑动 外层的body也会滑动
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
}
//判断浏览器的类型
var dircetion = 0;
if (event.wheelDelta) {
dircetion = event.wheelDelta > 0 ? 1 : -1;
} else {
dircetion = event.detail < 0 ? 1 : -1;
}
//鼠标滚动距离的累加
y += -dircetion * 10;
console.log(y);
/*
范围校验
*/
changeDis();
}
box.onmousewheel = wheelScroll;
try {
box.addEventListener('DOMMouseScroll', wheelScroll);
} catch (e) {
// console.log(e);
}
效果图: