亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 React 中滑動拖動旋轉木馬

如何在 React 中滑動拖動旋轉木馬

qq_笑_17 2023-03-03 15:04:38
我是一名初級開發人員,正在努力解決頁面頂部有一個帶有大約 10 張卡片的輪播的問題。并非所有的卡片都可以同時顯示在屏幕上,所以角落里有 2 個箭頭可以滾動它們(左箭頭和右箭頭)。當您單擊向右箭頭時,卡片會滾動到末尾,當您單擊向左箭頭時,它們會從右向左向后移動。當您按下鼠標并按住圖像并拖動它們時,我怎樣才能使它們向左或向右移動?我需要讓它們不僅通過單擊箭頭而且還通過鼠標拖動移動...我是否需要使用一些庫(我找到了 react-hammerjs,但沒有找到任何好的文檔/示例如何使用它)?預先感謝您的幫助這里有一些代碼可供參考:export const CardsBlock = () => {  const scrollContainer = useRef(null)  const [scrolled, setScrolled] = useState(false)  const dispatch = useDispatch()  useEffect(() => {    const resizeListener = (e) => {      if (e.target.outerWidth <= sizes.mobile) {        setScrolled(null)      } else {        setScrolled(false)      }    }    window.addEventListener('resize', resizeListener)    return () => {      window.removeEventListener('resize', resizeListener)    }  }, [])  useEffect(() => {    if (scrolled) {      scrollTo(scrollContainer.current, scrollContainer.current.offsetWidth)    } else {      scrollTo(scrollContainer.current, 0)    }  }, [scrolled])  return (    <Well>      <Container>        <Wrapper padding={'0 0 16px'} justify={'space-between'} align={'center'}>          <TitleText width={'auto'}>{translator('specilization.title', true)}</TitleText>          <ArrowsContainer>            <Icon              onClick={() => setScrolled(false)}              cursor={'pointer'}              type={'arrow_left'}              color={scrolled ? 'black4' : 'black1'}            />            <Icon              onClick={() => setScrolled(true)}              cursor={'pointer'}              type={'arrow_right'}              color={scrolled ? 'black1' : 'black4'}            />          </ArrowsContainer>
查看完整描述

2 回答

?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

由于您沒有提供任何片段或源代碼,這里是一些基本示例。它應該讓你開始。


const slider = document.querySelector('.items');

let isDown = false;

let startX;

let scrollLeft;


slider.addEventListener('mousedown', (e) => {

  isDown = true;

  startX = e.pageX - slider.offsetLeft;

  scrollLeft = slider.scrollLeft;

});


slider.addEventListener('mouseleave', () => {

  isDown = false;

});


slider.addEventListener('mouseup', () => {

  isDown = false;

});


slider.addEventListener('mousemove', (e) => {

  if(!isDown) return;

  e.preventDefault();

  const x = e.pageX - slider.offsetLeft;

  const walk = (x - startX) * 3; //scroll-fast

  slider.scrollLeft = scrollLeft - walk;

});

https://codepen.io/toddwebdev/pen/yExKoj


查看完整回答
反對 回復 2023-03-03
?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

在更多研究中,在“react-swipeable”npm 模塊中找到了答案 https://www.npmjs.com/package/react-swipeable

由于此處已經定義了箭頭圖標的 onclick 邏輯,因此添加了相同的邏輯來響應可滑動組件:

      <Swipeable onSwipedLeft={() => setScrolled(true)} onSwipedRight={() => setScrolled(false)} trackMouse={true}>

        <SpecializationsInnerContainer ref={scrollContainer}>

          {specializations.map((specialization) =>

            <SpecializationCard

              key={specialization.id}

              image={specialization.image}

              title={specialization.title}

              color={'black1'}

              borderColor={'transparent'}

              onClick={() => handleOnClick(specialization.id)}

            />

          )}

          <SpecializationCard borderColor={'black15'} image={'image.png'} isAll onClick={openSpecializationFilter} title={translator('specilization.all', true)} color={'transparent'}/>

        </SpecializationsInnerContainer>

       </Swipeable>


查看完整回答
反對 回復 2023-03-03
  • 2 回答
  • 0 關注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號