我写的是淘宝小部件,限制很多,用的是精灵图,说下大概思路,主要是通过背景图片的X  Y轴去控制,
首先创建一个组件
例:

然后在props定义需要的参数,可通过父组件传递修改
需要传入精灵图地址、单个影像宽高、一行多少个影像、总图数

在data里面定义一些固定参数
backgroundSize 为背景图片大小
backgroundImage 为背景图片
position 为 X Y 轴坐标数组,
current 当前图片索引
timer 定时器

然后就是渲染的页面

 调用页面

 精灵图素材

接下来我们写组件里面的计算X y轴坐标方法,
1. 首先通过已知一行的数量和总数量计算一竖的数量,
2. 创建一个length和总数一样多的数组
3. 填充背景图片以及图片大小,宽度为:单个影像宽度 * 一行个数 ,高度为:单个影像高度 * 一竖个数
4. 计算每个影像的X Y 轴坐标,从左到右,第一行结束切到下一行
5. 赋值完成生成数组
init() {
      return new Promise(async (resolve, reject) => {
        let {
          total: numlength,
          width: w,
          height: h,
          lineNum: lennum,
          bgUrl
        } = this.props
        const vertical = Math.ceil(numlength / lennum)
        let x = 0
        let y = 0
        let arr = new Array(numlength)
        this.setData({
          backgroundImage: `url(${bgUrl})`,
          backgroundSize: `${lennum * w}rpx ${vertical * h}rpx`
        })
        for (let i = 0; i < numlength; i++) {
          arr[i] = {
            x: -(x == 0 ? 0 : (x * w)),
            y: -(y == 0 ? 0 : (y * h))
          }
          if (x == (lennum - 1)) {
            x = 0
            y++
          } else {
            x++
          }
        }
        this.setData({
          position: arr
        }, () => {
          resolve()
        })
      })
    }
生成坐标数组初始化之后就可以开始播放了

paly是开始播放,判断是到了最后一页 如何是循环播放就重置索引从新播放,否则就是暂停播放清除定时器,接上自己想要的操作,

可以基于这个进一步改写,列如我们又一个精灵图有三个动作在里面,默认循环第一段,点击之后执行一次第二段,执行完再次切到第一段循环就可以这样写。
 先调用 stop清除默认动作的定时器,playes为第二段动作的方法,因为是个跳跃动作,有个暂停的动作,左右加了个定时器,执行完第二个之后切回第一个动作

最后效果

 小白一个,大佬多多包涵,因为第一次写淘宝小程序不熟,如果用其他框架写的话很多东西都可以优化,



















