Примечание. Содержание этой статьи устарело, пожалуйста, переместите[Рефакторинг] Компонент обратного отсчета апплета WeChatПрочтите эту новую статью.
Примечание. Содержание этой статьи устарело, пожалуйста, переместите[Рефакторинг] Компонент обратного отсчета апплета WeChatПрочтите эту новую статью.
Примечание. Содержание этой статьи устарело, пожалуйста, переместите[Рефакторинг] Компонент обратного отсчета апплета WeChatПрочтите эту новую статью.
Так почему бы не? Мой старший брат сказал мне: «Потому что пользователь может изменить время мобильного телефона, чтобы напрямую добраться до времени обратного отсчета. Следовательно, серверная часть должна напрямую возвращать разницу во времени между текущим временем и целевым временем».
Затем я изменил системное время, попробовал и обнаружил, что это правда! В этом случае мы должны напрямую использовать разницу во времени, предоставленную серверной частью. После определения входящих свойств подумаем о конкретной реализации компонента.
Определить входящие свойства
Для всего компонента обратного отсчета требуется только одно входящее свойство — разница во времени. следующим образом:
properties: {
initDuration: {
type: Number,
value: 0,
observer: function (newVal, oldVal) {
// ToDo 初始化倒计时
}
}
}
обработка времени
Весь процесс делится на три функции, которые заключаются в следующем:
methods: {
/**
* 计算倒计时
* @param {Number} duration [秒数时间差,必填]
* @return {String} [倒计时字符串]
*/
_countDown: function (duration) {
if (duration <= 0) {
this.setData({
flag: true
})
return undefined
}
// 计算出传入秒数是几小时几分钟几秒
var seconds = this._format(duration % 60)
var minutes = Math.floor(duration / 60)
var hours = this._format(Math.floor(duration / 3600))
if (minutes >= 60) {
minutes = minutes % 60
}
minutes = this._format(minutes)
var result = `${hours}:${minutes}:${seconds}`
return result
},
/**
* 格式化小于10的时间
* @param {Number} time [必填]
* @return {String} [返回时间字符串]
*/
_format: function (time) {
if (time >= 10) {
return time
} else {
return `0${time}`
}
},
/**
* 执行倒计时
* @param {Number} initDuration [传入时间,必填]
*/
_runCountDown: function (initDuration) {
// 首次展示倒计时
var countDownTime = this._countDown(initDuration)
// 每1s执行一次的倒计时计算
var timer = setInterval(() => {
// flag为true也就是传入_countDown的值小于等于零时
if (this.data.flag === true) {
clearInterval(timer)
return undefined
}
var duration = this.data.duration - 1
var countDownTime = this._countDown(duration)
this.setData({ duration, countDownTime })
}, 1000)
this.setData({ countDownTime, timer })
},
}
Инициализировать обратный отсчет
Если вы передаете новую inition на компонент, будет вызываться обратный вызов наследства свойств. Поэтому нам нужна функция для обработки выполнения инициализации отсчета.
_initCountDown: function (newVal) {
if (this.data.timer > 0) {
clearInterval(this.data.timer)
}
this.setData({
flag: false,
duration: this.data.initDuration
})
this._runCountDown(newVal)
}
В то же время он вызывается в callback-функции наблюдателя свойства initDuration:
observer: function (newVal) {
this._initCountDown(newVal)
}
Это в основном завершает компонент обратного отсчета в апплете WeChat. Установите в "Page".json при использовании
{
"usingComponents": {
"count-down": "../components/count-down"
}
}
Затем используйте его непосредственно на странице и передайте начальное значение.
конец
Это первое компонентное задание первой стажировки, и оно задокументировано здесь. Если письмо плохое или логика сбивает с толку, пожалуйста, читатели укажите в комментариях. Я не боюсь, что вы будете ругать меня, но я боюсь, что вы меня проигнорируете. Спасибо.