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();
直接铺上代码,简单易懂
js制作列表滚动(有滚动条)的更多相关文章
- 用 Stellar.js 制作视差滚动效果
参考 http://doc.bropaul.com/Stellar.js/docs/ https://github.com/markdalgleish/stellar.js#download http ...
- js 实现文字列表滚动效果
今天要实现抽奖名单在首页滚动展示的效果,就用js写了一个,代码如下: html代码: <style type="text/css"> *{margin:;padding ...
- 推荐几款制作网页滚动动画的 JavaScript 库
这里集合了几款很棒的制作网页滚动动画的 JavaScript 库和插件.它们中,有的可以帮助你在页面滚动的时候添加动感的元素动画,有的则是实现目前非常流行的全屏页面切换动画.相信借助这些插件,你也可以 ...
- h5页面列表滚动加载数据
h5列表滚动加载数据很常见,以下分享下今天做的案例: 前言 这个效果实现需要知道三个参数 1. scrollTop -- 滚动条距离顶部的高度 2. scrollHeight -- 当前页面的总高度( ...
- js鼠标滚轮滚动图片切换效果
效果体验网址:http://keleyi.com/keleyi/phtml/image/12.htm HTML文件代码: <!DOCTYPE html PUBLIC "-//W3C// ...
- JQuery实现页面企业广告图片切换和新闻列表滚动效果
最近用到一个页面上图片左右切换和新闻列表滚动呈现的效果,整理如下: 前段代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit ...
- masonry结合json 制作无限滚动的瀑布流
做前端这行的 能直接贴代码就直接贴代码了,不用多说什么别的 效果需要引入jquery和jquery.masonry.min.js这两个JS JS代码如下: $(document).ready(func ...
- 用JS制作一个信息管理平台完整版
前 言 JRedu 在之前的文章中,介绍了如何用JS制作一个实用的信息管理平台. 但是那样的平台功能过于简陋了,我们今天来继续完善一下. 首先我们回顾一下之前的内容. 1.JSON的基础知识 ...
- JS平滑无缝滚动实现———实现首页广告自动滚动效果(附实例)
本文我们实现纯JS方式的滚动广告效果. 先show一下成品: 首先是网页样式: 1. #demo { 2. background: #FFF; 3. overflow:hidden; 4. borde ...
随机推荐
- uva211 回溯
大致题意:每个多米诺骨牌可能横着,也可能竖着,请你判断有哪些合法的摆放方式. 这题的dfs需要注意一下,不能以某个点直接开始延伸,如果这样延伸可能会无法到达终点(也就是遍历全图).我的dfs方法就是枚 ...
- A.Alyona and copybooks
这题考查思维的全面性. 一开始我直接分类推公式,余数不同分类讨论. AC代码: #include<cstdio> #include<algorithm> using names ...
- Activity的生命周期& 启动模式
1.Activity的生命周期 生命周期这个事情,是android工程师最基础的知识,所以今天要讲的是一些不一样的东西. 1.1 OnStart,OnResume,OnPause,OnStop 他们的 ...
- R用户的福音︱TensorFlow:TensorFlow的R接口
------------------------------------------------------------ Matt︱R语言调用深度学习架构系列引文 R语言︱H2o深度学习的一些R语言实 ...
- dm642的视频口输出
void VP1_EDMA(int displayMode,unsigned int w,unsigned int h) { unsigned int i=0,k=0; EDMA_Hand ...
- CWnd *和HWnd转换
CWnd *和HWnd转换 CWnd*得到HWnd CWnd wnd; HWND hWnd; hWnd = wnd.m_hWnd; // or ...
- FusionCharts饼图中label值太长怎么解决
FusionCharts饼图中label值太长怎么解决 1.使用hoverText属性 <?xml version="1.0" encoding="UTF-8&qu ...
- 利用ffmpeg将H264流 解码为RGB
利用H264解码分为几个步骤: 注意一点在添加头文件的时候要添加extern "C",不然会出现错误 [cpp] view plaincopy extern "C&quo ...
- Linux显示以时间生升序显示文件
Linux显示以时间生升序显示文件 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ls -lnt 总用量 56 -rw-rw-r-- 1 1000 1000 ...
- 对ajax回调函数的研究
1.1开发中遇到的问题 最近开发中我和同事都碰到这样的问题,我们使用jQuery的ajax方法做服务端的校验,在success方法里将验证结果存储到一个js的公共变量或者是页面里的隐藏域,接下来的代码 ...