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 ...
随机推荐
- hihoCoder1330 数组重排
题意 小Hi想知道,如果他每次都按照一种固定的顺序重排数组,那么最少经过几次重排之后数组会恢复初始的顺序? 具体来讲,给定一个1 - N 的排列 P,小Hi每次重排都是把第 i 个元素放到第 Pi个位 ...
- SSRF漏洞总结
SSRF漏洞:(服务端请求伪造)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞.一般情况下,SSRF攻击的目标是从外网无法访问的内部系统.(正是因为它是由服务端发起的,所以它能够请求到与它相连而 ...
- float 与 display:inline-block
float: 1.会导致高度塌陷 <style type="text/css"> li{ float:left; height:200px; width:200px; ...
- R实战 第三篇:数据处理
在实际分析数据之前,必须对数据进行清理和转化,使数据符合相应的格式,提高数据的质量.数据处理通常包括增加新的变量.处理缺失值.类型转换.数据排序.数据集的合并和获取子集等. 一,增加新的变量 通常需要 ...
- css进行中打点效果
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- Linux如何查找处理文件名后包含空格的文件
Linux如何查找处理文件名后包含空格的文件 当Linux下文件名中出现空格这类特殊情况话,如何查找或确认那些文件名后有空格呢? 又怎么批量替换处理掉这些空格呢? 方法1: 输入文件名后使用Tab ...
- 2.2 HOST主桥
本节以MPC8548处理器为例说明HOST主桥在PowerPC处理器中的实现机制,并简要介绍x86处理器系统使用的HOST主桥. MPC8548处理器是Freescale基于E500 V2内核的一个P ...
- Sparklyr与Docker的推荐系统实战
作者:Harry Zhu 链接:https://zhuanlan.zhihu.com/p/21574497 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 相关内容: ...
- AM3358--Uboot支持LCD输出1024*768
1. uboot/include/lcd/tq3358_fb.h #define TFT240320 1 #define TFT320240 2 #define TFT480272 3//T43(天嵌 ...
- hibernate(二)主键生成策略
hibernate主键生成策略主要指的是在实体类orm的配置 <id name=""> <generator class="native"&g ...