首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Instagram故事进度栏

Instagram故事进度栏
EN

Stack Overflow用户
提问于 2022-12-01 16:56:15
回答 1查看 14关注 0票数 0

我正在用HTML、TailwindCSS和JavaScript构建类似于instagram故事函数的东西。我有6种不同的幻灯片,在这些幻灯片中,我使用hammerJS的触控按钮导航。在顶部,我有6个进度栏,当用户正在查看当前幻灯片时,它们应该加载。我是和animeJS一起做的。旋转木马是用swiperJS设置的。我的问题是,我无法用animeJS加载当前幻灯片的进度条。也许有人能帮我?

HTML:

代码语言:javascript
复制
<div class="z-50 absolute fixed top-4 left-4 grid grid-cols-6 gap-4 max-w-md">
        <div class="w-10 h-1 bg-slate-200/50 rounded-full">
          <div id="progressSlide1" style="width: 0%;"
            class="h-full opacity-100 text-center text-xs text-white bg-white rounded-full"></div>
        </div>
        <div class="w-10 h-1 bg-slate-200/50 rounded-full">
          <div id="progressSlide2" style="width: 0%;"
            class="h-full opacity-100 text-center text-xs text-white bg-white rounded-full"></div>
        </div>
        <div class="w-10 h-1 bg-slate-200/50 rounded-full">
          <div id="progressSlide3" style="width: 0%;"
            class="h-full opacity-100 text-center text-xs text-white bg-white rounded-full"></div>
        </div>
        <div class="w-10 h-1 bg-slate-200/50 rounded-full">
          <div id="progressSlide4" style="width: 0%;"
            class="h-full opacity-100 text-center text-xs text-white bg-white rounded-full"></div>
        </div>
        <div class="w-10 h-1 bg-slate-200/50 rounded-full">
          <div id="progressSlide5" style="width: 0%;"
            class="h-full opacity-100 text-center text-xs text-white bg-white rounded-full"></div>
        </div>
        <div class="w-10 h-1 bg-slate-200/50 rounded-full">
          <div id="progressSlide6" style="width: 0%;"
            class="h-full opacity-100 text-center text-xs text-white bg-white rounded-full"></div>
        </div>
      </div>

旋转木马:

代码语言:javascript
复制
let swiper = new Swiper(".mySwiper", {
      speed: 0,
      longSwipes: false,
      allowTouchMove: false,
    });

让进度栏充满前一个屏幕(就像您跳过故事一样):

代码语言:javascript
复制
swiper.on('slideNextTransitionStart', function () {
      for (let i = 0; i < swiper.activeIndex; i++) {
        $(`#progressSlide${i + 1}`).css('width', '100%');
      }
    });

    swiper.on('slidePrevTransitionStart', function () {
      for (let i = 6; i > swiper.activeIndex; i--) {
        $(`#progressSlide${i}`).css('width', '0%');
      }
    });

用hammerJS进行触摸导航:

代码语言:javascript
复制
let hammertime = new Hammer(document.querySelector('#swiper'));

    hammertime.on('tap', (e) => {
      if (e.center.x > window.innerWidth / 2) {
        swiper.slideNext();
      } else {
        swiper.slidePrev()
      }
    });

AnimeJS时间线:

代码语言:javascript
复制
let timeline = anime.timeline({
      targets: `#progressSlide${swiper.activeIndex}`,
      width: "100%",
      autoplay: true,
      duration: 500,
      easing: 'linear',
      loop: false
    })

我想像这样用动画JS加载当前屏幕:

代码语言:javascript
复制
swiper.on('slideChange', function () {
      timeline.pause();
      timeline.restart();
      timeline.add({
        targets: `#progressSlide${swiper.activeIndex}`,
        width: "100%"
      })
      timeline.play();
    });

但它不能正常工作。每次它从一开始开始,意味着在到达屏幕3之后,它从屏幕1、2和3的进展动画开始,但是我只希望它只用于屏幕3,而当前的屏幕已经满载。

EN

回答 1

Stack Overflow用户

发布于 2022-12-01 17:56:01

找到了解决办法:

创建动画功能:

代码语言:javascript
复制
function animationProcess() {
      anime({
        targets: `#progressSlide${swiper.activeIndex + 1}`,
        width: '100',
        easing: 'linear',
        duration: 5000,
        complete: function (anim) {
          swiper.slideNext();
        }
      });
    }

并在刷更新函数中添加.remove函数和动画功能:

代码语言:javascript
复制
swiper.on('slideNextTransitionStart', function () {
      for (let i = 0; i < swiper.activeIndex; i++) {
        $(`#progressSlide${i + 1}`).css('width', '100%');
      };
      anime.remove(`#progressSlide${swiper.activeIndex}`);
      animationProcess();
    });

    swiper.on('slidePrevTransitionStart', function () {
      for (let i = 6; i > swiper.activeIndex; i--) {
        $(`#progressSlide${i}`).css('width', '0%');
      };
      anime.remove(`#progressSlide${swiper.activeIndex + 2}`);
      animationProcess();
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74645495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档