jquery+html5制作超酷的圆盘时钟表

下面我将详细讲解“jquery+html5制作超酷的圆盘时钟表”的完整攻略,希望能够对您有所帮助。

一、准备工作

  1. 在你的html页面中引入jQuery库和相关的CSS文件。

```html

```

  1. 在html页面中创建一个div,用于渲染时钟表的canvas元素。

```html

```

  1. 确定时钟表的样式,例如大小、颜色等。

二、绘制画布

我们需要在canvas元素上面绘制一个圆形时钟表,来表示时间的流逝。

  1. 获取canvas元素和绘制上下文。

javascript
var canvas = document.getElementById('clockCanvas'),
ctx = canvas.getContext('2d');

  1. 设置canvas的宽度和高度。

javascript
canvas.width = 400;
canvas.height = 400;

  1. 开始绘制时钟表,绘制步骤如下:

  2. 绘制圆形背景。

    javascript
    ctx.beginPath();
    ctx.arc(canvas.width / 2, canvas.height / 2, 150, 0, Math.PI * 2);
    ctx.fillStyle = '#333';
    ctx.fill();

  3. 绘制刻度。

    ```javascript
    ctx.beginPath();
    ctx.strokeStyle = '#fff';
    ctx.lineWidth = 5;

    for (var i = 0; i < 12; i++) {
    var deg = (i - 3) * 30;
    var x = Math.cos(deg * Math.PI / 180) * 120;
    var y = Math.sin(deg * Math.PI / 180) * 120;
    ctx.moveTo(canvas.width / 2, canvas.height / 2);
    ctx.lineTo(canvas.width / 2 + x, canvas.height / 2 + y);
    ctx.stroke();
    }
    ```

  4. 绘制数字。

    ```javascript
    ctx.textAlign = 'center';
    ctx.textBaseline = 'middle';
    ctx.font = 'bold 25px Arial';

    for (var i = 1; i <= 12; i++) {
    var deg = (i - 3) * 30;
    var x = Math.cos(deg * Math.PI / 180) * 100;
    var y = Math.sin(deg * Math.PI / 180) * 100;
    ctx.fillText(i, canvas.width / 2 + x, canvas.height / 2 + y);
    }
    ```

  5. 运行代码,可以看到完整的圆盘时钟表。

三、绘制时针、分针、秒针

我们需要在时钟表的中央绘制一个由时针、分针和秒针组成的指针。

  1. 绘制指针。

```javascript
function drawPointer(radius, angle, color) {
ctx.beginPath();
ctx.strokeStyle = color;
ctx.lineWidth = 5;
ctx.lineCap = 'round';

   ctx.moveTo(canvas.width / 2, canvas.height / 2);
   ctx.lineTo(canvas.width / 2 + Math.cos(angle) * radius,
              canvas.height / 2 + Math.sin(angle) * radius);
   ctx.stroke();

}
```

  1. 获取当前时间,并将每个指针的角度计算出来。

```javascript
var date = new Date(),
hour = date.getHours(),
minute = date.getMinutes(),
second = date.getSeconds();

var hourAngle = (hour - 3) * 30 + (minute / 60) * 30,
minuteAngle = (minute - 15) * 6,
secondAngle = (second - 15) * 6;
```

  1. 绘制每个指针。

javascript
drawPointer(60, hourAngle * Math.PI / 180, '#fff');
drawPointer(90, minuteAngle * Math.PI / 180, '#fff');
drawPointer(120, secondAngle * Math.PI / 180, '#f00');

  1. 每秒更新一次指针的位置,并重新绘制时钟表。

javascript
setInterval(function() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
drawClock();
var date = new Date(),
hour = date.getHours(),
minute = date.getMinutes(),
second = date.getSeconds();
var hourAngle = (hour - 3) * 30 + (minute / 60) * 30,
minuteAngle = (minute - 15) * 6,
secondAngle = (second - 15) * 6;
drawPointer(60, hourAngle * Math.PI / 180, '#fff');
drawPointer(90, minuteAngle * Math.PI / 180, '#fff');
drawPointer(120, secondAngle * Math.PI / 180, '#f00');
}, 1000);

  1. 运行代码,完整的圆盘时钟表就制作完成了。

示例1:指针秒数变化时改变背景颜色

在每秒更新指针后,通过判断指针秒数是否为偶数,来改变背景颜色。

var second = date.getSeconds();

if (second % 2 === 0) {
    $('.canvasWrapper').css('background-color', '#f9f9f9');
} else {
    $('.canvasWrapper').css('background-color', '#333');
}

示例2:鼠标悬停在数字上,数字颜色改变

可以通过jQuery的mouseenter和mouseout事件来实现,如下所示:

function bindEvent() {
    $('#clockCanvas').on({
        mouseenter: function() {
            var $this = $(this);
            if ($this.hasClass('num')) {
                $this.css('color', '#f00');
            }
        },
        mouseleave: function() {
            var $this = $(this);
            if ($this.hasClass('num')) {
                $this.css('color', '#fff');
            }
        }
    });
}

在数字的绘制过程中,为每个数字添加class为num,例如:

for (var i = 1; i <= 12; i++) {
    var deg = (i - 3) * 30;
    var x = Math.cos(deg * Math.PI / 180) * 100;
    var y = Math.sin(deg * Math.PI / 180) * 100;
    ctx.fillText(i, canvas.width / 2 + x, canvas.height / 2 + y);
    var span = $('<span></span>').addClass('number').text(i).css({
        'left': canvas.width / 2 + x + 'px',
        'top': canvas.height / 2 + y + 'px'  
    });
    $('.canvasWrapper').append(span);
}
bindEvent();

至此,示例1和示例2的完整代码就完成了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jquery+html5制作超酷的圆盘时钟表 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • jQuery插件autocomplete使用详解

    jQuery插件autocomplete使用详解 1. 什么是autocomplete插件? autocomplete是一个jQuery插件,它可以为一组输入框提供自动完成的功能。用户在输入框中输入字母时,它会自动显示出可能匹配的选项,用户可以选择其中一个或多个,也可以继续输入直到匹配到想要的选项。 2. 用法示例 2.1 基本用法 <!doctype…

    jquery 2023年5月27日
    00
  • jQuery中deferred对象使用方法详解

    jQuery中Deferred对象使用方法详解 在jQuery中,Deferred对象是一种非常重要的概念,它可以帮助我们更好地管理异步操作。本文将详细讲解Deferred对象的使用方法。 Deferred对象介绍 Deferred对象可以看作是在jQuery中处理异步任务的一个工具。它提供了一些方法可以让我们更便捷地处理异步操作,比如: 通过done()方…

    jquery 2023年5月27日
    00
  • jQuery UI Selectable appendTo选项

    以下是关于 jQuery UI Selectable appendTo 选项的详细攻略: jQuery UI Selectable appendTo 选项 jQuery UI Selectable appendTo 选项用于指定选择框的父元素。该选项可以通过 jQuery selectable() 方法调用。 语法 $( ".selector&qu…

    jquery 2023年5月11日
    00
  • jQuery UI标签的高度样式选项

    以下是关于 jQuery UI 标签的高度样式选项的详细攻略: jQuery UI 标签的高度样式选项 使用 heightStyle 选项可以控制选项卡的高度。该选项可以接受以下三个: “auto”:选项卡的高度将根据内容自动调整。 “fill”:选项卡的高度将填充其父器的高度。 “content”:选项卡的高度将根据内容自动调整,但不会超过其父容的高度。 …

    jquery 2023年5月11日
    00
  • jQuery keyup()方法

    jQuery load()方法用于从服务器加载数据,并将返回的数据放入指定的元素中。该方法是一种简单的方式来从服务器获取HTML、XML、JSON等数据。 以下是load()方法的详细攻略: 语法 $(selector).load(url, data, callback) 参数 selector:必需,用于选择要放置返回数据的元素。 url:必需,用于指定要…

    jquery 2023年5月9日
    00
  • jQWidgets jqxDateTimeInput getText()方法

    以下是关于“jQWidgets jqxDateTimeInput getText()方法”的完整攻略,包含两个示例说明: 方法简介 jqxDateTimeInput 控件的 getText() 方法用于获取控件中当前选定的时间的本表示。该方法的语法如下: var text = $("#jqxDateTimeInput").jqxDateT…

    jquery 2023年5月10日
    00
  • springboot实现jar运行复制resources文件到指定的目录(思路详解)

    我来详细讲解一下“springboot实现jar运行复制resources文件到指定的目录(思路详解)”的完整攻略。 核心思路 在SpringBoot中,可以通过使用ResourceLoader实现将resources目录下的文件复制到指定目录。 具体的流程如下: 创建ResourceLoader对象; 使用ResourceLoader加载需要复制的资源文件…

    jquery 2023年5月27日
    00
  • jQuery绑定事件on()与弹窗的简要概述

    下面是详细的攻略: 1. jQuery 绑定事件 on() 方法 jQuery 的 on() 方法是用来设置元素事件的事件处理程序的方法,可以代替之前的 bind() 和 delegate() 方法。 使用 on() 方法可以让代码更加简洁,同时让元素事件绑定更加灵活。常用的语法如下: $(selector).on(event, childSelector,…

    jquery 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部