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 相关文章推荐
jQuery表格插件datatables用法详解
Nov 23 Javascript
JS显示日历和天气的方法
Mar 01 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
Nov 11 Javascript
清除浏览器缓存的几种方法总结(必看)
Dec 09 Javascript
微信小程序实现图片上传功能实例(前端+PHP后端)
Jan 10 Javascript
angular动态表单制作
Feb 23 Javascript
详解webpack的proxyTable无效的解决方案
Jun 15 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
Sep 10 Javascript
微信小程序自定义波浪组件使用方法详解
Sep 21 Javascript
解决layui弹出层layer的area过大被遮挡的问题
Sep 21 Javascript
layer.confirm()右边按钮实现href的例子
Sep 27 Javascript
TypeScript中条件类型精读与实践记录
Oct 05 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 5.3新增魔术方法__invoke概述
2014/07/23 PHP
PHP中SimpleXML函数用法分析
2014/11/26 PHP
Symfony2学习笔记之插件格式分析
2016/03/17 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
Javascript 调试利器 Firebug使用详解六
2009/07/05 Javascript
JavaScript 继承详解(一)
2009/07/13 Javascript
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
Jquery实现图片左右自动滚动示例
2013/09/25 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
使用javascript实现雪花飘落的效果
2015/01/13 Javascript
jquery图片倾斜层叠切换特效代码分享
2015/08/27 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
2017/03/30 Javascript
AngularJS动态绑定ng-options的ng-model实例代码
2017/06/21 Javascript
详解如何使用webpack+es6开发angular1.x
2017/08/16 Javascript
jQuery Layer弹出层传值到父页面的实现代码
2017/08/17 jQuery
Vue2 配置 Axios api 接口调用文件的方法
2017/11/13 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
Centos Python2 升级到Python3的简单实现
2016/06/21 Python
Python中的pygal安装和绘制直方图代码分享
2017/12/08 Python
Python实现PS滤镜的旋转模糊功能示例
2018/01/20 Python
opencv实现简单人脸识别
2021/02/19 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
关于python中的xpath解析定位
2020/03/06 Python
Pycharm配置PyQt5环境的教程
2020/04/02 Python
Lululemon英国官网:加拿大瑜伽服装品牌
2019/01/14 全球购物
IBatis持久层技术
2016/07/18 面试题
前台文员个人求职信范文
2014/01/05 职场文书
父亲追悼会答谢词
2014/01/17 职场文书
英文演讲稿
2014/05/15 职场文书
精神文明建设汇报材料
2014/12/24 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
中秋节作文(五年级)之关于月亮
2019/09/11 职场文书
Python数据可视化之绘制柱状图和条形图
2021/05/25 Python
我家女友可不止可爱呢 公开OP主题曲无字幕动画MV
2022/04/11 日漫