zoukankan      html  css  js  c++  java
  • 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();
    

      直接铺上代码,简单易懂

  • 相关阅读:
    LeetCode 35 搜索插入位置
    LeetCode 69 x 的平方根
    LeetCode 61 旋转链表
    LeetCode 876 链表的中间结点
    LeetCode 142 环形链表 II
    LeetCode 206 反转链表
    LeetCode 237 删除链表中的节点
    LeetCode 83 删除排序链表中的重复元素
    元素的隐藏与显示与判断 js jquery aspx.cs
    判断对象是否为空 js与Jquery区别
  • 原文地址:https://www.cnblogs.com/wanglaowu/p/6547002.html
Copyright © 2011-2022 走看看