原生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 相关文章推荐
jQuery autocomplate 自扩展插件、自动完成示例代码
Mar 28 Javascript
js+html5实现可在手机上玩的拼图游戏
Jul 17 Javascript
AngularJS变量及过滤器Filter用法分析
Nov 22 Javascript
vue实现列表的添加点击
Dec 29 Javascript
原生JS实现导航下拉菜单效果
Nov 25 Javascript
详解如何使用webpack在vue项目中写jsx语法
Nov 08 Javascript
浅析vue给不同环境配置不同打包命令
Aug 17 Javascript
微信小程序自定义组件传值 页面和组件相互传数据操作示例
May 05 Javascript
JS实现移动端在线签协议功能
Aug 22 Javascript
基于Vue.js与WordPress Rest API构建单页应用详解
Sep 16 Javascript
Node.JS如何实现JWT原理
Sep 18 Javascript
游戏开发中如何使用CocosCreator进行音效处理
Apr 14 Javascript
使用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
根德YB400的电路分析
2021/03/02 无线电
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
php事务处理实例详解
2014/07/11 PHP
php的api数据接口书写实例(推荐)
2016/09/22 PHP
把textarea中字符串里含有的回车换行替换成&amp;lt;br&amp;gt;的javascript代码
2007/04/20 Javascript
js 模拟气泡屏保效果代码
2010/07/10 Javascript
写自已的js类库需要的核心代码
2012/07/16 Javascript
Jquery实现控件的隐藏和显示实例
2014/02/08 Javascript
jQuery常用操作方法及常用函数总结
2014/06/19 Javascript
js实现ArrayList功能附实例代码
2014/10/29 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
JS组件Bootstrap实现弹出框效果代码
2016/04/26 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
vue.js初学入门教程(1)
2016/11/03 Javascript
Vuejs实现带样式的单文件组件新方法
2017/05/02 Javascript
vue 项目如何引入微信sdk接口的方法
2017/12/18 Javascript
详解小程序用户登录状态检查与更新实例
2019/05/15 Javascript
详解webpack的文件监听实现(热更新)
2020/09/11 Javascript
利用Python脚本实现ping百度和google的方法
2017/01/24 Python
100行Python代码实现自动抢火车票(附源码)
2018/01/11 Python
python中itertools模块zip_longest函数详解
2018/06/12 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
python leetcode 字符串相乘实例详解
2018/09/03 Python
Python搭建代理IP池实现存储IP的方法
2019/10/27 Python
Python实现AI换脸功能
2020/04/10 Python
Python 如何查找特定类型文件
2020/08/17 Python
Canvas图片分割效果的实现
2019/07/29 HTML / CSS
解决HTML5中的audio在手机端和微信端的不能自动播放问题
2019/11/04 HTML / CSS
三星美国官网:Samsung美国
2017/02/06 全球购物
澳大利亚男士西服品牌:M.J.Bale
2018/02/06 全球购物
EMPHASIS艾斐诗官网:周生生旗下原创精品珠宝品牌
2020/12/17 全球购物
什么是聚集索引和非聚集索引
2012/01/17 面试题
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2014/07/21 面试题
预备党员思想汇报范文
2013/12/29 职场文书
幼儿园万圣节活动总结
2015/05/05 职场文书
在HTML中引入CSS的几种方式介绍
2021/12/06 HTML / CSS