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


Posted in Javascript onMarch 02, 2017

效果图:

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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
javascript中&quot;/&quot;运算符常见错误
Oct 13 Javascript
jQuery-Tools-overlay 使用介绍
Jul 14 Javascript
详细解密jsonp跨域请求
Apr 15 Javascript
window.open不被拦截的简单实现代码(推荐)
Aug 04 Javascript
JS弹出窗口的运用与技巧大全
Nov 01 Javascript
jQuery特殊符号转义的实现
Nov 30 Javascript
微信小程序开发教程-手势解锁实例
Jan 06 Javascript
jquery,js简单实现类似Angular.js双向绑定
Jan 13 Javascript
jQuery、zepto、js常用小技巧
Feb 12 Javascript
微信小程序图片宽100%显示并且不变形
Jun 21 Javascript
Element Breadcrumb 面包屑的使用方法
Jul 26 Javascript
Vue中避免滥用this去读取data中数据
Mar 02 Vue.js
使用grunt合并压缩js和css文件的方法
Mar 02 #Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
Mar 02 #Javascript
浅谈Vue.js
Mar 02 #Javascript
利用imgareaselect辅助后台实现图片上传裁剪
Mar 02 #Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
Mar 02 #Javascript
Bootstrap入门教程一Hello Bootstrap初识
Mar 02 #Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
Mar 02 #Javascript
You might like
点评山进PR-D3L三波段收音机
2021/03/02 无线电
基于linnux+phantomjs实现生成图片格式的网页快照
2015/04/15 PHP
php上传大文件失败的原因及应对策略
2015/10/20 PHP
PJBlog插件 防刷新的在线播放器
2006/10/25 Javascript
“不能执行已释放的Script代码”错误的原因及解决办法
2007/09/09 Javascript
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
window.open打开页面居中显示的示例代码
2013/12/27 Javascript
jquery用offset()方法获得元素的xy坐标
2014/09/06 Javascript
javascript实现类似java中getClass()得到对象类名的方法
2015/07/27 Javascript
JavaScript中的对象继承关系
2016/08/01 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
JavaScript函数参数的传递方式详解
2017/03/06 Javascript
Vuex之理解state的用法实例
2017/04/19 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
nodejs 图解express+supervisor+ejs的用法(推荐)
2017/09/08 NodeJs
vue 实现的树形菜的实例代码
2018/03/19 Javascript
手写Node静态资源服务器的实现方法
2018/03/20 Javascript
通过webpack引入第三方库的方法
2018/07/20 Javascript
JQuery模拟实现网页中自定义鼠标右键菜单功能
2018/11/14 jQuery
深入了解JS之作用域和闭包
2020/06/16 Javascript
Python实现子类调用父类的方法
2014/11/10 Python
python 下 CMake 安装配置 OPENCV 4.1.1的方法
2019/09/30 Python
Win系统PyQt5安装和使用教程
2019/12/25 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
2019/12/26 Python
Python换行与不换行的输出实例
2020/02/19 Python
浅谈pytorch中torch.max和F.softmax函数的维度解释
2020/06/28 Python
HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
2018/04/23 HTML / CSS
JDO的含义
2012/11/17 面试题
如何安装ruby on rails
2014/02/09 面试题
总经理助理岗位职责
2013/11/08 职场文书
高三毕业寄语
2014/04/10 职场文书
学生自我评语大全
2014/04/18 职场文书
大学生找工作求职信
2014/07/09 职场文书
党员干部对十八届四中全会的期盼
2014/10/17 职场文书
启动Tomcat时出现大量乱码的解决方法
2021/06/21 Java/Android
Win11 Build 22000.829更新补丁KB5015882发布(附更新修复内容汇总)
2022/07/15 数码科技