function mouseWheel(obj, fn){
var ff = navigator.userAgent.indexOf("Firefox");
if (ff != -1) {
obj.addEventListener("DOMMouseScroll", wheel, false);
}else{
obj.onmousewheel = wheel;
}
function wheel(event){
var event = event || window.event;
var down = true; //判斷是否向下滾動
if (event.preventDefault){ //清除默認事件
event.preventDefault();
}
if (event.detail){ //FF
down = event.detail < 0;
}else{
down = event.wheelDelta > 0;
}
fn.apply(obj,[event, down]);
return false;
}
}
function scrollFn() {
var wrap = document.querySelector(".panelFather");
var middle = document.querySelector(".panelSons");
var sliderWrap = document.querySelector("#sliderWrap");
var slider = document.querySelector("#slider");
var y = 0;
//設置滾動按鈕高度
function scrollHeight() {
var scale =wrap.clientHeight/880;
var height = sliderWrap.offsetHeight * scale;
if (height < 50){
height = 50;
}
slider.style.height = height + "px";
}
scrollHeight();
var contMaxHeight = 880 - wrap.clientHeight;
var sliderMaxHeight = sliderWrap.offsetHeight - slider.clientHeight;
//滾動函數
function move() {
if (y <= 0) { //限制滾動范圍
y = 0;
}else if (y >= sliderMaxHeight) {
y = sliderMaxHeight;
}
var moveScale = y / sliderMaxHeight;
slider.style.top = y + "px";
middle.style.top = - contMaxHeight * moveScale + "px";
}
//滾動按鈕拖拽
slider.onmousedown = function (event){
var event = event || window.event;
var disY = event.clientY - slider.offsetTop;
document.onmousemove = function (event){
var event = event || window.event;
y = event.clientY - disY;
move();
}
document.onmouseup = function (){
document.onmousemove = null;
}
return false;
}
//自定義滾動距離
mouseWheel(wrap, function (event, down){
if (down){
y -= 40;
}else{
y += 40;
}
move();
});
//鍵盤上下鍵控制上下滾動
document.onkeydown = function (event){
var event = event || window.event;
switch (event.keyCode){
case 38:
y -= 5;
break;
case 40:
y += 5;
break;
}
move();
}
//點擊滾動條,跳到相應位置
sliderWrap.onmousedown = function (event){
var event = event || window.event;
//計算移動的距離
/*
鼠標垂直坐標 - 最外層元素上間距 = 鼠標移動的距離 y值是鼠標移動的距離再減去滾動按鈕高度的一半,目的使滾動按鈕高度的中心位置對准鼠標坐標
*/
y = event.clientY - wrap.offsetTop - slider.offsetHeight / 2;
move();
}
}
scrollFn();
直接鋪上代碼,簡單易懂
