设计思路:

  数码时钟即通过图片数字来显示当前时间,需要显示的图片的URL根据时间变化而变化。

  a、获取当前时间Date()并将当前时间信息转换为一个6位的字符串;

  b、根据时间字符串每个位置对应的数字来更改图片的src的值,从而实现更换显示图片;

  构建HTML基础并添加样式。

 <div id="div1">
<img src='./数字时钟(1)_files/0.jpg'>
<img src='./数字时钟(1)_files/0.jpg'>
:
<img src='./数字时钟(1)_files/0.jpg'>
<img src='./数字时钟(1)_files/0.jpg'>
:
<img src='./数字时钟(1)_files/0.jpg'>
<img src='./数字时钟(1)_files/0.jpg'>
</div>

  style样式

#div1{
width:50%;
margin:300px auto;
background:black;
}

  获取图片元素以及当前时间:

    var oDiv=document.getElementById('div1');
var aImg=oDiv.getElementsByTagName('img');
var oDate=new Date();
var str=oDate.getHours()+oDate.getMinutes()+oDate.getSeconds();

  这里出现两个问题

  1、oDate.getHours()返回的都是数字,这样编写为数字相加,而非字符串相加。

  2、当获取的值为一位数时,会造成字符串的个数少于6,不满足初始设计要求。

  解决以上两个问题的代码解决方案:

  var oDiv=document.getElementById('div1');

  var aImg=oDiv.getElementsByTagName('img');

  var oDate=new Date();

  function twoDigitsStr()

  {

  if(n<10)

  {return '0'+n;}

  else

  {return ''+n;}

  }

  var str=twoDigitsStr(oDate.getHours())+twoDigitsStr(oDate.getMinutes())+twoDigitsStr(oDate.getSeconds());

  设置所有图片的src值:

for(var i=0;i<aImg.length;i++)
{
aImg[i].src="./数字时钟(1)_files/"+str.charAt(i)+".jpg";
}

  通过setInterval()来实现每隔1秒进行重新获取当前时间以及图片src值:

    var oDiv=document.getElementById('div1');
var aImg=oDiv.getElementsByTagName('img'); setInterval(function tick()
{
var oDate=new Date();
var str=twoDigitsStr(oDate.getHours())+twoDigitsStr(oDate.getMinutes())+twoDigitsStr(oDate.getSeconds());
for(var i=0;i<aImg.length;i++)
{
aImg[i].src="./数字时钟(1)_files/"+str.charAt(i)+".jpg";
}
} ,1000);

  但是还是有一个问题,网页在打开的初始阶段,显示时间为00:00:00,这是因为定时器有个特性,当定时器被打开后,不会立刻执行里面的函数,而是在1秒后执行。解决代码:

var oDiv=document.getElementById('div1');
var aImg=oDiv.getElementsByTagName('img');
function tick()
{var oDate=new Date();
var str=twoDigitsStr(oDate.getHours())+twoDigitsStr(oDate.getMinutes())+twoDigitsStr(oDate.getSeconds());
for(var i=0;i<aImg.length;i++)
{
aImg[i].src="./数字时钟(1)_files/"+str.charAt(i)+".jpg";
}
} setInterval(tick,1000);
tick();

  问题:代码setInterval(tick,1000);中函数tick没有带括号,那么JS中函数带括号与不带括号有什么区别?

  完整的数码时钟制作JS代码为:

    function twoDigitsStr(n)
{
if(n<10)
{return '0'+n;}
else
{return ''+n;}
}
window.onload=function()
{
var oDiv=document.getElementById('div1');
var aImg=oDiv.getElementsByTagName('img');
function tick()
{var oDate=new Date();
var str=twoDigitsStr(oDate.getHours())+twoDigitsStr(oDate.getMinutes())+twoDigitsStr(oDate.getSeconds());
for(var i=0;i<aImg.length;i++)
{
aImg[i].src="./数字时钟(1)_files/"+str.charAt(i)+".jpg";
}
} setInterval(tick,1000);
tick();
}

  当然,如果有好的创意图片,可以将上述数字图片进行替换,生成各种炫目的数码时钟效果。譬如:

  

通过JS制作一个简易数码时钟的更多相关文章

  1. JS制作一个创意数字时钟

    通过js代码制作一个创意数字时钟 通过JS代码实现创意数字时钟效果如下:由数字化的卡通形象图片取代常规的数字显示当前实时北京时间.具体效果示例: 核心重点: (1)Date方法的初步了解 (2)构建模 ...

  2. avalon.js实现一个简易日历

    使用MVVM框架avalon.js实现一个简易日历   最近在做公司内部的运营管理系统,因为与日历密切相关,同时无需触发条件直接显示在页面上,所以针对这样的功能场景,我就用avalon快速实现了一个简 ...

  3. 用JS制作一个信息管理平台完整版

      前  言 JRedu 在之前的文章中,介绍了如何用JS制作一个实用的信息管理平台. 但是那样的平台功能过于简陋了,我们今天来继续完善一下. 首先我们回顾一下之前的内容.   1.JSON的基础知识 ...

  4. 用XMLHttpRequest制作一个简易ajax

    概述 jquery退出历史舞台之后,我们怎么来发送ajax请求呢?可以用相关的库,也可以自己制作一个简易的ajax. 需要说明的是,我们使用的是XMLHttpRequest 2,它几乎兼容所有主流浏览 ...

  5. 使用 js 实现一个简易版的模版引擎

    使用 js 实现一个简易版的模版引擎 regex (function test() { this.str = str; })( window.Test = ...; format() { let ar ...

  6. 使用 js 实现一个简易版的 drag & drop 库

    使用 js 实现一个简易版的 drag & drop 库 具有挑战性的前端面试题 H5 DnD js refs https://www.infoq.cn/article/0NUjpxGrqRX ...

  7. 使用 js 实现一个简易版的动画库

    使用 js 实现一个简易版的动画库 具有挑战性的前端面试题 animation css refs https://www.infoq.cn/article/0NUjpxGrqRX6Ss01BLLE x ...

  8. 使用 js 实现一个简易版的 GIPHY 动图搜索 web 应用程序

    使用 js 实现一个简易版的 GIPHY 动图搜索 web 应用程序 具有挑战性的前端面试题 API JAMstack refs https://www.infoq.cn/article/0NUjpx ...

  9. 使用 js 实现一个简易版的 async 库

    使用 js 实现一个简易版的 async 库 具有挑战性的前端面试题 series & parallel 串行,并行 refs https://www.infoq.cn/article/0NU ...

随机推荐

  1. HDU_2203_KMP入门

    亲和串 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  2. 小程序 之picker-view省市县

    代码地址:https://github.com/yangsphp/area-picker

  3. Mock随机生成数据模拟后台接口

    <html> <head> <title>测试</title> <script src="http://code.jquery.com/ ...

  4. __declspec(dllexport)

    __declspec(dllexport) (2010-06-17 10:04:28) 转载▼ 标签: __declspec dllexport 导出 it 分类: C 先看代码:以下是在dev-c+ ...

  5. 用fallocate进行"文件预留"或"文件打洞"【转】

    转自uestc-leon的博客 内容作了一些修改,查看原文请访问uestc-leon 1. 什么是空洞文件? "在UNIX文件操作中,文件位移量可以大于文件的当前长度,在这种情况下,对该文件 ...

  6. Thesis Viva checklist

    This list gives you suggestions helpful in preparing to defend your thesis: I know my thesis thoroug ...

  7. oracle导入少量数据(少于10M)

    工具用PL/SQL Developer select * from temp1 for update;开锁,点+号,直接从Excel复制,然后粘贴. 程序猿必读

  8. Human Gene Functions POJ 1080 最长公共子序列变形

    Description It is well known that a human gene can be considered as a sequence, consisting of four n ...

  9. open cursor too much error

    今天遇到一个错误ORA-01000: maximum open cursors exceeded. 客户想增加 DB 的open_cursor这个参数. 但是我看了下,她的程序要打开几千个cursor ...

  10. Openfire:重新配置openfire

    有些时候当我们在对openfire开发时,需要重置openfire的配置,这时最简单的方法就是重新运行openfire的安装程序.要重新运行安装程序,方法很简单: 打开openfire的安装目录,找到 ...