当前位置:首页 > 黑客服务 > 正文内容

编写代码教程(编写代码教程软件)

hacker2年前 (2022-08-20)黑客服务157

(点击上方公众号,可快速关注)

英文:Yaphi Berhanu

译文:伯乐在线 - cucr

编写代码教程(编写代码教程软件)

链接:http://web.jobbole.com/87030/

英文:Yaphi Berhanu

译文:伯乐在线 - cucr

链接:http://web.jobbole.com/87030/

有时候在生活中,你需要一个Java倒计时时钟,而不是一个末日装置设备。不管你是否有一次约会,销售、促销、或者游戏,你可以受益于使用原生Java构建一个时钟,而不是拿到一个现成的插件。虽然有许多很棒的时钟插件,但如果使用原生 Java 实现,那你将得到以下好处:

代码将是轻量级的,因为它没有依赖关系。

你的网站会表现得更好,因为你不需要加载外部脚本和样式表。

你将会有更高的可控性,因为你将按照想要的时钟行为的方式来创建它(而不是找一个趋向你想法的插件)。

代码将是轻量级的,因为它没有依赖关系。

你的网站会表现得更好,因为你不需要加载外部脚本和样式表。

你将会有更高的可控性,因为你将按照想要的时钟行为的方式来创建它(而不是找一个趋向你想法的插件)。

所以事不宜迟,以下是如何使用仅仅18行Java代码来做一个自己的倒计时时钟。

基础时钟:倒计时到特定的日期或时间

以下是创建一个基础时钟的快速概要步骤:

设置一个有效的结束日期。

计算剩余时间。

将时间转换成可用的格式。

输出时钟数据作为一个可重用的对象。

在页面上显示时钟,并在它到达0时停止。

设置一个有效的结束日期。

展开全文

计算剩余时间。

将时间转换成可用的格式。

输出时钟数据作为一个可重用的对象。

在页面上显示时钟,并在它到达0时停止。

设置一个有效的结束日期

首先,你需要设置一个有效的结束日期。它是Java Date.parse()方法能够解析的任何格式的一个字符串。例如:

ISO 8601格式:

var deadline = '2015-12-31';

var deadline = '2015-12-31';

短格式:

var deadline = '31/12/2015';

var deadline = '31/12/2015';

或者,长格式:

var deadline = 'December 31 2015';

var deadline = 'December 31 2015';

这些格式都可以指定一个确切的时间(小时,分钟和秒),以及时区(或者如果是ISO日期,则是UTC的偏移量)。例如:

var deadline = 'December 31 2015 23:59:59 GMT+02:00';

var deadline = 'December 31 2015 23:59:59 GMT+02:00';

你可以在 此文阅读更多关于Java的日期格式化。

计算剩余时间

下一步是计算剩余时间。做到这一点,我们需要编写一个函数,它接收一个代表给定结束时间的字符串(如上所述),并计算这个时间和当前时间的差值。代码如下:

functiongetTimeRemaining(endtime){

vart= Date.parse(endtime)- Date.parse(newDate());

varseconds= Math.floor((t/1000)% 60);

varminutes= Math.floor((t/1000/60)% 60);

varhours= Math.floor((t/(1000*60*60))% 24);

vardays= Math.floor(t/(1000*60*60*24));

return{

'total': t,

'days': days,

'hours': hours,

'minutes': minutes,

'seconds': seconds

};

}

functiongetTimeRemaining(endtime){

vart= Date.parse(endtime)- Date.parse(newDate());

varseconds= Math.floor((t/1000)% 60);

varminutes= Math.floor((t/1000/60)% 60);

varhours= Math.floor((t/(1000*60*60))% 24);

vardays= Math.floor(t/(1000*60*60*24));

return{

'total': t,

'days': days,

'hours': hours,

'minutes': minutes,

'seconds': seconds

};

}

首先,我们创建一个变量t,保存剩下的时间期限。Date.parse()函数是原生Java,它将一个时间字符串转换成以毫秒为单位的值。这让我们可以将两个时间相减,并获得间隔时间。

var t = Date.parse(endtime) - Date.parse(new Date());

var t = Date.parse(endtime) - Date.parse(new Date());

转换时间为可用的格式

现在我们想把毫秒转换成天、小时、分钟、秒。让我们以秒为例:

var seconds = Math.floor( (t/1000) % 60 );

var seconds = Math.floor( (t/1000) % 60 );

让我们解释这是怎么回事。

毫秒除以1000转换为秒:(t / 1000)

总秒除以60,获取余数——你不想要所有的秒,只是(t / 1000)%60之后的分钟剩余的秒数

将它取整,因为你想要完整的秒,而不是分数秒:Math.floor((t / 1000)% 60)

重复这个逻辑将秒转换为分钟、小时、天。

输出时钟数据作为一个可重用的对象

准备好天、小时、分钟和秒,我们现在准备将数据作为一个可重用的对象返回:

return{

'total': t,

'days': days,

'hours': hours,

'minutes': minutes,

'seconds': seconds

};

return{

'total': t,

'days': days,

'hours': hours,

'minutes': minutes,

'seconds': seconds

};

该对象允许你调用函数,得到任何已计算的值。这里有一个如何得到剩余分钟的例子:

getTimeRemaining(deadline).minutes

getTimeRemaining(deadline).minutes

很方便,对吗?

在页面上显示时钟,并在它到达0时停止。

现在,我们有一个函数,它可以提取天、小时、分钟和秒,我们可以构建时钟了。首先,我们将创建以下HTML元素来存放我们的时钟:

<div id="clockdiv"></div>

<div id="clockdiv"></div>

然后我们将编写一个函数,输出时钟数据到新div:

functioninitializeClock(id,endtime){

varclock= document.getElementById(id);

vartimeinterval= setInterval(function(){

vart= getTimeRemaining(endtime);

clock.innerHTML= 'days: '+ t.days+ '&lt;br&gt;'+

'hours: '+ t.hours+ '&lt;br&gt;'+

'minutes: '+ t.minutes+ '&lt;br&gt;'+

'seconds: '+ t.seconds;

if(t.total&lt;=0){

clearInterval(timeinterval);

}

},1000);

}

functioninitializeClock(id,endtime){

varclock= document.getElementById(id);

vartimeinterval= setInterval(function(){

vart= getTimeRemaining(endtime);

clock.innerHTML= 'days: '+ t.days+ '&lt;br&gt;'+

'hours: '+ t.hours+ '&lt;br&gt;'+

'minutes: '+ t.minutes+ '&lt;br&gt;'+

'seconds: '+ t.seconds;

if(t.total&lt;=0){

clearInterval(timeinterval);

}

},1000);

}

这个函数接收两个参数:显示时钟的元素的id和倒计时的结束时间。在函数内部,我们将声明一个名为clock的变量用来保存时钟容器div的引用,这样我们不需要不断查询DOM。

接下来,我们将使用setInterval每秒钟执行一次匿名函数,它将执行以下操作:

计算剩余时间。

将剩余时间输出到div。

如果剩余时间到达0,停止时钟。

计算剩余时间。

将剩余时间输出到div。

如果剩余时间到达0,停止时钟。

到这里,唯一剩下的步骤运行时钟如下:

initializeClock('clockdiv', deadline);

initializeClock('clockdiv', deadline);

恭喜你!你现在有一个基本的时钟,它只有短短18行Java代码。

优化时钟显示

给时钟加样式之前,我们需要完善一点的东西。

移除初始加载的延迟,这样时钟会立即出现。

为了让时钟脚本更有效率,不要不断重建整个时钟。

根据需要添加前缀0。

移除初始加载的延迟,这样时钟会立即出现。

为了让时钟脚本更有效率,不要不断重建整个时钟。

根据需要添加前缀0。

移除初始加载的延迟

在时钟中,我们用setInterval每秒钟更新显示。大部分时间都很好,除了一开始的时候会有一秒钟的延迟。为了消除这个延迟,我们将不得不在间隔开始前就更新时钟。

要做到这一点,将传递给setInterval(它每秒钟更新时钟)的匿名函数迁移到一个独立的函数,命名为updateClock。在setInterval外调用updateClock一次,然后在setInterval里面再次调用,这种方式,时钟显示的时候就没有延迟。

在你的Java中,替换:

var timeinterval = setInterval(function(){ ... },1000);

var timeinterval = setInterval(function(){ ... },1000);

functionupdateClock(){

vart= getTimeRemaining(endtime);

clock.innerHTML= 'days: '+ t.days+ '&lt;br&gt;'+

'hours: '+ t.hours+ '&lt;br&gt;'+

'minutes: '+ t.minutes+ '&lt;br&gt;'+

'seconds: '+ t.seconds;

if(t.total&gt;=0){

clearInterval(timeinterval);

}

}

updateClock();// run function once at first to avoid delay

vartimeinterval= setInterval(updateClock,1000);

functionupdateClock(){

vart= getTimeRemaining(endtime);

clock.innerHTML= 'days: '+ t.days+ '&lt;br&gt;'+

'hours: '+ t.hours+ '&lt;br&gt;'+

'minutes: '+ t.minutes+ '&lt;br&gt;'+

'seconds: '+ t.seconds;

if(t.total&gt;=0){

clearInterval(timeinterval);

}

}

updateClock();// run function once at first to avoid delay

vartimeinterval= setInterval(updateClock,1000);

避免不断重建时钟

让时钟脚本更有效率,我们希望只更新时钟的数据,而不是每一秒重建整个时钟。实现这一目标的方法是,把每个数字嵌入到span标签内,只更新这些span的内容。

HTML:

<div id="clockdiv">

Days: <span class="days"></span><br>

Hours: <span class="hours"></span><br>

Minutes: <span class="minutes"></span><br>

Seconds: <span class="seconds"></span>

</div>

<div id="clockdiv">

Days: <span class="days"></span><br>

Hours: <span class="hours"></span><br>

Minutes: <span class="minutes"></span><br>

Seconds: <span class="seconds"></span>

</div>

现在获取这些元素的引用。在clock变量定义的下面添加以下代码

vardaysSpan= clock.querySelector('.days');

varhoursSpan= clock.querySelector('.hours');

varminutesSpan= clock.querySelector('.minutes');

varsecondsSpan= clock.querySelector('.seconds');

vardaysSpan= clock.querySelector('.days');

varhoursSpan= clock.querySelector('.hours');

varminutesSpan= clock.querySelector('.minutes');

varsecondsSpan= clock.querySelector('.seconds');

接下来,我们只需要改变updateClock函数来更新数据而不是重建整个时钟。新代码是这样的:

functionupdateClock(){

vart= getTimeRemaining(endtime);

daysSpan.innerHTML= t.days;

hoursSpan.innerHTML= t.hours;

minutesSpan.innerHTML= t.minutes;

secondsSpan.innerHTML= t.seconds;

...

}

functionupdateClock(){

vart= getTimeRemaining(endtime);

daysSpan.innerHTML= t.days;

hoursSpan.innerHTML= t.hours;

minutesSpan.innerHTML= t.minutes;

secondsSpan.innerHTML= t.seconds;

...

}

添加前导零

现在时钟更新数据,而不是每一秒重建,我们还有一件事要做:添加前导零。例如,时钟显示7秒时,让它显示07。一个简单的方法是在数字的开始处添加一个字符串“0”,然后获取最后两位数。

例如,为“seconds”添加一个前导零,你会这样改变:

secondsSpan.innerHTML = t.seconds;

secondsSpan.innerHTML = t.seconds;

变成:

secondsSpan.innerHTML = ('0' + t.seconds).slice(-2);

secondsSpan.innerHTML = ('0' + t.seconds).slice(-2);

如果你愿意,你可以为minutes和hours添加前导零。如果你已经走了这么远,那么恭喜你!你的时钟可以显示了。

注意:您可能需要点击CodePen中的“Rerun”来启动倒计时。

更进一步

下面的例子演示了如何为某些场景设计时钟。他们都是基于上面的基础例子。

自动安排时钟

假设我们希望时钟出现在特定的某些天。例如,我们可能会有一系列的事件出现,同时不想每次都手动更新时钟。下面介绍如何提前进行规划安排。

在CSS中通过设置display属性为none来隐藏时钟。然后添加以下代码到initializeClock函数(在var clock语句的后面)。这将导致时钟只在initializeClock函数被调用显示:

clock.style.display = 'block';

clock.style.display = 'block';

接下来,我们可以指定时钟应该出现的时间段。这将替换deadline变量:

varschedule= [

['Jul 25 2015','Sept 20 2015'],

['Sept 21 2015','Jul 25 2016'],

['Jul 25 2016','Jul 25 2030']

];

varschedule= [

['Jul 25 2015','Sept 20 2015'],

['Sept 21 2015','Jul 25 2016'],

['Jul 25 2016','Jul 25 2030']

];

schedule数组中的每个元素代表了一个开始日期和结束日期。如上所述,可以包括时间和时区,但这里我用纯日期来保持代码的可读性。

最后,当用户加载页面时,我们需要检查,是否在指定的时间段内。这段代码应该替换之前调用initializeClock函数的部分。

// iterate over each element in the schedule

for(vari=0;i&amp;lt;schedule.length;i++){

varstartDate= schedule[i][0];

varendDate= schedule[i][1];

// put dates in milliseconds for easy comparisons

varstartMs= Date.parse(startDate);

varendMs= Date.parse(endDate);

varcurrentMs= Date.parse(newDate());

// if current date is between start and end dates, display clock

if(endMs&amp;gt;currentMs&amp;amp;&amp;amp;currentMs&amp;gt;= startMs){

initializeClock('clockdiv',endDate);

}

}

// iterate over each element in the schedule

for(vari=0;i&amp;lt;schedule.length;i++){

varstartDate= schedule[i][0];

varendDate= schedule[i][1];

// put dates in milliseconds for easy comparisons

varstartMs= Date.parse(startDate);

varendMs= Date.parse(endDate);

varcurrentMs= Date.parse(newDate());

// if current date is between start and end dates, display clock

if(endMs&amp;gt;currentMs&amp;amp;&amp;amp;currentMs&amp;gt;= startMs){

initializeClock('clockdiv',endDate);

}

}

现在你可以提前安排你的时钟,而不必手动更新它。你可以简化代码。我为了可读性写的有点详细。

当用户到达倒计时

有时有必要为一个用户到达或开始一个特别任务的给定时间设置一个倒计时。这里我们将使用十分钟,但是您可以使用任何你想要的时间。

所有我们需要做的是将deadline变量替换为:

vartimeInMinutes= 10;

varcurrentTime= Date.parse(newDate());

vardeadline= newDate(currentTime+ timeInMinutes*60*1000);

vartimeInMinutes= 10;

varcurrentTime= Date.parse(newDate());

vardeadline= newDate(currentTime+ timeInMinutes*60*1000);

这段代码将当前时间增加了十分钟。再转换为毫秒,所以他们可以相加在一起,并转换成一个新的截止日期。

现在我们有一个时钟,在十分钟用户到达时倒计时。请随便玩,尝试不同的时间长度。

跨页面保持时钟

有时有必要不仅仅为当前页面保持时钟的状态。例如,如果我们希望整个网站有一个十分钟的倒计时,我们不希望每次用户进入不同的页面或每次用户刷新页面时重置时钟。

一个解决方案是将时钟的结束时间保存在cookie。这样,导航到一个新的页面不会重置结束时间为十分钟。

逻辑是这样的:

如果deadline记录在一个cookie中,使用deadline。

如果cookie不存在,创建一个新的deadline并将它存储在一个cookie中。

为了实现这一点,如下替换deadline变量:

// if there's a cookie with the name myClock, use that value as the deadline

if(document.cookie&amp;amp;&amp;amp;document.cookie.match('myClock')){

// get deadline value from cookie

vardeadline= document.cookie.match(/(^|;)myClock=([^;]+)/)[2];

}

// otherwise, set a deadline 10 minutes from now and

// save it in a cookie with that name

else{

// create deadline 10 minutes from now

vartimeInMinutes= 10;

varcurrentTime= Date.parse(newDate());

编写代码教程(编写代码教程软件)

vardeadline= newDate(currentTime+ timeInMinutes*60*1000);

// store deadline in cookie for future reference

document.cookie= 'myClock='+ deadline+ '; path=/; domain=.yourdomain.com';

}

// if there's a cookie with the name myClock, use that value as the deadline

if(document.cookie&amp;amp;&amp;amp;document.cookie.match('myClock')){

// get deadline value from cookie

vardeadline= document.cookie.match(/(^|;)myClock=([^;]+)/)[2];

}

// otherwise, set a deadline 10 minutes from now and

// save it in a cookie with that name

else{

// create deadline 10 minutes from now

vartimeInMinutes= 10;

varcurrentTime= Date.parse(newDate());

vardeadline= newDate(currentTime+ timeInMinutes*60*1000);

// store deadline in cookie for future reference

document.cookie= 'myClock='+ deadline+ '; path=/; domain=.yourdomain.com';

}

这段代码使用了 cookies 和正则表达式,这两部分是分开的。出于这个原因,我不会讲太多的细节。需要注意的一个重要的事情是,你需要将.yourdomain.com替换成真实的域。如果你对此有任何问题,在评论中让我知道。

关于客户端时间的一个重要的警告

Java的日期和时间从用户的计算机上获取。这意味着用户可以通过改变机器的时间来影响一个Java时钟。在大多数情况下,这并不重要,但是对于一些超级敏感的情况,有必要从服务器获取时间。这可以使用PHP或Ajax,两者都是超出了本教程的范围。

在任何情况下,从服务器获取时间后,我们可以使用和本教程相同的客户端技术来使用它。

总结

我们已经介绍了如何做一个基础的倒计时时钟和进行有效的显示。我们也学习了计划时钟,绝对与相对时间,跨页面保持时钟的状态。

下一步?

玩时钟代码。尝试添加一些有创意的样式,或新功能(如暂停和恢复按钮)。如果你想出任何酷炫时钟的例子,且你想要和我们分享,或者对以上内容有任何疑问,请在评论中让我知道。

译文简介 ( )

cucr:@hop_ping

【今日微信公号推荐↓】

更多推荐请看《》

其中推荐了包括技术、设计、极客 和 IT相亲相关的热门公众号。技术涵盖:Python、Web前端、Java、安卓、iOS、PHP、C/C++、.NET、Linux、数据库、运维、大数据、算法、IT职场等。点击《》,发现精彩!

扫描二维码推送至手机访问。

版权声明:本文由黑客接单发布,如需转载请注明出处。

本文链接:http://therlest.com/134549.html

分享给朋友:

“编写代码教程(编写代码教程软件)” 的相关文章

约茶app约茶APP

最新约茶app都是哪些?整理了30本这篇文章主要介绍了约茶app,包括约茶app ios下载,下面小编整理了约茶app的图文教程,看看约茶app苹果版详细步骤吧! 觉得网上的一些答 据新快网2021年10月20日03:31:27的新闻报道,微博网友@R卜傲晴 爆料。 平安夜来临之际,事件,在网上...

吃鸡鸭的屁股会有病吗?我非常爱吃鸡鸭的屁股,但经常吃会有病吗?另

吃鸡鸭的屁股会有病吗?我非常爱吃鸡鸭的屁股,但经常吃会有病吗?另 鸡鸭的肛门附近组织,布满大大小小的腺体,各类秽物与毒素都在这些腺体囤积;鸡鸭的肛门也有非常高密度的大肠杆菌,所以鸡鸭的屁股不是少吃的问题,而是不能吃.吃得少可能没觉出怎样,多了问题就显出来了.而且鸡鸭屁股的大肠杆菌会随着蛋生出来的时...

身份证信息被黑客盗取(黑客能把手机内身份证信息盗取吗)

一、身份证信息被黑客盗取(黑客能把手机内身份证信息盗取吗)方法总结 1、黑客通过手身份姓名能否窃取别人银行卡里。朋友你好,这个问题不是这样理解的的,黑客是通过你的这些信息,破易你的银行卡号支付密码来盗取你的财物的,一般你只要不乱点链接,不轻易在手机。黑客控制了手机,窃取了身份证号码手机号姓名等所有...

家庭用水价格,生活用水价格

约64元,用水价格:生活用水:1点4元/吨,一般三口之家,181-260吨,营业电1元,用的比较少,至来年4月洗热水澡,自来水调价。 污水费0点,8价格元/吨,广州市的居民生活用水从原来的每立方米0点9元,水价也不一样。据此,很难说清楚。居室条件等等,生活用水会比较贵。 自来水费和污水处理费三部分,...

铁盖子可以放入高压锅蒸吗?装酱料的铁盖子,外面的涂层有些剥落,好

铁盖子可以放入高压锅蒸吗?装酱料的铁盖子,外面的涂层有些剥落,好 铁盖子可以放入高压锅蒸吗? 装酱料的铁盖子,外面的涂层有些剥落,好象也没锈,可以拿它盖严瓶子入高压锅蒸吗? 绝对不行!既危险又不卫生。盖住的瓶子在高压锅中加热,很容易形成压力差而爆炸;铁在高压锅中的水蒸汽作用下极易变成四氧化三...

山东价格协会(山东物流网)

东北等北方地区,可以去那里看一下。自己挑合适的,发往,我刚开一家物流公司,56888的软件配货,不知道物流价格是怎么算的. 衣服,哦,4008111111着是顺风快递的电话。而且显示正在备货。免费的东西总是会有不足的地方,在烟台住,济宁到济南一个)普通件,山东省服务标准化技术委员会物流分技术委员会于...

评论列表

只影忆囚
2年前 (2022-08-21)

e。这样,导航到一个新的页面不会重置结束时间为十分钟。逻辑是这样的:如果deadline记录在一个cookie中,使用deadline。如果cookie不存在,创建一个新的deadline并将它存储在一个cookie中。为了实现这一点,如下

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。