前端插件之头部tab栏左右滑动

Love The Way You Lie 2022-06-08 20:45 479阅读 0赞

效果图:

20170901133831094

1.css部分

  1. <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"/>
  2. <style type="text/css">
  3. *{margin: 0; padding: 0; box-sizing: border-box; }
  4. html,body{width: 100%; overflow: hidden;}
  5. ul{width: auto; list-style: none; height: 65px;}
  6. li{float: left; height: 65px;width: 105px; border: 1px solid #C2C2C2; text-align: center;color: #C2C2C2;
  7. line-height: 65px; margin-right: 10px;border-radius: 5px;}
  8. #contentNav{ width:100%; overflow: hidden;margin-left: 5%;}
  9. .font-red{color: #FFFFFF; background: blue;}
  10. </style>

2.html部分

  1. <div id="contentNav">
  2. <ul id="contentNavul">
  3. <li class="font-red">演讲者模式</li>
  4. <li>声控模式</li>
  5. <li>固定画面模式</li>
  6. <li>轮播图模式</li>
  7. <li>模式1</li>
  8. <li>模式2</li>
  9. <li>模式3</li>
  10. </ul>
  11. </div>

3.最主要的是js部分,

  1. <script type="text/javascript" src="http://cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
  2. <script type="text/javascript">
  3. var hg = window.screen.width;
  4. var contentNav = document.getElementById("contentNav");
  5. contentNav.style.width = (hg*0.9) +'px';
  6. var contentNavul = document.getElementById("contentNavul");
  7. var ali = contentNavul.getElementsByTagName('li');
  8. contentNavul.style.width = ali.length*(ali[0].offsetWidth+10)+'px';
  9. function Slide(){
  10. this.windowWidth = window.screen.width;//屏幕的宽度
  11. this.divWidth = 0;//每个div宽度
  12. this.resPlaceX = 0;//最终的位置X
  13. this.moveDistance = 0;//移动的距离
  14. this.startTranform = 0;//当前的transform值
  15. this.startTranformStr = ''//transform字符串
  16. this.translate3dX = 0;//每次算到的ul移动translate3dX值
  17. this.disX = 0;//当前div距离屏幕左边距离
  18. this.startX = 0;//触摸开始的x值
  19. }
  20. /*--------------------获取当前transfrom-----------------------------*/
  21. Slide.prototype.getTransfrom = function(){
  22. this.startTranformStr = contentNavul.style.transform;
  23. this.startTranform = this.startTranformStr.slice(this.startTranformStr.indexOf('(') + 1,
  24. this.startTranformStr.indexOf('px'));
  25. if (this.startTranform == '') {this.startTranform = 0};
  26. this.startTranform = parseFloat(this.startTranform);
  27. }
  28. /*--------------------改变当前div到中间-----------------------------*/
  29. Slide.prototype.changeActive = function(myIndex){
  30. this.disX = $('li').eq(myIndex).offset().left;//当前div距离屏幕左边距离
  31. this.divWidth = $('li').eq(myIndex).width();
  32. this.resPlaceX = (this.windowWidth - this.divWidth) / 2;
  33. this.moveDistance = this.disX - this.resPlaceX;
  34. this.getTransfrom();
  35. this.translate3dX = this.startTranform + -this.moveDistance
  36. this.boundaryCondition();
  37. $('ul').css({
  38. 'transform' : 'translate3d('+ this.translate3dX +'px,0,0)',
  39. 'transition-duration' : '1s'
  40. });
  41. }
  42. /*------------------------边界限制-----------------------------------*/
  43. Slide.prototype.boundaryCondition = function(){
  44. if(this.translate3dX > 0){
  45. this.translate3dX = 0;
  46. }else if(-this.translate3dX > $('ul').width() - this.windowWidth + hg*0.1 -10){
  47. this.translate3dX = -($('ul').width() - this.windowWidth + hg*0.1 -10);
  48. }
  49. }
  50. var slide = new Slide();
  51. $('li').on('click',function(){
  52. $('li').removeClass('font-red');
  53. $(this).addClass('font-red');
  54. slide.changeActive($(this).index());
  55. });
  56. $('ul').on('touchstart',function(e){
  57. $('ul').css({'transition-duration' : '0s'});
  58. slide.getTransfrom();
  59. var touchestartEv = e || event;
  60. slide.startX = touchestartEv.touches[0].clientX;
  61. });
  62. $('ul').on('touchmove',function(ev){
  63. var touchmoveEv = ev || event;
  64. var moveX = touchmoveEv.touches[0].clientX;;
  65. var translateX = slide.startX - moveX;
  66. slide.translate3dX = slide.startTranform + -translateX;
  67. slide.boundaryCondition();
  68. console.log(slide.startTranform)
  69. $('ul').css({
  70. 'transform' : 'translate3d('+ slide.translate3dX +'px,0,0)'
  71. })
  72. });
  73. </script>

发表评论

表情:
评论列表 (有 0 条评论,479人围观)

还没有评论,来说两句吧...

相关阅读