原生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实现jQuery的$.getJSON的解决方法
May 03 Javascript
教你如何使用PHP输出中文JSON字符串
May 22 Javascript
JS实现距离上次刷新已过多少秒示例
May 23 Javascript
JavaScript中string转换成number介绍
Dec 31 Javascript
angularJS结合canvas画图例子
Feb 09 Javascript
JavaScript隐式类型转换
Mar 15 Javascript
JS中setTimeout和setInterval的最大延时值详解
Feb 13 Javascript
利用js编写网页进度条效果
Oct 08 Javascript
vue下history模式刷新后404错误解决方法
Aug 18 Javascript
在Vue项目中引入JQuery-ui插件的讲解
Jan 27 jQuery
Vue实现日历小插件
Jun 26 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
Oct 15 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
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
PHP微信公众号自动发送红包API
2016/06/01 PHP
PHP7引入的&quot;??&quot;和&quot;?:&quot;的区别讲解
2019/04/08 PHP
JS弹出层的显示与隐藏示例代码
2013/12/27 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
网页禁用右键菜单和鼠标拖动选择方法小结
2015/02/25 Javascript
javascript判断数组内是否重复的方法
2015/04/21 Javascript
javascript相关事件的几个概念
2015/05/21 Javascript
JavaScript如何自定义trim方法
2015/07/28 Javascript
javascript实现加载xml文件的方法
2015/11/24 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
2016/03/07 Javascript
Nodejs进阶:核心模块net入门学习与实例讲解
2016/11/21 NodeJs
js canvas实现适用于移动端的百分比仪表盘dashboard
2017/07/18 Javascript
jQuery选择器之基本选择器用法实例分析
2019/02/19 jQuery
layui数据表格实现重载数据表格功能(搜索功能)
2019/07/27 Javascript
微信公众号网页分享功能开发的示例代码
2020/05/27 Javascript
JavaScript setTimeout()基本用法有哪些
2020/11/04 Javascript
[01:03:42]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
基于python yield机制的异步操作同步化编程模型
2016/03/18 Python
Python实现的本地文件搜索功能示例【测试可用】
2018/05/30 Python
详解Python中的正则表达式
2018/07/08 Python
python 接收处理外带的参数方法
2018/12/03 Python
浅谈Python中函数的定义及其调用方法
2019/07/19 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
美国领先的奢侈美容零售商:Bluemercury
2017/07/26 全球购物
英国最全面的橄榄球联盟门票网站:Live Rugby Tickets
2018/10/06 全球购物
美国专业消费电子及摄影器材网站:B&H Photo Video
2019/12/18 全球购物
北京鼎普科技股份有限公司软件测试面试题
2012/04/07 面试题
医院学雷锋活动策划方案
2014/02/15 职场文书
商务英语专业求职信
2014/06/26 职场文书
公司催款律师函
2015/05/27 职场文书
工伤调解协议书
2016/03/21 职场文书
幼师必备:幼儿园期末教师评语50条
2019/11/01 职场文书
导游词之宁夏贺兰山岩画
2019/11/08 职场文书
新手入门Mysql--概念
2021/06/18 MySQL
Python中with上下文管理协议的作用及用法
2022/03/18 Python