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 相关文章推荐
js清除input中type等于file的值域(示例代码)
Dec 24 Javascript
jQuery学习笔记之 Ajax操作篇(二) - 数据传递
Jun 23 Javascript
javascript制作的cookie封装及使用指南
Jan 02 Javascript
JavaScript 深层克隆对象详解及实例
Nov 03 Javascript
微信小程序 中wx.chooseAddress(OBJECT)实例详解
Mar 31 Javascript
Angular 4.x 路由快速入门学习
May 03 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
Oct 26 Javascript
vue 设置proxyTable参数进行代理跨域
Apr 09 Javascript
Angular8引入百度Echarts进行图表分析的实现代码
Nov 27 Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
Nov 07 Javascript
token 机制和实现方式
Dec 15 Javascript
html5调用摄像头截图功能
Jan 18 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新手上路(八)
2006/10/09 PHP
phpmyadmin MySQL 加密配置方法
2009/07/05 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
PHP并发查询MySQL的实例代码
2017/08/09 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
2018/09/18 PHP
JavaScript 继承详解(三)
2009/07/13 Javascript
从零开始学习jQuery (四) jQuery中操作元素的属性与样式
2011/02/23 Javascript
键盘KeyCode值列表汇总
2013/11/26 Javascript
我用的一些Node.js开发工具、开发包、框架等总结
2014/09/25 Javascript
简介JavaScript中search()方法的使用
2015/06/06 Javascript
Google Maps基础及实例解析
2016/08/06 Javascript
angular+ionic 的app上拉加载更新数据实现方法
2017/01/16 Javascript
JS判断非空至少输入两个字符的简单实现方法
2017/06/23 Javascript
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
深入浅析Vue.js中 computed和methods不同机制
2018/03/22 Javascript
vue代理和跨域问题的解决
2018/07/18 Javascript
vue中keep-alive内置组件缓存的实例代码
2020/04/16 Javascript
vue 获取元素额外生成的data-v-xxx操作
2020/09/09 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
详解Python3中字符串中的数字提取方法
2017/01/14 Python
python中将函数赋值给变量时需要注意的一些问题
2017/08/18 Python
pandas中Timestamp类用法详解
2017/12/11 Python
Python基于dom操作xml数据的方法示例
2018/05/12 Python
解决python 文本过滤和清理问题
2019/08/28 Python
原生python实现knn分类算法
2019/10/24 Python
使用python远程操作linux过程解析
2019/12/04 Python
详解CSS3:overflow属性
2020/11/17 HTML / CSS
HTML5 拖放功能实现代码
2016/07/14 HTML / CSS
Lucene推荐的分页方式是什么?
2015/12/07 面试题
医学专业大学生求职的自我评价
2013/11/27 职场文书
酒店总经理助理职责
2014/02/12 职场文书
单位租房协议书范本
2014/12/04 职场文书
初中优秀学生评语
2014/12/29 职场文书
留学文书中的个人陈述,应该注意哪些问题?
2019/08/23 职场文书
全面盘点MySQL中的那些重要日志文件
2021/11/27 MySQL
根德5570型九灯四波段立体声收音机是电子管收音机的楷模 ? 再论5570
2022/04/05 无线电