原生js写头部tab栏左右滑动支持移动端

ゝ一世哀愁。 2022-06-09 08:55 370阅读 0赞

前面有一篇功能较完善的,但是是jq和原生混搭的,有朋友只需要原生的,就做了个简单的;

1.css

  1. *{margin: 0; padding: 0; box-sizing: border-box; text-decoration: none;list-style:none}
  2. html,body{width: 100%; overflow: hidden;}
  3. #contentNav{width: 100%;margin-left:20px;height: 67px;overflow: hidden;}
  4. #contentNavul {height: 100%;transition: all ease 0s;}
  5. #contentNavul li{float: left;height: 65px;width: 105px; border: 1px solid #CCCCCC; text-align: center;
  6. color: #CCCCCC;line-height: 65px; margin-right: 10px;border-radius: 5px;font-size: 14px;}
  7. #contentNavul li.selected{background: blue;color: #FFFFFF}

2.html

  1. <div id="contentNav">
  2. <ul id="contentNavul">
  3. <li class="selected">演讲者模式</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. var hg = window.screen.width;
  2. var contentNav = document.getElementById("contentNav");
  3. contentNav.style.width = (hg-40) +'px';
  4. var contentNavul = contentNav.getElementsByTagName('ul')[0];
  5. var ali = contentNavul.getElementsByTagName('li');
  6. contentNavul.style.width = ali.length*(ali[0].offsetWidth+10)+'px';
  7. for (var i=0;i<ali.length;i++) {
  8. ali[i].index=i;
  9. ali[i].οnclick=function(){
  10. for (var j=0;j<ali.length;j++) {
  11. ali[j].className="";
  12. }
  13. ali[this.index].className="selected";
  14. tocenter(this.index);
  15. };
  16. function tocenter(index){
  17. var disX = ali[index].offsetLeft;//当前div距离屏幕左边距离
  18. var divWidth = ali[index].offsetWidth;
  19. var resPlaceX = (hg - divWidth) / 2;
  20. var moveDistance = disX - resPlaceX;
  21. var a=getmarginleft(contentNavul.style.marginLeft);
  22. var translateX = a + -moveDistance;
  23. console.log(translateX)
  24. var maxleft=getmarginleft(contentNavul.style.width)-getmarginleft(contentNav.style.width);
  25. if(translateX > 0){
  26. translateX = 0;
  27. }
  28. if(translateX < 0){
  29. if(-translateX > maxleft){
  30. translateX = -maxleft;
  31. }else{
  32. translateX = translateX;
  33. }
  34. }
  35. contentNavul.style.marginLeft = translateX +"px";
  36. }
  37. function getmarginleft(a){
  38. a=a.slice(a.indexOf('(') + 1,a.indexOf('px'));
  39. if (a == '') {a = 0};
  40. a= parseFloat(a);
  41. return a;
  42. }
  43. var startX=0;
  44. var a=0;
  45. contentNavul.ontouchstart=function(e){
  46. var touchestartEv = e || event;
  47. startX = touchestartEv.touches[0].clientX;
  48. a=getmarginleft(contentNavul.style.marginLeft);
  49. }
  50. contentNavul.ontouchmove=function(ev){
  51. var touchmoveEv = ev || event;
  52. var moveX = touchmoveEv.touches[0].clientX;;
  53. var translateX =startX - moveX - a;
  54. var maxleft=getmarginleft(contentNavul.style.width)-getmarginleft(contentNav.style.width);
  55. if(translateX > maxleft){
  56. translateX = maxleft;
  57. }
  58. if(translateX < 0){
  59. translateX = 0;
  60. }
  61. console.log(translateX);
  62. contentNavul.style.marginLeft = "-" + translateX +"px";
  63. }

发表评论

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

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

相关阅读