javascript实现滚动条效果


Posted in Javascript onMarch 24, 2020

本文实例为大家分享了javascript实现滚动条效果的具体代码,供大家参考,具体内容如下

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>Document</title>
<style>
 html, body {
  height: 100%;
  margin: 0;
 }
 #container {
  position: absolute;
  top: 50px;
  left: 100px;
  height: 400px;
  width: 150px;
  background-color: aliceblue;
  padding: 2rem;
  box-sizing: border-box;
  /*必须属性,否则给scrollTop赋值无效*/
  overflow-y: hidden;
  position: relative;
  padding-right: 30px;
 }
 .scrollbar {
  height: 50px;
  width: 10px;
  border-radius: 20px;
  background: #ccc;
  position: absolute;
  right: 0;
 }
</style>
 <script>
 window.onload = function () {
  var scrollbar = document.querySelector('.scrollbar');
  var container = scrollbar.parentNode;
  container.scrollbar = scrollbar;
  container.ratio =
   (container.scrollHeight - container.offsetHeight) / (container.offsetHeight - scrollbar.offsetHeight);
  container.addEventListener('mousewheel', function(e) {
   this.scrollTop += e.deltaY;
   this.scrollbar.style.top = (this.scrollTop + this.scrollTop / this.ratio) + 'px';
  });
  container.addEventListener('mousedown', function (e) {
   if (e.target === this.scrollbar) {
    this.prevY = e.pageY;
   }
  });
  container.addEventListener('mouseup', function (e) {
   this.prevY = null;
  });
  container.addEventListener('mousemove', function (e) {
   if (this.prevY) {
    this.scrollTop += (e.pageY - this.prevY) * this.ratio;
    this.scrollbar.style.top = (this.scrollTop + this.scrollTop / this.ratio) + 'px';
    this.prevY = e.pageY;
   }
   e.preventDefault();
  });
 }
 </script>
</head>
<body>
 <div id="container">
  <div class="scrollbar"></div>
  <p>fefe</p>
  <p>fefe</p>
  <p>fefe</p>
  <p>fefe</p>
  <p>fefe</p>
  <p>fefe</p>
  <p>fefe</p>
  <p>fefe</p>
  <p>fefe</p>
  <p>fefe</p>
  <p>fefe</p>
  <p>fefe</p>
  <p>fefe</p>
  <p>fefe</p>
  <p>fefe</p>
  <p>fefe</p>
  <p>fefe</p>
  <p>fefe</p>
  <p>fefe</p>
  <p>fefe</p>
  <p>fefe</p>
 </div>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
理解JavaScript中的事件
Sep 23 Javascript
JavaScript定时器详解及实例
Aug 01 Javascript
JavaScript数组迭代器实例分析
Jun 09 Javascript
Vue.js绑定HTML class数组语法错误的原因分析
Oct 19 Javascript
JS制作适用于手机和电脑的通知信息效果
Oct 28 Javascript
Vue 单文件中的数据传递示例
Mar 21 Javascript
vue 计时器组件的实现代码
Sep 14 Javascript
vue移动端实现下拉刷新
Apr 22 Javascript
使用webpack3.0配置webpack-dev-server教程
May 29 Javascript
Vue登录注册并保持登录状态的方法
Aug 17 Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
Sep 11 Javascript
Vue封装Axios请求和拦截器的步骤
Sep 16 Javascript
Webpack中SplitChunksPlugin 配置参数详解
Mar 24 #Javascript
JS实现点星星消除小游戏
Mar 24 #Javascript
js实现小星星游戏
Mar 23 #Javascript
JS Array.from()将伪数组转换成数组的方法示例
Mar 23 #Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
Mar 23 #Javascript
小程序使用分包的示例代码
Mar 23 #Javascript
用JS实现选项卡
Mar 23 #Javascript
You might like
destoon安全设置中需要设置可写权限的目录及文件
2014/06/21 PHP
PHP实现下载断点续传的方法
2014/11/12 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
2014/12/15 PHP
laravel使用Faker数据填充的实现方法
2019/04/12 PHP
php中try catch捕获异常实例详解
2020/08/06 PHP
一个简单的jQuery插件制作 学习过程及实例
2010/04/25 Javascript
js 实现的可折叠留言板(附源码下载)
2014/07/01 Javascript
js返回前一页刷新本页重载页面
2014/07/29 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
2014/12/22 Javascript
一道JS前端闭包面试题解析
2015/12/25 Javascript
再谈Javascript中的异步以及如何异步
2016/08/19 Javascript
AngularJS页面带参跳转及参数解析操作示例
2017/06/28 Javascript
Mongoose实现虚拟字段查询的方法详解
2017/08/15 Javascript
javascript 开发之网页兼容各种浏览器
2017/09/28 Javascript
MVVM框架下实现分页功能示例
2018/06/14 Javascript
node.js中fs文件系统模块的使用方法实例详解
2020/02/13 Javascript
[02:41]DOTA2英雄基础教程 谜团
2013/12/10 DOTA
[51:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python多线程编程(五):死锁的形成
2015/04/05 Python
基于Python实现对PDF文件的OCR识别
2016/08/05 Python
深入理解NumPy简明教程---数组2
2016/12/17 Python
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
2018/11/29 Python
python中yield的用法详解——最简单,最清晰的解释
2019/04/04 Python
Python3内置模块之json编解码方法小结【推荐】
2020/12/09 Python
Python属性和内建属性实例解析
2020/01/14 Python
彻底搞懂python 迭代器和生成器
2020/09/07 Python
Django-silk性能测试工具安装及使用解析
2020/11/28 Python
TripAdvisor德国:全球领先的旅游网站
2017/12/07 全球购物
中国首家奢侈品O2O网购平台:第五大道奢侈品网
2017/12/14 全球购物
PHP如何调用MYSQL存储过程
2014/05/30 面试题
文艺晚会主持词
2014/03/24 职场文书
平安工地建设方案
2014/05/06 职场文书
班组建设经验交流材料
2014/05/12 职场文书
学校学雷锋活动总结
2014/06/26 职场文书
2015年师德师风承诺书
2015/01/22 职场文书
Android studio 简单计算器的编写
2022/05/20 Java/Android