原生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


相关推荐: QQ浏览器网页版登录入口 个人中心在线进入  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  浅谈redis在项目中的应用  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  佛山企业网站制作公司有哪些,沟通100网上服务官网?  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  java中使用zxing批量生成二维码立牌  如何实现建站之星域名转发设置?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  详解Android中Activity的四大启动模式实验简述  如何选择PHP开源工具快速搭建网站?  如何用IIS7快速搭建并优化网站站点?  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  Laravel如何实现一对一模型关联?(Eloquent示例)  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  javascript读取文本节点方法小结  详解CentOS6.5 安装 MySQL5.1.71的方法  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  使用C语言编写圣诞表白程序  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  EditPlus中的正则表达式 实战(4)  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  如何彻底删除建站之星生成的Banner?  ,在苏州找工作,上哪个网站比较好?  JS碰撞运动实现方法详解  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  如何快速搭建虚拟主机网站?新手必看指南  Python进程池调度策略_任务分发说明【指导】  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  如何在腾讯云服务器上快速搭建个人网站?  详解jQuery停止动画——stop()方法的使用  JavaScript中的标签模板是什么_它如何扩展字符串功能  如何用PHP快速搭建高效网站?分步指南  如何自定义建站之星模板颜色并下载新样式?  详解vue.js组件化开发实践  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  个人网站制作流程图片大全,个人网站如何注销?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  Laravel如何实现数据库事务?(DB Facade示例)  如何在阿里云部署织梦网站?  原生JS实现图片轮播切换效果  如何在IIS7上新建站点并设置安全权限?  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  Laravel定时任务怎么设置_Laravel Crontab调度器配置  在Oracle关闭情况下如何修改spfile的参数