微信小程序:实现节点进度条的效果;正在完成的节点有动态循环效果;横向,纵向排列

参考说明

微信小程序实现流程进度功能 - 知乎

上面的为一个节点进度条的例子,但并不完整,根据上述代码,进行修改完善,实现其效果

横向效果

代码

wxml

html 复制代码
<view class='order_process'>
  <view class='process_wrap' wx:for="{{processData}}" wx:key="index">
    <view class='process'>
      <view class='process_line' style="background:{{item.start}}"></view>
      <image class="process_icon {{item.icon === icon2 ? 'rotate-icon' : ''}}" src="{{item.icon}}"></image>
      <view class='process_line' style="background:{{item.end}}"></view>
    </view>
    <text class='process_name'>{{item.name}}</text>
  </view>
</view>

wxss

css 复制代码
.order_process {
  display: flex;
  flex-wrap: nowrap;
  padding: 10rpx 10rpx 20rpx 10rpx;
  background-color: #fff;
}
.process_wrap {
  display: flex;
  flex-direction: column;
  flex: 1;
  align-items: center;
}
.process {
  display: flex;
  align-items: center;
  width: 100%;
}
.process_icon {
  width: 35rpx;
  height: 35rpx;
}
.process_line {
  background: #eff3f6;
  flex: 1;
  height: 5rpx;
}
.process_name {
  font-size: 24rpx;
}
/* 定义旋转动画 */
@keyframes rotate360 {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}
/* 应用到 .rotate-icon 类 */
.rotate-icon {
  animation: rotate360 5s linear infinite; /* 5秒完成一次旋转,线性时间函数,无限循环 */
}

js

javascript 复制代码
Page({
  data: {
    icon1: '../img/process_1.png',
    icon2: '../img/process_2.png',
    icon3: '../img/process_3.png',
    processData: [],//节点信息
  },
  onLoad: function () {
    // 初始化数据 processData
    const data = [{
        name: '节点1',
        start: '#fff',
        end: '#f9d9dd',
        icon: this.data.icon1,
        state: 0
      },
      {
        name: '节点2',
        start: '#f9d9dd',
        end: '#f9d9dd',
        icon: this.data.icon1,
        state: 0
      },
      {
        name: '节点3',
        start: '#f9d9dd',
        end: '#f9d9dd',
        icon: this.data.icon1,
        state: 1
      },
      {
        name: '节点4',
        start: '#f9d9dd',
        end: '#f9d9dd',
        icon: this.data.icon1,
        state: 0
      },
      {
        name: '节点5',
        start: '#f9d9dd',
        end: '#fff',
        icon: this.data.icon1,
        state: 0
      }
    ]
    this.setData({
      processData: data
    })
    // 处理节点信息
    this.setProcessIcon();
  },
  setProcessIcon: function () {
    const processArr = this.data.processData;
    let index = -1; // 记录状态为1的最后的位置
  
    // 首先找到状态为1的节点位置
    processArr.forEach((item, i) => {
      if (item.state === 1) {
        index = i;
        return false; // 找到后停止循环
      }
    });
  
    // 然后根据找到的位置设置图标和其他属性
    processArr.forEach((item, i) => {
      if (i === index) { // 当前正在处理的节点
        item.icon = this.data.icon2;
        item.start = "#f0a0a9";
        item.end = "#f9d9dd";
      } else if (i < index && index !== -1) { // 已完成的节点
        item.icon = this.data.icon3;
        item.start = "#f0a0a9";
        item.end = "#f0a0a9";
      } else { // 未完成的节点
        item.icon = this.data.icon1;
        item.start = "#f9d9dd";
        item.end = "#f9d9dd";
      }
    });
  
    // 特殊处理第一个和最后一个节点
    if (processArr.length > 0) {
      processArr[0].start = "#fff";
      processArr[processArr.length - 1].end = "#fff";
    }
  
    this.setData({
      processData: processArr
    });
  }
});

纵向效果

代码

wxml

html 复制代码
<view class='order_process1'>
  <view class='process_item1' wx:for="{{processData}}" wx:key="index">
    <view class='process_vertical1'>
      <view class='process_line_vertical1' style="background:{{item.start}};"></view>
      <image class="process_icon1 {{item.icon === icon2 ? 'rotate-icon1' : ''}}" src="{{item.icon}}"></image>
      <view class='process_line_vertical1' style="background:{{item.end}};"></view>
    </view>
    <text class='process_name1'>{{item.name}}</text>
  </view>
</view>

wxss

css 复制代码
.order_process1 {
  display: flex;
  flex-direction: column; /* 改为垂直排列 */
  padding: 10rpx;
  background-color: #fff;
}

.process_item1 {
  display: flex;
  flex-direction: row; /* 每个步骤项水平排列 */
  align-items: center; /* 垂直居中对齐 */
}

.process_vertical1 {
  display: flex;
  flex-direction: column; /* 步骤线垂直排列 */
  align-items: center; /* 图标居中 */
}

.process_icon1 {
  width: 35rpx;
  height: 35rpx;
}

.process_line_vertical1 {
  background: #eff3f6;
  width: 5rpx; /* 宽度变为5rpx */
  height: 40rpx; /* 高度根据需要设置 */
}

.process_name1 {
  font-size: 24rpx;
  margin-left: 20rpx; /* 文字与图标之间的间距 */
}

/* 定义旋转动画 */
@keyframes rotate360 {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}

/* 应用到 .rotate-icon1 类 */
.rotate-icon1 {
  animation: rotate360 5s linear infinite; /* 5秒完成一次旋转,线性时间函数,无限循环 */
}

js

参见横向js代码

图片展示

process_1.png

process_2.png

process_3.png

相关推荐
黄菊华老师3 小时前
微信小程序毕业设计:渔具商城小程序毕设源码作品和开题报告
微信小程序·小程序·课程设计·渔具商城小程序
攻城狮7号3 小时前
不懂代码也能造?TRAE+GLM-4.6 手把手教你搭心理咨询智能客服小程序
python·小程序·uni-app·vue·trae·glm我的编程搭子·glm-4.6
QQ4022054965 小时前
基于微信小程序的大学班级管理系统的设(作业 考勤 请假 投票)
微信小程序·小程序·毕业设计·notepad++
QQ588501985 小时前
Python_uniapp-心理健康测评服务微信小程序的设计与实现
python·微信小程序·uni-app
小鱼学长爱分享5 小时前
基于微信小程序的博物馆预约系统的设计与实现
微信小程序·小程序·notepad++
计算机程序猿学长5 小时前
微信小程序毕设项目推荐-基于java+springboot+mysql+微信小程序的校园外卖点餐平台基于springboot+微信小程序的校园外卖直送平台【附源码+文档,调试定制服务】
java·微信小程序·课程设计
丁总学Java5 小时前
微信小程序上传揭秘:http://tmp 临时文件是如何“飞”到后端的?
http·微信小程序·小程序
white-persist5 小时前
轻松抓包微信小程序:Proxifier+Burp Suite教程
前端·网络·安全·网络安全·微信小程序·小程序·notepad++
三天两行代码5 小时前
uniapp 微信小程序实现ai问答功能流式输出makdown解析实现打字机效果(附源码)
微信小程序·小程序·uni-app
三天不学习5 小时前
从开发到上架:手把手教你将uni-app微信小程序打包发布(全网最全指南)
微信小程序·uni-app·notepad++