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

  直接铺上代码,简单易懂

js制作列表滚动(有滚动条)的更多相关文章

  1. 用 Stellar.js 制作视差滚动效果

    参考 http://doc.bropaul.com/Stellar.js/docs/ https://github.com/markdalgleish/stellar.js#download http ...

  2. js 实现文字列表滚动效果

    今天要实现抽奖名单在首页滚动展示的效果,就用js写了一个,代码如下: html代码: <style type="text/css"> *{margin:;padding ...

  3. 推荐几款制作网页滚动动画的 JavaScript 库

    这里集合了几款很棒的制作网页滚动动画的 JavaScript 库和插件.它们中,有的可以帮助你在页面滚动的时候添加动感的元素动画,有的则是实现目前非常流行的全屏页面切换动画.相信借助这些插件,你也可以 ...

  4. h5页面列表滚动加载数据

    h5列表滚动加载数据很常见,以下分享下今天做的案例: 前言 这个效果实现需要知道三个参数 1. scrollTop -- 滚动条距离顶部的高度 2. scrollHeight -- 当前页面的总高度( ...

  5. js鼠标滚轮滚动图片切换效果

    效果体验网址:http://keleyi.com/keleyi/phtml/image/12.htm HTML文件代码: <!DOCTYPE html PUBLIC "-//W3C// ...

  6. JQuery实现页面企业广告图片切换和新闻列表滚动效果

    最近用到一个页面上图片左右切换和新闻列表滚动呈现的效果,整理如下: 前段代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit ...

  7. masonry结合json 制作无限滚动的瀑布流

    做前端这行的 能直接贴代码就直接贴代码了,不用多说什么别的 效果需要引入jquery和jquery.masonry.min.js这两个JS JS代码如下: $(document).ready(func ...

  8. 用JS制作一个信息管理平台完整版

      前  言 JRedu 在之前的文章中,介绍了如何用JS制作一个实用的信息管理平台. 但是那样的平台功能过于简陋了,我们今天来继续完善一下. 首先我们回顾一下之前的内容.   1.JSON的基础知识 ...

  9. JS平滑无缝滚动实现———实现首页广告自动滚动效果(附实例)

    本文我们实现纯JS方式的滚动广告效果. 先show一下成品: 首先是网页样式: 1. #demo { 2. background: #FFF; 3. overflow:hidden; 4. borde ...

随机推荐

  1. mysql 学习心得3

    1 /0和 %0 都会显示null 2比较运算符大部分和c一样 ==在mysql是=  <>代表不等于 between 指定范围内 in指定几何 isnull 判断是否为null :is ...

  2. nyoj 1129 Salvation 模拟

    思路:每个坐标有四种状态,每个点对应的每种状态只能走一个方向,如果走到一个重复的状态说明根本不能走到终点,否则继续走即可. 坑点:有可能初始坐标四周都是墙壁,如果不判断下可能会陷入是死循环. 贴上测试 ...

  3. java的mac自动化-自动运行java程序

    本文旨在帮助读者介绍,如果一个测试工程师拿到了mac本,该如何在本地自动运行java代码 首先如图所示写下如下一段代码 package zlr;import org.junit.Test;public ...

  4. yaf插件类的使用

    yaf插件类的使用大小写敏感的. "插件名Plugin"为插件类的名字,这样会自动标志着这是一个插件. application.directory string 应用程序的目录,包 ...

  5. trigger click 和 click 的区别??

    trigger click 和 user click 有什么区别吗? 好像没有的.直到发现了这样一段代码. <button class="btn1">Button< ...

  6. 嵌入式Linux引导过程之1.6——Xloader的Xloader_Entry

    我们已经看完了XLOADER_ENTRY里调用的前两个标号的代码,分别是sys_init和ddr_init.对于一个嵌入式系统来说,这两 个部分的代码是在一开始就执行的,至少是在从bootrom里面的 ...

  7. 决策树之ID3、C4.5、C5.0等五大算法

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- C5.0决策树之ID3.C4.5.C5.0算法 ...

  8. Struts2实现文件上传(三)

    Struts2实现文件上传 配置文件web.xml <?xml version="1.0" encoding="UTF-8"?> <web-a ...

  9. 超链接a标签的属性target的可选值有哪些以及区别

    超链接a标签的属性target的可选值有哪些以及区别 1.<a target="_blank"></a> 2.<a target="_par ...

  10. dojo加载树报错

    1.错误描述    error loading undefined children.    TypeError:this._arrayOfTopLevelItems is undefied. 2.错 ...