原生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 相关文章推荐
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
Dec 23 Javascript
JavaScript实现动态增加文件域表单
Feb 12 Javascript
js表数据排序 sort table data
Feb 18 Javascript
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
Apr 14 Javascript
jQuery结合AJAX之在页面滚动时从服务器加载数据
Jun 30 Javascript
Google 地图获取API Key详细教程
Aug 06 Javascript
vue.js将unix时间戳转换为自定义时间格式
Jan 03 Javascript
JavaScript数据结构中栈的应用之表达式求值问题详解
Apr 11 Javascript
详解Vue项目部署遇到的问题及解决方案
Jan 11 Javascript
vue在自定义组件中使用v-model进行数据绑定的方法
Mar 25 Javascript
详解JavaScript数据类型和判断方法
Sep 04 Javascript
javascript贪吃蛇游戏设计与实现
Sep 17 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
ThinkPHP文件缓存类代码分享
2015/04/22 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
科讯商业版中用到的ajax空间与分页函数
2007/09/02 Javascript
jquery星级插件、支持页面中多次使用
2012/03/25 Javascript
jQuery函数的等价原生函数代码示例
2013/05/27 Javascript
JS替换文本域内的回车示例
2014/02/18 Javascript
jquery实现不同大小浏览器使用不同的css样式表的方法
2014/04/02 Javascript
再谈javascript原型继承
2014/11/10 Javascript
angularjs基础教程
2014/12/25 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
jQuery利用FormData上传文件实现批量上传
2018/12/04 jQuery
vue 基于element-ui 分页组件封装的实例代码
2018/12/10 Javascript
vue 搭建后台系统模块化开发详解
2019/05/01 Javascript
vue中datepicker的使用教程实例代码详解
2019/07/08 Javascript
JavaScript canvas实现跟随鼠标移动小球
2021/02/09 Javascript
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
Python中用Spark模块的使用教程
2015/04/13 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
2018/01/04 Python
Python数字图像处理之霍夫线变换实现详解
2018/01/12 Python
小白入门篇使用Python搭建点击率预估模型
2018/10/12 Python
python使用循环打印所有三位数水仙花数的实例
2018/11/13 Python
python 提取tuple类型值中json格式的key值方法
2018/12/31 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
2019/06/05 Python
基于Python的Post请求数据爬取的方法详解
2019/06/14 Python
如何实现Django Rest framework版本控制
2019/07/25 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
2020/04/18 Python
提升python处理速度原理及方法实例
2019/12/25 Python
使用Python webdriver图书馆抢座自动预约的正确方法
2021/03/04 Python
介绍一下OSI七层模型
2012/07/03 面试题
财务部出纳岗位职责
2013/12/22 职场文书
学习党章的体会
2014/11/07 职场文书
Nginx的rewrite模块详解
2021/03/31 Servers
Python 读写 Matlab Mat 格式数据的操作
2021/05/19 Python
quickjs 封装 JavaScript 沙箱详情
2021/11/02 Javascript
Python OpenCV实现图形检测示例详解
2022/04/08 Python