vue中实现简单轮播效果

r囧r小猫 2022-05-22 08:38 333阅读 0赞

html:

  1. <div class="cate-main">
  2. <div class="carousel-contain">
  3. <--图片部分--> <ul class="carousel-wrap transition">
  4. <li class="carousel-slide">
  5. <img src="../assets/images/category/banner1.png" alt="图1">
  6. </li>
  7. <li class="carousel-slide">
  8. <img src="../assets/images/category/banner2.png" alt="图2">
  9. </li>
  10. <li class="carousel-slide">
  11. <img src="../assets/images/category/banner3.png" alt="图3">
  12. </li>
  13. <li class="carousel-slide">
  14. <img src="../assets/images/category/banner1.png" alt="图1">
  15. </li>
  16. </ul>
  17. <--切换按钮部分--> <p class="carousel-button-wrap">
  18. <span class="carousel-button-slide" :class="{active: activeIndex == 0 || activeIndex == 3}" @click="switchPic (0)"></span>
  19. <span class="carousel-button-slide" :class="{active: activeIndex == 1}" @click="switchPic (1)"></span>
  20. <span class="carousel-button-slide" :class="{active: activeIndex == 2}" @click="switchPic (2)"></span>
  21. </p>
  22. </div>
  23. </div>

js:

  1. data () {
  2. return {
  3. timeId: 0,
  4. timeOutId: 0,
  5. activeIndex: 0
  6. }
  7. },
  8. activated () {
  9. this.carousel ();
  10. },
  11. methods: {
  12. carousel () {
  13. clearTimeout(this.timeOutId);
  14. let ul = document.getElementsByClassName('carousel-wrap')[0];
  15. let li = document.getElementsByClassName('carousel-wrap')[0].getElementsByTagName("li");
  16. let span = document.getElementsByClassName('carousel-button-wrap')[0].getElementsByTagName("span");
  17. let num = 0;
  18. let len = li.length;
  19. let self = this;
  20. this.timeId = setInterval(function(){
  21. num = ++num == len ? 0 : num;
  22. self.activeIndex = num;
  23. if ( num == 0 ) {
  24. ul.classList.remove('transition');
  25. ul.style.transform = 'translateX' + '(' + '-' + 78.57*num + 'rem' + ')';
  26. } else {
  27. ul.classList.add('transition');
  28. ul.style.transform = 'translateX' + '(' + '-' + 78.57*num + 'rem' + ')';
  29. }
  30. }, 2500);
  31. },
  32. switchPic (index) {
  33. clearInterval(this.timeId);
  34. this.activeIndex = index;
  35. let ul = document.getElementsByClassName('carousel-wrap')[0];
  36. if ( index == 0 ) {
  37. ul.style.transform = 'translateX' + '(' + '-' + 78.57*index + 'rem' + ')';
  38. } else {
  39. ul.style.transform = 'translateX' + '(' + '-' + 78.57*index + 'rem' + ')';
  40. }
  41. let self = this;
  42. this.timeOutId = setTimeout(function () {
  43. self.carousel ();
  44. }, 3000)
  45. }
  46. }
  47. destoryed () {
  48. clearInterval(this.timeId);
  49. }

css:

  1. .cate-main {
  2. width: 78.57rem;
  3. height: 57.14rem;
  4. position: relative;
  5. .carousel-contain{
  6. width: 78.57rem;
  7. height: 57.14rem;
  8. overflow: hidden;
  9. .carousel-wrap{
  10. list-style: none;
  11. width: 314.29rem;
  12. padding: 0;
  13. .carousel-slide{
  14. float: left;
  15. }
  16. }
  17. .transition {
  18. transition: all 1s ease;
  19. }
  20. .carousel-button-wrap {
  21. position: absolute;
  22. bottom: 0;
  23. left: 28.285rem;
  24. .carousel-button-slide {
  25. display: inline-block;
  26. width: 6rem;
  27. height: 0.5rem;
  28. margin-right: 2rem;
  29. opacity: 0.5;
  30. background: #FFFFFF;
  31. border-radius: 0;
  32. }
  33. .active{
  34. opacity: 1;
  35. }
  36. }
  37. }
  38. }

发表评论

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

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

相关阅读

    相关 vue实现简单

    实现思路: 1. 将vue的框架封装在function中,在界面刷新时调用,将要轮播的图片存放在data中,还有下面的列表也分别保存在data中的一个数组中,然后每隔一