【问题标题】:How to implement a swipe logic to my component?如何为我的组件实现滑动逻辑?
【发布时间】:2020-03-24 07:11:43
【问题描述】:

我用 React-slideshow-image 做了一个轮播,但问题是在移动版上不能滑动。 所以我希望能够自己设置滑动,但我不知道该怎么做。

你能帮我吗?

这是我的组件(nextjs)的代码

const Diaporama = () => {
  return (
  <div className="slider">

    <Fade duration={5000}
          transitionDuration={500}
          infinite={true}
          indicators={true}
          scale={1}
          arrows={false}>
      {
        images.map((each, index) => <img key={index} alt={each} style={{width: '100%'}} src={each}/>)
      }
    </Fade>
  </div>

【问题讨论】:

    标签: javascript reactjs carousel swipe next.js


    【解决方案1】:

    你总是可以尝试这样的......

    const slider = document.querySelector('.items');
    let isDown = false;
    let startX;
    let scrollLeft;
    
    slider.addEventListener('mousedown', (e) => {
      isDown = true;
      slider.classList.add('active');
      startX = e.pageX - slider.offsetLeft;
      scrollLeft = slider.scrollLeft;
    });
    slider.addEventListener('mouseleave', () => {
      isDown = false;
      slider.classList.remove('active');
    });
    slider.addEventListener('mouseup', () => {
      isDown = false;
      slider.classList.remove('active');
    });
    slider.addEventListener('mousemove', (e) => {
      if(!isDown) return;
      e.preventDefault();
      const x = e.pageX - slider.offsetLeft;
      const walk = (x - startX) * 1; //scroll-fast
      slider.scrollLeft = scrollLeft - walk;
    });
    //VARIABLES BECAUSE CSS PREPROCESSORS ARE COOL
    $gray: #555;
    $yellow: #f2e968;
    $white: #efefef;
    
    //GET THE GOOGLE FONT SPECIMEN
    @import url(https://fonts.googleapis.com/css?family=Rubik);
    
    body,
    html {
      color: #fff;
      text-align: center;
      background: $white;
      font-family: Helvetica, sans-serif;
      margin: 0;
    }
    
    .items {
      display: flex;
      overflow-x: auto;
      -webkit-overflow-scrolling: touch;
      scroll-snap-type: x mandatory;  
      position: relative;
      width: 100%;
      overflow-y: hidden;
      white-space: nowrap;
      transition: all 0.2s;
      transform: scale(0.98);
      will-change: transform;
      user-select: none;
      cursor: pointer;
      scroll-behavior: smooth;
    }
    
    .items.active {
      background: rgba(255,255,255,0.3);
      cursor: grabbing;
      cursor: -webkit-grabbing;
      transform: scale(1);
      
    }
    
    .item {
      flex-shrink: 0;
      height: 100px;
      min-width: 600px;
      scroll-snap-align: start;
    }
      <div className="slider">
        <div class="items">
          <img class="item item-1" src="https://homepages.cae.wisc.edu/~ece533/images/airplane.png" />
          <img class="item item-2" src="https://homepages.cae.wisc.edu/~ece533/images/peppers.png" />   
        </div>
      </div>

    【讨论】:

    • 感谢您的回答,看起来效果很好,但在我的情况下它不起作用:/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 2011-06-01
    • 1970-01-01
    • 2022-09-25
    • 2021-05-18
    • 2021-12-01
    • 2014-06-05
    相关资源
    最近更新 更多