80行代码实现react-native无缝滚动组件兼容web端

实现效果如图,gif录制有点卡顿,实际效果要好很多

gif1.gif

数据展示型组件重要的是在于实现思想

要实现无缝滚动必定要将滚动自元素复制一份,从而衔接滚动的头部与尾部;这里主要用到React.cloneElement(child, props)React.Children.forEach()两个api,将需要渲染的子元素劫持,复制一份后渲染,并加上对应的key值:

React.Children.forEach(this.props.children, (child: React.ReactElement<any>, index) => {
      let newProps = {
            key: `${this.key}${index}flag`,
            ...child.props
      };
      this.arr.push(React.cloneElement(child, newProps));
});

此时得到了“双份”的children,当children滚动了“一份”children位置的时候将动画重新执行;从而造成视觉上的无缝滚动;滚动动画控制主要用到了react-nativeapiAnimated.timing:

        Animated.timing(this.animation, {
            toValue: meter,                                           // 动画终点值
            duration: this.props.scrolltime || 5000, 
            easing: Easing.linear,
        }).start(() => {
            this.animation = new Animated.Value(0);    // 重置动画初始值
        });

react-native持续动画的必要优化:呼叫原生动画驱动 + transform(translate):

        Animated.timing(this.animation, {
            toValue: meter,                                           
            duration: this.props.scrolltime || 5000, 
            easing: Easing.linear,
            useNativeDriver: true                        // 启用原生动画驱动
        })
        ……
        <Animated.View style={[{
              transform: {translateX: this.animation}    // transform(translate)控制动画位置
          }, styles]}>
                {newChildren}
        </Animated.View>

由于Animated库同时支持web端,只需将Animated.View 替换为 Animated.div 即可兼容到web端;

源码详见 https://github.com/lvzhiyi/react-naitve-SeamlessScroll,记得留下小心心(star);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 深入JSX date:20170412笔记原文其实JSX是React.createElement(componen...
    gaoer1938阅读 8,117评论 2 35
  • 3. JSX JSX是对JavaScript语言的一个扩展语法, 用于生产React“元素”,建议在描述UI的时候...
    pixels阅读 2,925评论 0 24
  • 四月九号,《欢乐喜剧人》第三季收官,辽宁民间艺术团的文松团队获得了第三季冠军。 其实这样的节目谁拿冠军都无所谓,重...
    酒言醉语阅读 1,066评论 14 8
  • 今天在棕榈泉 以为是大厅 结果在18楼 空中花园 对堂风不要太爽 早上怕迟到打车过去的 肉疼一下 还好没迟到 给...
    桃花花_866d阅读 183评论 0 0
  • 距离中国式众筹首席架构师第七期报道时间越来越紧迫,为了把杨勇老师布道首席架构师班的精神推广传承下去,本期我一共推荐...
    阿渡SZ阅读 281评论 0 0