yls*_*lsv 1 javascript drag swipe carousel reactjs
我是一名初级开发人员,正在努力解决页面顶部有大约 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>
</Wrapper>
<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>
</Container>
</Well>
)
}
Run Code Online (Sandbox Code Playgroud)
小智 7
由于您没有提供任何片段或源代码,因此这里是一些基本示例。它应该让你开始。
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;
});
Run Code Online (Sandbox Code Playgroud)
https://codepen.io/toddwebdev/pen/yExKoj
| 归档时间: |
|
| 查看次数: |
12563 次 |
| 最近记录: |