原生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结合canvas实现图片旋转效果
May 03 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
Aug 28 Javascript
理解JavaScript表单的基础知识
Jan 25 Javascript
JS实现中国公民身份证号码有效性验证
Feb 20 Javascript
Vue 2.x教程之基础API
Mar 06 Javascript
js, jQuery实现全选、反选功能
Mar 08 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
Mar 29 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
Jun 09 jQuery
使用Vue.observable()进行状态管理的实例代码详解
May 26 Javascript
layui 选择列表,打勾,点击确定返回数据的例子
Sep 02 Javascript
vue实现点击追加选中样式效果
Nov 01 Javascript
javascript实现移动端触屏拖拽功能
Jul 29 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
现磨咖啡骗局!现磨咖啡=新鲜咖啡?现磨咖啡背后的猫腻你不懂!
2019/03/28 冲泡冲煮
php中转义mysql语句的实现代码
2011/06/24 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
2016/10/19 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
jquery渐隐渐显的图片幻灯闪烁切换实现方法
2015/02/26 Javascript
js实现网站最上边可关闭的浮动广告条代码
2015/09/04 Javascript
js+canvas绘制矩形的方法
2016/01/28 Javascript
获取JS中网页各种高宽与位置的方法总结
2016/07/27 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
vue.js删除动态绑定的radio的指定项
2017/06/02 Javascript
vue 1.x 交互实现仿百度下拉列表示例
2017/10/21 Javascript
Angularjs Promise实例详解
2018/03/15 Javascript
vue中的计算属性实例详解
2018/09/19 Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
2019/05/29 Javascript
vue+echarts实现动态折线图的方法与注意
2020/09/01 Javascript
[07:03]显微镜下的DOTA2第九期——430圣堂刺客杀戮秀
2014/06/20 DOTA
python去掉行尾的换行符方法
2017/01/04 Python
Django 跨域请求处理的示例代码
2018/05/02 Python
Python enumerate函数遍历数据对象组合过程解析
2019/12/11 Python
python Django 反向访问器的外键冲突解决
2020/05/20 Python
Python常用数字处理基本操作汇总
2020/09/10 Python
python与idea的集成的实现
2020/11/20 Python
微软香港官网及网上商店:Microsoft HK
2016/09/01 全球购物
采购部岗位职责
2013/11/24 职场文书
公司年会晚宴演讲稿
2014/01/06 职场文书
自我鉴定书面格式
2014/01/13 职场文书
大一学生的职业生涯规划书范文
2014/01/19 职场文书
班组长竞聘书
2014/03/31 职场文书
副护士长竞聘演讲稿
2014/04/30 职场文书
电子商务专业求职信
2014/07/10 职场文书
关键在于落实心得体会
2014/09/03 职场文书
部队2015年终工作总结
2015/04/02 职场文书
志愿者服务宣传标语口号
2015/12/26 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书
如何用JavaScript实现一个数组惰性求值库
2021/05/05 Javascript
粗暴解决CUDA out of memory的问题
2021/05/22 Python