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

发布时间 - 2026-01-11 02:02:52    点击率:

废话不多说,直接上代码

<!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开发)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# js  # 滚动条  # JS简单判断滚动条的滚动方向实现方法  # 原生js封装自定义滚动条  # js实现彩色条纹滚动条效果  # 原生js仿浏览器滚动条效果  # js实现简易垂直滚动条  # 基于JavaScript实现自定义滚动条  # JavaScript实现垂直滚动条效果  # js实现刷新页面后回到记录时滚动条的位置【两种方案可选】  # 给大家  # 适用于  # 希望能  # 这篇  # 多说  # 绑定  # 小编  # 大家多多  # 简易版  # top  # height  # px  # padding  # text  # javascript  # script  # type  # margin 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  Laravel如何为API生成Swagger或OpenAPI文档  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  如何打造高效商业网站?建站目的决定转化率  Bootstrap整体框架之CSS12栅格系统  济南网站建设制作公司,室内设计网站一般都有哪些功能?  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  zabbix利用python脚本发送报警邮件的方法  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  Laravel怎么实现验证码(Captcha)功能  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  Python高阶函数应用_函数作为参数说明【指导】  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  如何快速搭建个人网站并优化SEO?  如何在IIS中新建站点并解决端口绑定冲突?  长沙企业网站制作哪家好,长沙水业集团官方网站?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  如何用西部建站助手快速创建专业网站?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  Swift开发中switch语句值绑定模式  Laravel怎么连接多个数据库_Laravel多数据库连接配置  node.js报错:Cannot find module &#39;ejs&#39;的解决办法  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  如何在景安云服务器上绑定域名并配置虚拟主机?  微信小程序 五星评分(包括半颗星评分)实例代码  常州企业网站制作公司,全国继续教育网怎么登录?  如何快速生成ASP一键建站模板并优化安全性?  深圳网站制作平台,深圳市做网站好的公司有哪些?  JavaScript如何操作视频_媒体API怎么控制播放  JavaScript如何实现继承_有哪些常用方法  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  网站制作价目表怎么做,珍爱网婚介费用多少?  太平洋网站制作公司,网络用语太平洋是什么意思?  Laravel如何处理文件下载请求?(Response示例)  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?