原生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防止表单重复提交实现代码
Sep 05 Javascript
node.js中的fs.appendFileSync方法使用说明
Dec 17 Javascript
js实现键盘Enter键提交表单的方法
May 27 Javascript
微信小程序 开发之顶部导航栏实例代码
Feb 23 Javascript
node中modules.exports与exports导出的区别
Jun 08 Javascript
JavaScript实现的反序列化json字符串操作示例
Jul 18 Javascript
Windows下Node爬虫神器Puppeteer安装记
Jan 09 Javascript
react组件从搭建脚手架到在npm发布的步骤实现
Jan 09 Javascript
浅谈layer弹出层按钮颜色修改方法
Sep 11 Javascript
JS中作用域以及变量范围分析
Jul 18 Javascript
vue中echarts的用法及与elementui-select的协同绑定操作
Nov 17 Vue.js
jQuery使用hide()、toggle()函数实现相机品牌展示隐藏功能
Jan 29 jQuery
使用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
PHP实现时间轴函数代码
2011/10/08 PHP
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
关闭页面window.location事件未执行的原因及解决方法
2014/09/01 Javascript
JavaScript中的各种操作符使用总结
2016/05/26 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
2016/06/20 Javascript
javascript数字验证的实例代码(推荐)
2016/08/20 Javascript
微信小程序 生命周期详解
2016/10/12 Javascript
Bootstrap CSS布局之表格
2016/12/17 Javascript
angular.js指令中的controller、compile与link函数的不同之处
2017/05/10 Javascript
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
微信小程序自定义模态对话框实例详解
2017/08/16 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
微信小程序wx:for循环的实例详解
2018/10/07 Javascript
Vue-CLI 项目在pycharm中配置方法
2019/08/30 Javascript
基于JavaScript实现表格隔行换色
2020/05/08 Javascript
vue-cli3配置favicon.ico和title的流程
2020/10/27 Javascript
全网小程序接口请求封装实例代码
2020/11/06 Javascript
[55:42]VG vs VGJ.T 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python学习之asyncore模块用法实例教程
2014/09/29 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
Python print不能立即打印的解决方式
2020/02/19 Python
基于Django OneToOneField和ForeignKey的区别详解
2020/03/30 Python
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
马来西亚在线购物市场:PGMall.my
2019/10/13 全球购物
英国银首饰公司:e&e Jewellery
2021/02/11 全球购物
经典的班主任推荐信
2013/10/28 职场文书
初婚未育证明
2014/01/15 职场文书
残疾人小组计划书
2014/04/27 职场文书
荷叶母亲教学反思
2014/04/30 职场文书
党委干部批评与自我批评发言稿
2014/09/28 职场文书
法制主题班会教案
2015/08/13 职场文书
优秀乡村医生事迹材料(2016精选版)
2016/02/29 职场文书
浅谈Python数学建模之数据导入
2021/06/23 Python
C3 线性化算法与 MRO之Python中的多继承
2021/10/05 Python
关于PHP数组迭代器的使用方法实例
2021/11/17 PHP