原生js仿浏览器滚动条效果
作者:chang红达 发布时间:2024-04-10 16:09:33
标签:js,滚动条
效果图:
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>仿浏览器滚动条</title>
<style type="text/css">
*{margin: 0;padding: 0;}
#demo{width: 300px;height: 500px;border: 1px solid red;margin:100px;position:relative;overflow:hidden;}
p{padding:5px 20px 5px 5px;font-size:26px;position:relative;}
#scrll{width:18px;border-radius:18px;position:absolute;top:0;right:0;background:red;cursor:pointer;}
</style>
</head>
<body>
<div id="demo">
<p id="dp">我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容我是文字内容</p>
<div id="scrll"></div>
</div>
</body>
<script type="text/javascript">
(function(window){
function $(id){
return document.getElementById(id);
};
// 获取对象
var dp = $("dp"),demo = $("demo"),scrll = $("scrll");
// 获取dp的长度
var dpHeight = dp.offsetHeight;
// 获取demo的长度
var demoHeight = demo.offsetHeight;
// 根据比值计算scrll的长度
var scrllHeight = demoHeight * demoHeight / dpHeight ;
// 如果内容长度小于窗口长度,则滚动条不显示
if( dp.offsetHeight < demo.offsetHeight){
scrllHeight = 0;
};
scrll.style.height = scrllHeight + "px";
// 获取滚动条和内容移动距离的比例
var bilu = ( dp.offsetHeight - demo.offsetHeight ) / (demo.offsetHeight - scrll.offsetHeight);
// 滚动条滚动事件
scrll.onmousedown = function(event){
// event兼容性解决
// console.log(demo.offsetTop)
var event = event || window.event;
// 获取鼠标按下的页面坐标
// 滚动条滚动时只有top值改变,所有不需要获取pageX
var pageY = event.pageY || event.clientY + document.documentElement.scrollTop;
// 获取鼠标在scrll内的坐标
var scrllY = pageY - demo.offsetTop - scrll.offsetTop;
// 给document绑定鼠标移动事件
document.onmousemove = function(event){
var event = event || window.event;
// 获取鼠标移动时的坐标
var moveY = event.pageY || event.clientY + document.documentElement.scrollTop;
// 获取滚动条的移动坐标
var trueY = moveY - scrllY - demo.offsetTop ;
// 限制滚动条移动的范围
if( trueY < 0 ){
trueY = 0 ;
};
if( trueY > demo.offsetHeight - scrll.offsetHeight ){
trueY = demo.offsetHeight - scrll.offsetHeight;
};
scrll.style.top = trueY + "px";
//清除选中文字
window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
// 获取文字区域移动的距离
var dpY = trueY * bilu ;
dp.style.top = - dpY + "px";
}
};
// 鼠标抬起清除鼠标移动事件
document.onmouseup = function(){
document.onmousemove = null;
}
})(window)
</script>
</html>
来源:http://www.qdfuns.com/notes/38951/b7b68de899a5c4606a4a064b6af3e2ef.html


猜你喜欢
- update()方法添加键 - 值对到字典dict2。此函数不返回任何值。语法以下是update()方法的语法:dict.upd
- <%'该函数作用:按指定参数格式化显示时间。'numformat=1:将时间转化为yyyy-mm-dd h
- 本文介绍如果使用python汇总常用的图表,与Excel的点选操作相比,用python绘制图表显得比较比较繁琐,尤其提现在对原始数据的处理上
- 值类型和引用类型值类型:int、float、bool和string这些类型都属于值类型,使用这些类型的变量直接指向存在内存中的值,值类型的变
- 本节内容:1.前言2.相关概念3.Python中的默认编码4.Python2与Python3中对字符串的支持5.字符编码转换一、前言Pyth
- 目的: 找出路径坐在的所有python文件(.py结尾),返回列表。代码:def list_py(path = None): if path
- js 闭包(closure)是Javascript语言的一个难点,也是它的特色。闭包的作用:通过一系方法,将函数内部的变量(局部变量)转化为
- 一、前言前几天需要划分数据集,就写了一个小demo去完成这个任务。随机划分图片数据集任务描述:我的所有图片保存在同一个文件夹里,需要随机将图
- 本节主要介绍函数,但是函数是由操作组成的。那么就分为两部,一部分为操作一部分为函数。py世界中的操作。操作if:在学习任何一门语言中,关系i
- 主页上的鼠标是不是就只有箭头和小手两种模样呢?如果鼠标移到“帮助”等字样上时,形状就变成求助的问号;鼠标移到可能需要较长时间等待的超链接时,
- 如下所示: col = [] img = "test1" img1 = "test2" col.ap
- 如下所示:<span style="font-family: Arial, Helvetica, sans-serif;&q
- 背景最近有一个需求需要自定义一个多继承abc.ABC与django.contrib.admin.ModelAdmin两个父类的抽象子类,方便
- 摘要: 阐述一种全新的ASP模板引擎,实现代码(逻辑)层与HTML(表现)层的分离.这种模板实现方法避免了一般ASP模板加载模板文件(加载组
- 两个跳转语法第一个参数是请求路径,第二个参数是http状态码。c.Redirect("/login",400) &nbs
- SQL Server Sa用户相信大家都有一定的理解,下面就为您介绍SQL Server 2000身份验证模式的修改方法及SQL Serve
- 本文实例为大家分享了python使用itchat实现手机控制电脑的具体代码,供大家参考,具体内容如下1.准备材料首先电脑上需要安装了pyth
- 级联查询在ORACLE 数据库中有一种方法可以实现级联查询select * //要查询的字段from table
- 代码如下_init_.pyfrom flask import Flask, request, url_for, redirect, rend
- 近来有客户要求用table显示一大串数据,由于滚动后就看不到表头,很不方便,所以想到这个效果。上次做table排序对table有了一些了解,