微信小程---倒计时

本文展示了如何在微信小程序中实现一个倒计时组件,包括wxml结构、wxss样式设计和js逻辑处理。组件通过计算指定日期与当前时间的差值,动态更新天、时、分、秒的显示,并使用了定时器进行实时更新。同时,文章还详细解释了各部分代码的功能,如时间戳转换、时间格式化等。

在这里插入图片描述

wxml

<view class="flex-row time-box j_c">
  <view class="time-item">{{left_time_list[0]}}</view><view class="time-item">{{left_time_list[1]}}</view><view class="time-item">{{left_time_list[2]}}</view><view class="time-item">{{left_time_list[3]}}</view></view>
<view class="flex-row time-box j_c ">
  <view class="flex-row">
    <block wx:for="{{left_time_list_date[0]}}" wx:key="list">
      <view class="time-item1">{{item}}</view>
    </block>
    <text></text>
  </view>
  <view class="flex-row">
    <block wx:for="{{left_time_list_date[1]}}" wx:key="list">
      <view class="time-item1">{{item}}</view>
    </block>
    <text></text>
  </view>
  <view class="flex-row">
    <block wx:for="{{left_time_list_date[2]}}" wx:key="list">
      <view class="time-item1">{{item}}</view>
    </block>
    <text></text>
  </view>
  <view class="flex-row">
    <block wx:for="{{left_time_list_date[3]}}" wx:key="list">
      <view class="time-item1">{{item}}</view>
    </block>
    <text></text>
  </view>
</view>

wxss

/* pages/actualPage/countdown/index.wxss */
.time-box {
  font-size: 26rpx;
  color: #EAA81B;
  margin-bottom: 40rpx;
  border-radius: 20rpx;
  padding: 20px;
  background: #fff;
  margin: 20rpx;
}

.time-item {
  width: 60rpx;
  height: 40rpx;
  background: linear-gradient(90deg, #FFEBB1 0%, #FFDB8F 100%);
  border-radius: 4rpx;
  font-size: 24rpx;
  text-align: center;
  line-height: 40rpx;
  margin: 0 20rpx;
}

.time-item1 {
  width: 30rpx;
  height: 40rpx;
  background: linear-gradient(90deg, #FFEBB1 0%, #FFDB8F 100%);
  border-radius: 4rpx;
  font-size: 24rpx;
  text-align: center;
  line-height: 40rpx;
  margin: 0 10rpx;
}

js

Page({
  data: {
    left_time: '', //活动剩余时间的秒数
    timer: '', //倒计时定时器
    left_time_list: [], //剩余秒数转换 天,小时 分 秒
    left_time_list_date: []
  },
  onShow: function () {
    this.getLeftTime('2023/08/03 11:20:00')
  },
  /**
   * 定时器,计算剩下时间
   * @param {*} end_time 
   */
  getLeftTime(end_time) {
    let left_time = this.getTimestap(end_time);
    this.initDate(left_time)
    this.data.timer = setInterval(() => {
      if (left_time-- === 0) {
        this.setData({
          left_time: 0,
          left_time_list: this.formatSeconds(0)
        })
        clearInterval(this.data.timer)
      } else {
        this.initDate(left_time)
      }
    }, 1000);
  },
  /**
   * 初始化数据
   */
  initDate(e) {
    let left_time_list = this.formatSeconds(e),
      left_time_list_date = this.formatDate(JSON.stringify(left_time_list));
    this.setData({
      left_time: e,
      left_time_list,
      left_time_list_date
    })
  },
  /**
   * 获取指定时间-当前时间的秒数
   * @param {*} end_time 
   */
  getTimestap(end_time) {
    // 当前时间
    var currentTime = parseInt(new Date().getTime() / 1000);
    // 未来时间
    var futureTime = parseInt(new Date(end_time.replace(/-/g, '/')).getTime() / 1000); //ios无法解析
    return futureTime <= currentTime ? 0 : futureTime - currentTime;
  },
  /**
   * 毫秒-天-时-分-秒
   * @param {*} value 
   */
  formatSeconds(value) {
    let time = [],
      day = parseInt(value / 86400),
      hour = parseInt((value % 86400) / 3600),
      min = parseInt(((value % 86400) % 3600) / 60),
      sec = parseInt(((value % 86400) % 3600) % 60);
    time[0] = day > 0 ? this.addZero(day) : this.addZero(0);
    time[1] = hour > 0 ? this.addZero(hour) : this.addZero(0);
    time[2] = min > 0 ? this.addZero(min) : this.addZero(0);
    time[3] = sec > 0 ? this.addZero(sec) : this.addZero(0);
    return time;
  },
  /**
   * 拆分数组-天-时-分-秒
   * @param {*} e 
   */
  formatDate(e) {
    let list = JSON.parse(e);
    for (let i = 0; i < list.length; i++) {
      list[i] = list[i].toString().split('');
    }
    return list;
  },
  /**
   * 补0
   * @param {*} num 
   */
  addZero(num) {
    return num < 10 ? "0" + num : num;
  },

  onUnload() {
    if (this.data.timer) {
      console.log('销毁计时器')
      clearInterval(this.data.timer)
    }
  }
})
### 微信小程序中使用特定字体 ShiShangZhongHeiJianTi 的实现方法及兼容性 在微信小程序中,如果需要使用特定字体(如 ShiShangZhongHeiJianTi),可以通过以下方式实现,并考虑其兼容性问题。 #### 1. 引入自定义字体 在微信小程序中,可以通过 `@font-face` 规则引入自定义字体。具体步骤如下: - **将字体文件添加到项目中**:首先,将 ShiShangZhongHeiJianTi 字体文件(例如 `.ttf`, `.otf` 等格式)上传到小程序项目的某个目录下。 - **在 CSS 文件中定义字体**:通过 `@font-face` 定义字体样式,确保字体能够被正确加载和应用[^3]。 ```css @font-face { font-family: &#39;ShiShangZhongHeiJianTi&#39;; src: url(&#39;/fonts/ShiShangZhongHeiJianTi.ttf&#39;) format(&#39;truetype&#39;); /* 路径需根据实际项目结构调整 */ } ``` - **应用字体到组件**:在需要使用该字体的组件或页面中,设置 `font-family` 属性为定义的字体名称。 ```css .text-style { font-family: &#39;ShiShangZhongHeiJianTi&#39;, sans-serif; /* 设置默认字体以保证兼容性 */ } ``` #### 2. 兼容性问题 虽然微信小程序支持自定义字体的加载,但在实际开发中需要注意以下兼容性问题: - **字体文件大小限制**:微信小程序对单个字体文件的大小有限制,通常建议字体文件大小不超过 2MB[^4]。如果字体文件过大,可能需要进行压缩处理。 - **网络环境影响**:如果字体文件未被打包进小程序基础库,而是通过外链加载,则在网络环境较差的情况下可能会导致字体加载失败。因此,推荐将字体文件本地化并优化加载策略[^5]。 - **不同设备的渲染差异**:某些低端设备可能无法完全支持复杂字体的渲染,或者渲染效果与预期存在偏差。开发者需要在多种设备上测试字体显示效果,确保用户体验一致。 #### 3. 示例代码 以下是一个完整的示例,展示如何在微信小程序中引入并使用 ShiShangZhongHeiJianTi 字体。 ```html <!-- wxml 文件 --> <view class="text-style">这是一个使用 ShiShangZhongHeiJianTi 字体的文本</view> ``` ```css /* wxss 文件 */ @font-face { font-family: &#39;ShiShangZhongHeiJianTi&#39;; src: url(&#39;/fonts/ShiShangZhongHeiJianTi.ttf&#39;) format(&#39;truetype&#39;); } .text-style { font-family: &#39;ShiShangZhongHeiJianTi&#39;, sans-serif; font-size: 16px; } ``` #### 4. 注意事项 - 如果字体文件较大,可以考虑将其拆分为多个子集文件(如仅包含常用字符的子集),以减少加载时间。 - 在调试过程中,可以通过开发者工具查看字体是否成功加载。如果没有生效,可能是路径配置错误或字体文件损坏。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

C20611

你的鸡腿将是我创作的最大动

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

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

打赏作者

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

抵扣说明:

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

余额充值