注册
web

作为一名前端给自己做一个算命转盘不过分吧

算命转盘


zodiac.gif

前言


给自己做一个算命转盘,有事没事算算命,看看运势挺好的(虽然我也看不懂)。


这个算命转盘我是实现在了自己的个人博客中的这里是地址,感兴趣可以点进去看看。


实现过程


开发技术:react + ts


该转盘主要是嵌套了三层 圆形滚动组件 来实现的,再通过 ref 绑定组件,调用其中的 scrollTo 方法即可使组件发生指定的滚动,再传入随机数,即可实现随机旋转效果,通过嵌套三层该组件实现三层的随机旋转,模拟“算命”效果。


// 这是精简后的代码
export default () => {
const onScrollCircle = () => {
const index = Math.floor(Math.random() * zodiacList.length)
scrollCircleRef.current?.scrollTo({index, duration: 1000})
}
return (
<>
<ScrollCircle ref={scrollCircleRef}></ScrollCircle>
<button onClick={() => onScrollCircle}>点击旋转</button>
</>

)
}

三层大致结构如下:具体代码可以看码上掘金



  • 转盘的第一层

export default () => {
return (
<ScrollCircle>
{list.map((item, index) => (
<ScrollCircle.Item
key={index}
index={index}
>

<CircleItem />
</ScrollCircle.Item>
))}
</ScrollCircle>

)
}


  • 转盘的第二层

const CircleItem = () => {
return (
<ScrollCircle>
{list.map((item, index) => (
<ScrollCircle.Item
key={index}
index={index}
>

<CircleItemChild />
</ScrollCircle.Item>
))}
</ScrollCircle>

)
}


  • 转盘的第三层

const CircleItemChild = () => {
return (
<ScrollCircle>
{list.map((item, index) => (
<ScrollCircle.Item
key={index}
index={index}
>

<div>
内容
</div>
</ScrollCircle.Item>
))}
</ScrollCircle>

)
}

圆形滚动组件


现在的 圆形滚动组件 支持展示到上下左右中各个方向上,要是大家使用过程中有什么意见可以提一下,我尽力实现,当然能提 pr 最好了(∪^ェ^∪)。


组件源码地址


线上Demo演示地址


image.png

主要是在旧版的基础上不断完善而来的,旧版圆形滚动组件的 往期文章


props等使用文档


ScrollCircle


属性名描述类型默认值
listLength传入卡片的数组长度number(必选)
width滚动列表的宽度string"100%"
height滚动列表的高度string"100%"
centerPoint圆心的位置"center" , "auto" , "left" , "right" , "bottom" , "top""auto (宽度大于高度时在底部,否则在右侧)"
circleSize圆的大小"inside" , "outside""outside (圆溢出包裹它的盒子)"

其他的属性...(篇幅问题就不全放上来了,可以直接去线上Demo演示地址查看)


centerPoint


主要通过该属性,将圆心控制到上下左右中间位置。


属性名描述
auto自动适应,当圆形区域宽度大于高度时,圆心会自动在底部,否则在右边
center建议搭配 circleSize='inside' 一起使用(让整个圆形在盒子内部)
left让圆心在左边
top让圆心在顶部
right让圆心在右边
bottom让圆心在底部

作者:滑动变滚动的蜗牛
来源:juejin.cn/post/7254014646779428922

0 个评论

要回复文章请先登录注册