js制作列表滚动(有滚动条)

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();

  直接铺上代码,简单易懂

posted @ 2017-03-14 10:03  王老五Plus  阅读(2542)  评论(0编辑  收藏  举报