原生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 数组操作代码集锦
Apr 28 Javascript
Javascript学习笔记一 之 数据类型
Dec 15 Javascript
jquery及原生js获取select下拉框选中的值示例
Oct 25 Javascript
js实现幻灯片播放图片示例代码
Nov 07 Javascript
jquery通过扩展select控件实现支持enter或focus选择的方法
Nov 19 Javascript
JQuery EasyUI的使用
Feb 24 Javascript
基于JavaScript实现本地图片预览
Feb 08 Javascript
javascript字体颜色控件的开发 JS实现字体控制
Nov 27 Javascript
JS运动特效之任意值添加运动的方法分析
Jan 24 Javascript
从0到1搭建element后台框架优化篇(打包优化)
May 12 Javascript
在layui下对元素进行事件绑定的实例
Sep 06 Javascript
vscode中eslint插件的配置(prettier配置无效)
Sep 10 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 多个submit提交表单 处理方法
2009/07/07 PHP
php实现rc4加密算法代码
2012/04/25 PHP
php根据身份证号码计算年龄的实例代码
2014/01/18 PHP
PHP中异常处理的一些方法整理
2015/07/03 PHP
PHP实现的方程求解示例分析
2016/11/11 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
2019/10/24 PHP
jQuery 获取对象 基本选择与层级
2010/05/31 Javascript
javascript实现图片切换的幻灯片效果源代码
2012/12/12 Javascript
Javascript中 关于prototype属性实现继承的原理图
2013/04/16 Javascript
js之ActiveX控件使用说明 new ActiveXObject()
2014/03/03 Javascript
node.js 使用ejs模板引擎时后缀换成.html
2015/04/22 Javascript
js实现的四级左侧网站分类菜单实例
2015/05/06 Javascript
JavaScript计算器网页版实现代码分享
2016/07/15 Javascript
AngularJS操作键值对象类似java的hashmap(填坑小结)
2016/11/12 Javascript
jQuery DOM节点的遍历方法小结
2017/08/15 jQuery
完美解决手机网页中输入框被输入法遮挡的问题
2017/12/19 Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
2019/05/18 Javascript
分享Angular http interceptors 拦截器使用(推荐)
2019/11/10 Javascript
python对excel文档去重及求和的实例
2018/04/18 Python
python3爬虫之设计签名小程序
2018/06/19 Python
Django uwsgi Nginx 的生产环境部署详解
2019/02/02 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
UGG雪地靴荷兰官网:UGG荷兰
2016/09/09 全球购物
德国化妆品和天然化妆品网上商店:kosmetikfuchs.de
2017/06/09 全球购物
将世界上最美丽的摄影作品转化为艺术作品:Photos.com
2017/11/28 全球购物
以下的初始化有什么区别
2013/12/16 面试题
电气工程及其自动化自我评价四篇
2013/09/24 职场文书
高中军训的心得体会
2014/09/01 职场文书
2014年乡镇人大工作总结
2014/11/25 职场文书
2015年端午节活动总结
2015/02/11 职场文书
社区活动总结范文
2015/05/07 职场文书
防卫过当辩护词
2015/05/21 职场文书
团队拓展训练感想
2015/08/07 职场文书
前端JavaScript大管家 package.json
2021/11/02 Javascript