html5 横向滚动,用到了 touchstart、touchmove、touchend 控制修改transform:translate属性;[手机端或者浏览器模拟手机模式才有效果]

【转载请注明出处】

回头准备封装成插件都放到 github上  https://github.com/wt9213

html:

  1. <div class="tab" id="tab">
  2. <div class="scroll-tab" id="scroll_tab" style="transform: translate(0px, 0px) translateZ(0px);">
  3. <a href="#" class="active">tab1</a>
  4. <a href="#">tab2</a>
  5. <a href="#">tab3</a>
  6. <a href="#">tab4</a>
  7. <a href="#">tab5</a>
  8. <a href="#">tab6</a>
  9. <a href="#">tab7</a>
  10. <a href="#">tab8</a>
  11. </div>
  12. </div>

css:

  1. .tab{overflow: hidden;width: 90%;margin: 0 auto;}
  2. .scroll-tab{display: flex;position: relative;}
  3. .scroll-tab a{padding: 5px 10px;border-bottom: 2px solid transparent;text-decoration: none;color: #333333;font-size: 16px;font-family: "arial, helvetica, sans-serif","微软雅黑";}
  4. .scroll-tab a.active{color: #0894ec;border-color: #0894ec;}

js:

  1. var $scrollTab;
  2. var $tab=document.getElementById("tab");
  3. var touchstartX, touchstartY;
  4. var scrollMax;
  5. var mX,mY;
  6. var moveto;
  7. $tab.addEventListener('touchstart', function (e) {
  8. var touch = e.targetTouches[0];
  9. touchstartX = touch.pageX;
  10. touchstartY = touch.pageY;
  11. $scrollTab=document.getElementById("scroll_tab");
  12. scrollMax = $scrollTab.scrollWidth - $tab.clientWidth;
  13. });
  14. $tab.addEventListener('touchmove', function (e) {
  15. var touch = e.targetTouches[0];
  16. mX = touch.pageX;
  17. mY = touch.pageY;
  18. if (touchstartY - mY <= 15 && touchstartY - mY >= -15) {
  19. var transform = $scrollTab.style.transform;
  20. transform = transform.replace("translate(", "");
  21. var currentX = Number(transform.substring(0, (transform.indexOf(",") - 2)));
  22. moveto = -(touchstartX - mX)/4.8;
  23. moveto = moveto + currentX;
  24. if (moveto <= (100) && moveto >= (-scrollMax - 100)) {
  25. $scrollTab.style.transform="translate(" + moveto + "px, 0px) translateZ(0px)";
  26. }
  27. }
  28. });
  29. $tab.addEventListener('touchend', function (e) {
  30. $scrollTab.style.transitionDuration="600ms";
  31. if (moveto > 0) {
  32. $scrollTab.style.transform="translate(0px, 0px) translateZ(0px)";
  33. } else if (moveto < (-scrollMax)) {
  34. $scrollTab.style.transform="translate(" + (-scrollMax) + "px, 0px) translateZ(0px)";
  35. }
  36. setTimeout(function () {
  37. $scrollTab.style.transitionDuration="0ms";
  38. }, 600);
  39. });

html5 tab横向滚动,无滚动条(transform:translate)的更多相关文章

  1. Android实现 ScrollView + ListView无滚动条滚动

    Android实现 ScrollView+ListView无滚动条滚动,即ListView的数据会全部显示完,但Listview无滚动条. 核心代码如下: 1. NoScrollListView.ja ...

  2. 使用elementUI滚动条之横向滚动

    用过elementUI组件应该会知道它内置一个滚动效果,官网对此组件没有相关文档,也是细心网友发现的. <el-scrollbar></el-scrollbar> 将会出现滚动 ...

  3. 使用css实现无滚动条滚动+使用插件自定义滚动条样式

    使用css实现无滚动条滚动,摘抄自:曹小萌博客 使用css实现无滚动条滚动,大体思路是在div外面再套一个div.这个div设置overflow:hidden.而内容div设置 overflow-x: ...

  4. 使用CSS实现无滚动条滚动

    我们都知道,撸页面的时候当我们的内容超出了我们的div,往往会出现滚动条,影响美观. 尤其是当我们在做一些导航菜单的时候.滚动条一出现就破坏了UI效果. 我们不希望出现滚动条,也不希望超出去的内容被放 ...

  5. 横向tab计算滚动位置

    React横向滚动计算 class Footer extends React.Component { handleClick(e) { const offset = 150; // 指定偏移量 thi ...

  6. 父节点使用css的transform: translate(0, 0)时position:fixed在chrome浏览器中无效

    今天在做移动端的页面,无意间发现了一个Chrome浏览器下的一个bug,在使用CSS3的transform: translate(0, 0)属性对节点A进行位置转化,此时A节点下面有一个字节点B,节点 ...

  7. Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条

    本博主在一次个人移动端项目中,遇到这么一个需求:希望自己的项目中,头部导航条的效果可以像今日头条那样,横向滚动! 对于这样的效果,在各大移动端项目中几乎是随处可见,为什么呢? 我们都知道,对于移动端也 ...

  8. 【吉光片羽】js横向滚动与浮动导航

    1.横向滚动,这个方法是见过最简洁的了. #demo { background: #FFF; overflow: hidden; border: 1px dashed #CCC; width: 117 ...

  9. swiper3d横向滚动多张炫酷切换banner

    最近有了个新需求,swiper3d横向滚动多张炫酷切换banner要和elementUI里边走马灯的卡片化card 类似,但是还需要h5手机触摸滚动啊啊啊啊,昨天折腾了半个早上总算完成,今天乖乖跑来m ...

随机推荐

  1. 【Python + Mysql】之用pymysql库连接Mysql数据库并进行增删改查操作

    用pip下载pymysql并引用 具体请参考文章: <Python之MySQL数据库增删改查操作> <python3.6 使用 pymysql 连接 Mysql 数据库及 简单的增删 ...

  2. spring+mybatis基于 AOP实现业务日志管理

    最近在项目上用到了操作日志的相关,之前的解决方案就是自己写一个日志project,然后统一调用日志接口即可,这样方便自定义定制,因为有很多设备控制之类的都是需要确认一下的,但是,对数据的操作,比如,增 ...

  3. linux 上安装apache 出现 configure: error: APR not found. Please read the documentation错误

    今日编译apache时出错: #./configure --prefix……检查编辑环境时出现: checking for APR... noconfigure: error: APR not fou ...

  4. 时下世界上最先进的液晶面板技术---ips

    IPS是英文In-Plane Switching的缩写,英文含义为平面转换屏幕技术,由日立公司于2001推出的液晶面板技术,俗称“Super TFT”,是目前世界上最先进的液晶面板技术,目前已经广泛使 ...

  5. bat命令遍历文件和bat参数说明

    **************************************************************************************************** ...

  6. 网络流合集:bzoj1433,1934,1854 题解

    转载请注明:http://blog.csdn.net/jiangshibiao/article/details/23992205 网络流/二分图大合集 [NO.1*原题] 1433: [ZJOI200 ...

  7. java 十进制转十六进制、十进制转二进制、二进制转十进制、二进制转十六进制

    //10进制转16进制 Integer.toHexString(20); //10进制转2进制 Integer.toBinaryString(10); //16进制转10进制 Integer.pars ...

  8. element开源框架

    vue-element-admin:https://gitee.com/accest/bod-element   https://gitee.com/liuyuantao/vue-element-ad ...

  9. easyui首页模板

    Easyui首页html代码 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "htt ...

  10. Hibernate 表连接hql语句

    现有两个表 user 表 和 VIPcard 表 UserVo  user VIPcardVo 中含有 UserVo user select v from VIPCardVo v left join ...