原生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与webservice的通信实现代码
Dec 25 Javascript
扩展jquery实现客户端表格的分页、排序功能代码
Mar 16 Javascript
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
Apr 01 Javascript
javascript实现的HashMap类代码
Jun 27 Javascript
我的Node.js学习之路(四)--单元测试
Jul 06 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
Mar 11 Javascript
网络传输协议(http协议)
Nov 18 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
Aug 23 jQuery
解决Webpack 热部署检测不到文件变化的问题
Feb 22 Javascript
vue的全局提示框组件实例代码
Feb 26 Javascript
Vue三种常用传值示例(父传子、子传父、非父子)
Jul 24 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
May 30 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
如何把PHP转成EXE文件
2006/10/09 PHP
回答PHPCHINA上的几个问题:URL映射
2007/02/14 PHP
php 错误处理经验分享
2011/10/11 PHP
PHP中的替代语法介绍
2015/01/09 PHP
php中array_multisort对多维数组排序的方法
2020/06/21 PHP
javascript中的107个基础知识收集整理 推荐
2010/03/29 Javascript
JS target与currentTarget区别说明
2011/08/28 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
2015/05/06 Javascript
js鼠标点击图片切换效果代码分享
2015/08/26 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
基于JS实现无缝滚动思路及代码分享
2016/06/07 Javascript
switch语句的妙用(必看篇)
2016/10/03 Javascript
angularjs 中$apply,$digest,$watch详解
2016/10/13 Javascript
Angular2平滑升级到Angular4的步骤详解
2017/03/29 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
Javascript获取某个月的天数
2018/05/30 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
2019/07/19 Javascript
js实现随机抽奖
2020/03/19 Javascript
关于angular浏览器兼容性问题的解决方案
2020/07/26 Javascript
VUE中V-IF条件判断改变元素的样式操作
2020/08/09 Javascript
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
Python使用Turtle模块绘制五星红旗代码示例
2017/12/11 Python
python3.7 使用pymssql往sqlserver插入数据的方法
2019/07/08 Python
Django 创建/删除用户的示例代码
2019/07/24 Python
python安装本地whl的实例步骤
2019/10/12 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
python简单实现插入排序实例代码
2020/12/16 Python
HTML5未来发展趋势
2016/02/01 HTML / CSS
英国、欧洲和全球租车服务:Avis英国
2016/08/29 全球购物
TripAdvisor德国:全球领先的旅游网站
2017/12/07 全球购物
西班牙在线光学:Visual-Click
2020/06/22 全球购物
酒店led欢迎词
2014/01/09 职场文书
资助贫困学生倡议书
2014/05/16 职场文书
Python数据类型最全知识总结
2021/05/31 Python
css3中transform属性实现的4种功能
2021/08/07 HTML / CSS