微信小程序无限滚动

在这里插入图片描述

1、wxml

 <view class="notice-container" style="height:{{totalHeight}}px" catchtap="onNewProduct">
  <view class="notice-title-container">
    <block wx:for="{{titleArray}}" wx:key="index" data-index="{{index}}">
      <view class="notice-line-title-item" style="background:{{item.background}};color:{{item.color}};width: {{item.width}};">
        {{item.value}}</view>
    </block>
  </view>
  <view class="notice-swiper" style="height:{{lineArray.length*38}}px">
    <view class="notice-position" style="top:-{{move}}px">
      <view class="notice-for" wx:for="{{lineArray}}" wx:key="index" data-index="{{index}}">
        <view class="notice-item-root-container">
          <view class="notice-item-container">
            <block wx:for="{{item}}" wx:key="index" data-index="{{index}}" wx:for-item="innerItem">
              <view class="notice-line-item-container" style="color:{{innerItem.color}};width: {{innerItem.width}};">
                <view class="notice-line-item">{{innerItem.value}}</view>
              </view>
            </block>
          </view>
          <view class="notice-item-divider"></view>
        </view>
      </view>
    </view>
  </view>
</view>

2、wxss 

.notice-container {
  /* display: flex;
	flex-direction: column; */
	margin-top: 30rpx;
  width: 702rpx;
  margin-left: 24rpx;
  background: #FFFFFF;
  border-radius: 16rpx;
  overflow: hidden;
}

.notice-title-container {
  width: 100%;
  height: 30px;
  display: flex;
  flex-direction: row;
}

.notice-line-title-item {
  font-size: 28rpx;
  font-family: PingFang SC;
  font-weight: 500;
  height: 60rpx;
  line-height: 60rpx;
  color: #FFFFFF;
  height: 100%;

  display: -webkit-box;
  overflow: hidden;
  text-overflow: ellipsis;
  -webkit-line-clamp: 1;
  -webkit-box-orient: vertical;
  display: flex;
  flex-direction: row;
  justify-content: center;
  /* flex: 1; */
}

.notice-swiper {
  width: 100%;
  height: fit-content;
  float: left;
  overflow: hidden;
  position: relative;
}

.notice-position {
  width: 100%;
  float: left;
  position: absolute;
}

.notice-for {
  width: 100%;
  float: left;
  height: 38px;
}


.notice-item-root-container {
  display: flex;
  flex-direction: column;
  width: 100%;
  height: 38px;
}

.notice-item-container {
  width: 100%;
  height: 37px;
  display: flex;
  flex-direction: row;
}

.notice-item-divider {
  width: 640rpx;
  height: 1px;
  background: #f4f4f4;
  margin-left: 31rpx;
}
.notice-line-item-container {
  height: 100%;
  /* flex: 1; */
  display: flex;
  flex-direction: row;
  overflow: hidden;
  max-lines: 1;
  white-space: nowrap;
  justify-content: center;
}
.notice-line-item{
  margin-left: 6rpx;
  margin-right: 6rpx;
  font-size: 24rpx;
  font-family: PingFang SC;
  font-weight: 500;
  color: #333333;
  width: fit-content;
  display: flex;
  flex-direction: row;
  align-items: center;
  height: 100%;
  overflow: hidden;
  line-height: 24rpx;
  max-lines: 1;
  white-space: nowrap;
}

3、js

let interval1
let interval2 

data: {
        serviceData: null,
        titleArray: [],
        move: 0,
        searchBottom: 0,
        tabHeight: 0,
        totalHeight: 0
    },


  onLoad: function (options) {
        var that = this;
        /**生成背景星星-开始 */
        var stars = 400;
        var r = 0;
        var stararray = [];
        for (var i = 0; i < stars; i++) {
            var s = 0.2 + Math.random() * 1;
            var curR = r + Math.random() * 300;
            var rotateY = Math.random() * 360;
            var rotateX = Math.random() * -50;
            stararray[i] = {
                curR: curR,
                rotateY: rotateY,
                rotateX: rotateX,
                s: s
            };
        }
        this.setData({
            stararray: stararray,
        })
        /**生成背景星星-结束 */
        let serviceData = {}
        serviceData.titlecolor = "#ffffff"
        serviceData.titleBackground = "#1E9FFF"
        let serviceArray = []
        let innerData1 = new Object()
        innerData1.color = "#999999"
        innerData1.title = "震源地"
        innerData1.width = "310rpx"
        // innerData1.value = ["列1行1dfaddddddfadfad", "列1、行2", "列1、行3"]
        let innerData2 = new Object()
        innerData2.width = "100rpx"
        innerData2.color = "#333333"
        innerData2.title = "震级"
        // innerData2.value = ["列2、行111111111111111111111", "列2、行2", "列2、行3", "列2、行4"]
        let innerData3 = new Object()
        innerData3.color = "#d61515"
        innerData3.title = "地震时间"
        innerData3.width = "300rpx"
        // innerData3.value = ["列3、行1", "列3、行2", "列3、行3", "列3、行4"]
        serviceArray.push(innerData1)
        serviceArray.push(innerData2)
        serviceArray.push(innerData3)
        serviceData.array = serviceArray
        //以上模拟服务端数据
        let lineArray = []
        let titleArray = []

        let count = serviceData.array[0].value.length
        let array = serviceData.array
        let itemColorArray = []
        array.forEach(e => {
            let itemData = {}
            itemData.value = e.title
            itemData.width = e.width
            itemData.color = serviceData.titlecolor
            itemData.background = serviceData.titleBackground
            titleArray.push(itemData)
            itemColorArray.push(e.color)
        })
        let colmnIndex = 0
        for (let i = 0; i < count; i++) {
            let itemArray = []
            array.forEach(e => {
                let itemData = {}
                itemData.value = e.value[i]
                itemData.width = e.width
                itemData.color = itemColorArray[colmnIndex]
                itemArray.push(itemData)
                colmnIndex++
            })
            colmnIndex = 0
            lineArray.push(itemArray)
        }
        this.setData({
            lineArray,
            titleArray,
        })
        if (lineArray.length > 7) {
            //当行数大于5的时候滚动轮播
            this.setData({
                totalHeight: 7 * 38
            })
            let that = this
            interval1 = setInterval(function () {
                that.setData({
                    move: that.data.move + 1,
                })
            }, 18)
            interval2 = setInterval(function () {
                let detail = []
                for (let i = 1; i < that.data.lineArray.length; i++) {
                    detail.push(that.data.lineArray[i])
                }
                detail.push(that.data.lineArray[0])
                that.setData({
                    lineArray: detail,
                    move: 0,
                })

            }, 684)
            //684/18 = 38(一行的高度)
        } else {
            this.setData({
                totalHeight: lineArray.length * 38 + 38
            })
        }
    },

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

滴滴答答哒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值