原生js仿浏览器滚动条效果

发布时间 - 2026-01-10 23:23:01    点击率:

效果图:

代码如下:

<!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 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 郑州企业网站制作公司,郑州招聘网站有哪些?  奇安信“盘古石”团队突破 iOS 26.1 提权  海南网站制作公司有哪些,海口网是哪家的?  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  如何在香港免费服务器上快速搭建网站?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  青岛网站建设如何选择本地服务器?  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  JavaScript如何操作视频_媒体API怎么控制播放  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  Android okhttputils现在进度显示实例代码  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  微信小程序 require机制详解及实例代码  如何在服务器上配置二级域名建站?  Linux后台任务运行方法_nohup与&使用技巧【技巧】  中山网站制作网页,中山新生登记系统登记流程?  php 三元运算符实例详细介绍  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  EditPlus中的正则表达式实战(6)  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  潮流网站制作头像软件下载,适合母子的网名有哪些?  如何快速搭建二级域名独立网站?  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  教学论文网站制作软件有哪些,写论文用什么软件 ?  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  如何安全更换建站之星模板并保留数据?  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  中山网站推广排名,中山信息港登录入口?  如何在阿里云完成域名注册与建站?  如何在万网利用已有域名快速建站?  如何在云服务器上快速搭建个人网站?  如何快速上传自定义模板至建站之星?  如何正确下载安装西数主机建站助手?  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  利用python获取某年中每个月的第一天和最后一天  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  浅谈redis在项目中的应用  Python结构化数据采集_字段抽取解析【教程】  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  装修招标网站设计制作流程,装修招标流程?  如何彻底卸载建站之星软件?  JavaScript中的标签模板是什么_它如何扩展字符串功能  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  Laravel API资源类怎么用_Laravel API Resource数据转换