前言
现在要做一个倒计时,类似淘宝秒杀倒计时的功能。qml只适合实现界面部分,逻辑部分由谁实现呢?c++还是js?想了想还是js简单些,不用考虑跨语言的通讯。虽然我不大会js,但是我相信网上有代码,这个确实有,所以以下可能涉及网上大佬的代码,多多体谅。
效果图
我现在习惯放效果图,方便我以后抄代码……
说明和代码
后台提供我一截止日期,格式为"2021-01-12 12:00:00",然后我弄一定时器不停地进行一下操作:将此字符串转为日期Date,然后将当前时间和截止日期的时间数相减,若当前时间小于截止日期,则将时间数转为天时分秒,进行显示;若当前时间大于截止日期,则结束定时器的运转,显示为活动结束。
Timer{
id:timer;
interval: 1000;
repeat: true;
onTriggered: {
if(endtime==="")
{
timerTxt.text="该活动已经结束!";
timer.stop();
return;
}
//获取当前时间
var date = new Date();
var now = date.getTime();
//设置截止时间
var endDate = new Date(endtime);
var end = endDate.getTime();
//时间差
var leftTime = end-now;
//定义变量 d,h,m,s保存倒计时的时间
var d,h,m,s;
if (leftTime>=0) {
d = Math.floor(leftTime/1000/60/60/24);
h = Math.floor(leftTime/1000/60/60%24);
m = Math.floor(leftTime/1000/60%60);
s = Math.floor(leftTime/1000%60);
timerTxt.text=d+"天"+h+":"+m+":"+s;
}else{
timerTxt.text="该活动已经结束!";
timer.stop();
}
}
}
附带说下,我上面实现的一个效果:商品标题明明从减钱框的右侧开始书写,第二行却从左侧开始,这是怎么实现的呢?其实是我用足够的空格长度加上标题内容,使减钱框显示出来。
Text {
id: intrText;
anchors{left: parent.left; leftMargin: 2*wr;right: parent.right;
rightMargin: 15*wr; top: rect.bottom; topMargin: 7*wr;}
font{pointSize: 13; family: "PingFang SC"; }
//elide:Text.ElideRight;
maximumLineCount:2;
wrapMode:Text.WordWrap;
color: "#5A5A5A";
text: spaceStr+name;
}
Component.onCompleted: {
var num=Math.ceil(decPriceRect.width/4);
while(num!=0)
{
spaceStr+=" ";
num--;
}
timer.start();
}
结束语
倒计时就这么着实现了,比想象中的要快。