效果图:
代码如下:
<!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>
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# 原生js滚动条
# 浏览器滚动条
# JS简单判断滚动条的滚动方向实现方法
# 原生js封装自定义滚动条
# js实现彩色条纹滚动条效果
# js实现简易垂直滚动条
# 基于JavaScript实现自定义滚动条
# JavaScript实现垂直滚动条效果
# js实现刷新页面后回到记录时滚动条的位置【两种方案可选】
# js 简易版滚动条实例(适用于移动端H5开发)
# 我是
# 鼠标
# 滚动条
# 不需要
# 按下
# 绑定
# height
# border
# width
# demo
# padding
# px
# solid
# size
# font
# scrll
# position
# red
# hidden
# overflow
相关文章:
建站之星备案流程有哪些注意事项?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
建站主机选择指南:服务器配置与SEO优化实战技巧
,南京靠谱的征婚网站?
建站VPS选购需注意哪些关键参数?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
制作网站的公司有哪些,做一个公司网站要多少钱?
创业网站制作流程,创业网站可靠吗?
如何用y主机助手快速搭建网站?
宿州网站制作公司兴策,安徽省低保查询网站?
红河网站制作公司,红河事业单位身份证如何上传?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
建站之星代理商如何保障技术支持与售后服务?
中山网站制作网页,中山新生登记系统登记流程?
建站主机核心功能解析:服务器选择与网站搭建流程指南
宝塔建站无法访问?如何排查配置与端口问题?
Python lxml的etree和ElementTree有什么区别
制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?
如何在Windows虚拟主机上快速搭建网站?
如何在橙子建站上传落地页?操作指南详解
建站之星Pro快速搭建教程:模板选择与功能配置指南
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
如何批量查询域名的建站时间记录?
微信小程序 五星评分(包括半颗星评分)实例代码
如何通过FTP服务器快速搭建网站?
如何在新浪SAE免费搭建个人博客?
如何高效生成建站之星成品网站源码?
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
家具网站制作软件,家具厂怎么跑业务?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
建站主机如何安装配置?新手必看操作指南
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
佛山网站制作系统,佛山企业变更地址网上办理步骤?
如何配置FTP站点权限与安全设置?
如何快速搭建高效WAP手机网站吸引移动用户?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
如何在Golang中引入测试模块_Golang测试包导入与使用实践
早安海报制作网站推荐大全,企业早安海报怎么每天更换?
家庭建站与云服务器建站,如何选择更优?
如何用低价快速搭建高质量网站?
如何快速搭建FTP站点实现文件共享?
如何在VPS电脑上快速搭建网站?
制作企业网站建设方案,怎样建设一个公司网站?
宝塔建站教程:一键部署配置流程与SEO优化实战指南
建站之星云端配置指南:模板选择与SEO优化一键生成
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
北京建设网站制作公司,北京古代建筑博物馆预约官网?
郑州企业网站制作公司,郑州招聘网站有哪些?
建站之星安装后界面空白如何解决?
*请认真填写需求信息,我们会在24小时内与您取得联系。