js 简易版滚动条实例(适用于移动端H5开发)


Posted in Javascript onJune 26, 2017

废话不多说,直接上代码

<!DOCTYPE html>
<html>
<head>
  <title>滑动条</title>
  <meta charset="utf-8">
  <meta name="apple-mobile-web-app-capable" content="yes" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
  <script type="text/javascript" src="./hScoll.js"></script>
</head>
<style>
  *{
    margin: 0;
    padding: 0;
  }

  #content{
    margin-top: 50px;
    width:100%;
    height: 200px;
    background: #eeeeee;
    overflow: hidden;
    position: relative;
    /**transform: translate(0px, -70px);*/
  }
  #scoll{
    overflow: hidden;
  }

  #content2{
    margin-top: 50px;
    width:100%;
    height: 200px;
    background: red;
    overflow: hidden;
    position: relative;
    /**transform: translate(0px, -70px);*/
  }
  #scoll2{
    overflow: hidden;
  }

  .scrollbars{
    position: absolute;
    height: 100%;
    right: 0;
    top: 0;
    width: 5px;
    border-radius: 5px;
  }
  .scollb{
    position: absolute;
    right: 0;
    top: 0;
    width: 100%;
    background: #999999;
    border-radius: 5px;
  }
</style>
<body>
  <div id="content">
    <div id="scoll">
      <p>1111</p>
      <p>2222</p>
      <p>3333</p>
      <p>4444</p>
      <p>5555</p>
      <p>6666</p>
      <p>7777</p>
      <p>8888</p>
      <p>9999</p>
      <p>0000</p>
      <p>aaaa</p>
      <p>bbbb</p>
      <p>cccc</p>
      <p>dddd</p>
      <p>eeee</p>
    </div>
  </div>
</body>
<script>
  var options ={
    interactiveScrollbars:true
  }
  window.hScoll.buildScoll('content',options);
</script>
</html>

js代码:

/**
 * Created by hechao on 2017/6/25.
 */
(function(){

  /**添加window对象hScoll属性*/
  window.hScoll = {


    buildScoll:function(el,options){
      App.init(el,options);
    }
  }

  var App = {

    /**初始化组件*/
    init:function(el,option){
      App.options = option;
      App.prevY = 0;
      App.el = document.getElementById(el);
      App.scoll = this.el.children[0];
      App.h = this.el.offsetHeight;//滑动范围高度
      App.ch = this.el.scrollHeight;//内容的高度
      if(parseFloat(this.h)<=parseFloat(this.ch)){
        App.sdiv = document.createElement('div');
        App.scollb = document.createElement('div');
        App.sdiv.setAttribute('class','scrollbars');
        App.scollb.setAttribute('class','scollb');
        App.scollb.style.height = parseFloat(this.h)*parseFloat(this.h)/parseFloat(this.ch) + 'px';
        App.el.appendChild(this.sdiv);
        App.sdiv.appendChild(this.scollb);
        App.initevent();
      }
    },

    /**绑定事件*/
    initevent:function (){
      App.el.addEventListener('touchstart', App.touchstart, false);
      App.el.addEventListener('touchmove', App.touchmove, false);
      App.el.addEventListener('touchend', App.touchend, false);
    },

    /**记录滑动初始位置*/
    touchstart:function(e){
      var point = App.getPoint(e);
      App.startY = point.pageY;
    },

    /**手指移动时,滚动条滚动*/
    touchmove:function(e){
      e.preventDefault();//阻止默认行为
      var point = App.getPoint(e);
      App.moveY = point.pageY;
      App.deltaY = App.startY - App.moveY;
      if((App.prevY - App.deltaY)<=0 && (App.prevY - App.deltaY)>= -(App.ch-App.h)){
        App.domove(App.prevY - App.deltaY);
      }
      if(App.options.interactiveScrollbars){
        App.domove2(App.prevY - App.deltaY);
      }else{
        if((App.prevY - App.deltaY)<=0 && (App.prevY - App.deltaY)>= -(App.ch-App.h)){
          App.domove2(App.prevY - App.deltaY);
        }
      }
    },

    /**手指离开时,判断位置*/
    touchend:function(e){
      App.prevY = App.prevY - App.deltaY;
      if(App.prevY >= 0){
        App.prevY = 0;
        App.domove(App.prevY,true);
        App.domove2(App.prevY,true);
      }
      if(App.prevY <= -(App.ch-App.h)){
        App.prevY = -(App.ch-App.h);
        App.domove(App.prevY,true);
        App.domove2(App.prevY,true);
      }
    },

    getPoint:function (e) {
      return e.touches ? e.touches[0] : e;
    },

    /**内容滑动*/
    domove:function (y,t){
      if(t){
        App.scoll.setAttribute('style', 'transform: translate(0px, '+y+'px);transition:transform 300ms ease');
      }else{
        App.scoll.setAttribute('style', 'transform: translate(0px, '+y+'px);transition:transform 0ms ease');
      }
    },

    /**滚动条滑动*/
    domove2:function(y,t){
      if(t){
        App.scollb.setAttribute('style', 'transform: translate(0px, '+-parseFloat(y)*parseFloat(App.h)/parseFloat(App.ch)+'px);transition:transform 0ms ease;height:'+parseFloat(App.h)*parseFloat(App.h)/parseFloat(App.ch) + 'px'+'');
      }else{
        App.scollb.setAttribute('style', 'transform: translate(0px, '+-parseFloat(y)*parseFloat(App.h)/parseFloat(App.ch)+'px);transition:transform 0ms ease;height:'+parseFloat(App.h)*parseFloat(App.h)/parseFloat(App.ch) + 'px'+'');
      }
    }
  }
})();

以上这篇js 简易版滚动条实例(适用于移动端H5开发)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
使用ExtJS技术实现的拖动树结点
Aug 05 Javascript
jquery实现的网页自动播放声音
Apr 30 Javascript
AngularJS模块管理问题的非常规处理方法
Apr 29 Javascript
Ajax分页插件Pagination从前台jQuery到后端java总结
Jul 22 Javascript
Javascript的比较汇总
Jul 25 Javascript
关于微信jssdk实现多图片上传的一点心得分享
Dec 13 Javascript
微信小程序之拖拽排序(代码分享)
Jan 21 Javascript
JS判断两个对象内容是否相等的方法示例
Apr 10 Javascript
在vue组件中使用axios的方法
Mar 16 Javascript
JavaScript实现一个简易的计算器实例代码
May 10 Javascript
javascript事件监听与事件委托实例详解
Aug 16 Javascript
使用JavaScript实现贪吃蛇游戏
Sep 29 Javascript
浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
Jun 25 #Javascript
浅谈JS如何实现真正的对象常量
Jun 25 #Javascript
Easyui ueditor 整合解决不能编辑的问题(推荐)
Jun 25 #Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
Jun 25 #Javascript
jQuery实现拖动效果的实例代码
Jun 25 #jQuery
JS检测window.open打开的窗口是否关闭
Jun 25 #Javascript
jQuery validata插件实现方法
Jun 25 #jQuery
You might like
php使用百度ping服务代码实例
2014/06/19 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
Aster vs KG BO3 第三场2.18
2021/03/10 DOTA
指定js可访问其它域名的cookie的方法
2007/09/18 Javascript
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
20款效果非常棒的 jQuery 插件小结分享
2011/11/18 Javascript
JS+ACTIVEX实现网页选择本地目录路径对话框
2013/03/18 Javascript
防止浏览器记住用户名及密码的简单实用方法
2013/04/22 Javascript
随窗体滑动的小插件sticky源码
2013/06/21 Javascript
jquery+ajax验证不通过也提交表单问题处理
2014/12/12 Javascript
js随机生成26个大小写字母
2016/02/12 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
详解Angular的数据显示优化处理
2016/12/26 Javascript
js实现截图保存图片功能的代码示例
2017/02/16 Javascript
JS中判断某个字符串是否包含另一个字符串的五种方法
2018/05/03 Javascript
JavaScript实现轮播图效果
2020/10/30 Javascript
jquery实现淡入淡出轮播图效果
2020/12/13 jQuery
python通过zlib实现压缩与解压字符串的方法
2014/11/19 Python
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
使用Python编写爬虫的基本模块及框架使用指南
2016/01/20 Python
python字符串的方法与操作大全
2018/01/30 Python
Python字符编码转码之GBK,UTF8互转
2020/02/09 Python
python使用gdal对shp读取,新建和更新的实例
2020/03/10 Python
python使用nibabel和sitk读取保存nii.gz文件实例
2020/07/01 Python
Python自动创建Excel并获取内容
2020/09/16 Python
AmazeUI 列表的实现示例
2020/08/17 HTML / CSS
汉森冲浪板:Hansen Surfboards
2018/05/19 全球购物
iKRIX意大利网上商店:男女豪华服装和配件
2019/10/09 全球购物
俄罗斯在线大型超市:ТутПросто
2021/01/08 全球购物
如何写一份好的自荐信
2014/01/02 职场文书
酒店采购员岗位职责
2014/03/14 职场文书
开学典礼致辞
2015/07/29 职场文书
《中国机长》观后感:敬畏生命,敬畏职责
2019/11/12 职场文书
vue实现可拖拽的dialog弹框
2021/05/13 Vue.js
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android
mysql中关键词exists的用法实例详解
2022/06/10 MySQL