JavaScript實(shí)現(xiàn)簡(jiǎn)單的倒計(jì)時(shí)效果
本文實(shí)例為大家分享了JavaScript實(shí)現(xiàn)簡(jiǎn)單倒計(jì)時(shí)效果的具體代碼,供大家參考,具體內(nèi)容如下
<!DOCTYPE html> <html> ? ? <head lang="en"> ? ? ? ? <meta charset="utf8"> ? ? ? ? <meta http-equiv="X-UA-Compatible" cotent="IE=edge,chrome=1"> ? ? ? ? <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=2.0 initial-scale=1.0, user-scalable=yes"> ? ? ? ? <meta name="keywords" content="count down"> ? ? ? ? <meta name="description" content="count down"> ? ? ? ? <title>倒計(jì)時(shí)(Count Down)</title> ? ? </head> ? ? <body> ? ? ? ? <script> ? ? ? ? ? ? var halfPI = Math.PI / 2; ? ? ? ? ? ? var doublePI = Math.PI * 2; ? ? ? ? ? ? var ctx; ? ? ? ? ? ? //畫布大小 ? ? ? ? ? ? var canvasSize = 200; ? ? ? ? ? ? var halfCanvasSize = canvasSize / 2; ? ? ? ? ? ? //畫布的外切圓半徑 ? ? ? ? ? ? var excircleRadius = Math.SQRT2 * halfCanvasSize; ? ? ? ? ? ? //線條寬度 ? ? ? ? ? ? var lineWidth = 2; ? ? ? ? ? ? //蒙版顏色 ? ? ? ? ? ? var maskColor = "rgba(90,90,90,0.4)"; ? ? ? ? ? ? //單個(gè)數(shù)字的字體 ? ? ? ? ? ? var singleNumFont = halfCanvasSize * 1.6 + "px Calibri"; ? ? ? ? ? ? //兩個(gè)數(shù)字的字體 ? ? ? ? ? ? var doubleNumFont = halfCanvasSize * 1.2 + "px Calibri"; ? ? ? ? ? ? //每秒刷新的幀數(shù) ? ? ? ? ? ? var stepCount = 30; ? ? ? ? ? ? //定時(shí)器執(zhí)行間隔時(shí)間 ? ? ? ? ? ? var interval = 1000 / stepCount; ? ? ? ? ? ? //每幀前進(jìn)的弧度 ? ? ? ? ? ? var radianStep = doublePI / stepCount; ? ? ? ? ? ? //定時(shí)器id ? ? ? ? ? ? var intervalId = 0; ? ? ? ? ? ? //倒計(jì)時(shí) ? ? ? ? ? ? var countdownTime = 0; ? ? ? ? ? ? //當(dāng)前角度 ? ? ? ? ? ? var radian = 0; ? ? ? ? ? ? function init() { ? ? ? ? ? ? ? ? var canvas = document.createElement("canvas"); ? ? ? ? ? ? ? ? canvas.innerHTML = "Your browser can not support canvas"; ? ? ? ? ? ? ? ? canvas.width = canvasSize; ? ? ? ? ? ? ? ? canvas.height = canvasSize; ? ? ? ? ? ? ? ? canvas.style.backgroundColor = "darkkhaki"; ? ? ? ? ? ? ? ? canvas.style.display = "block"; ? ? ? ? ? ? ? ? var restartBtn = document.createElement("button"); ? ? ? ? ? ? ? ? restartBtn.innerHTML = "restart"; ? ? ? ? ? ? ? ? //注意:canvas的width不能寫單位, 而按鈕的width必須寫單位, 否則無效 ? ? ? ? ? ? ? ? restartBtn.style.width = "200px"; ? ? ? ? ? ? ? ? restartBtn.addEventListener("click", function() { ? ? ? ? ? ? ? ? ? ? restart(); ? ? ? ? ? ? ? ? }); ? ? ? ? ? ? ? ? document.body.appendChild(canvas); ? ? ? ? ? ? ? ? document.body.appendChild(restartBtn); ? ? ? ? ? ? ? ? ctx = canvas.getContext("2d"); ? ? ? ? ? ? ? ? ctx.lineWidth = lineWidth; ? ? ? ? ? ? ? ? ctx.textAlign = "center"; ? ? ? ? ? ? ? ? ctx.textBaseline = "middle"; ? ? ? ? ? ? ? ? restart(); ? ? ? ? ? ? } ? ? ? ? ? ? function strokeLine(x1, y1, x2, y2) { ? ? ? ? ? ? ? ? ctx.beginPath(); ? ? ? ? ? ? ? ? ctx.moveTo(x1, y1); ? ? ? ? ? ? ? ? ctx.lineTo(x2, y2); ? ? ? ? ? ? ? ? ctx.stroke(); ? ? ? ? ? ? } ? ? ? ? ? ? function strokeCircle(cx, cy, r) { ? ? ? ? ? ? ? ? ctx.beginPath(); ? ? ? ? ? ? ? ? ctx.arc(cx, cy, r, 0, doublePI); ? ? ? ? ? ? ? ? ctx.stroke(); ? ? ? ? ? ? } ? ? ? ? ? ? //渲染背景 ? ? ? ? ? ? function renderBg() { ? ? ? ? ? ? ? ? ctx.clearRect(0, 0, canvasSize, canvasSize); ? ? ? ? ? ? ? ? //繪制橫豎線 ? ? ? ? ? ? ? ? ctx.strokeStyle = "black"; ? ? ? ? ? ? ? ? strokeLine(halfCanvasSize, 0, halfCanvasSize, canvasSize); ? ? ? ? ? ? ? ? strokeLine(0, halfCanvasSize, canvasSize, halfCanvasSize); ? ? ? ? ? ? ? ? //繪制兩個(gè)內(nèi)圈 ? ? ? ? ? ? ? ? ctx.strokeStyle = "Silver"; ? ? ? ? ? ? ? ? strokeCircle(halfCanvasSize, halfCanvasSize, halfCanvasSize * 0.9); ? ? ? ? ? ? ? ? strokeCircle(halfCanvasSize, halfCanvasSize, halfCanvasSize * 0.7); ? ? ? ? ? ? } ? ? ? ? ? ? //渲染蒙版 ? ? ? ? ? ? function renderMask(radian) { ? ? ? ? ? ? ? ? //繪制扇形的邊界線 ? ? ? ? ? ? ? ? var x = halfCanvasSize + excircleRadius * Math.sin(radian);? ? ? ? ? ? ? ? ? var y = halfCanvasSize - excircleRadius * Math.cos(radian); ? ? ? ? ? ? ? ? ctx.strokeStyle = "black"; ? ? ? ? ? ? ? ? strokeLine(halfCanvasSize, halfCanvasSize, x, y); ? ? ? ? ? ? ? ? //繪制扇形 ? ? ? ? ? ? ? ? ctx.fillStyle = maskColor; ? ? ? ? ? ? ? ? ctx.beginPath(); ? ? ? ? ? ? ? ? ctx.moveTo(halfCanvasSize, halfCanvasSize); ? ? ? ? ? ? ? ? ctx.arc(halfCanvasSize, halfCanvasSize, excircleRadius, -halfPI, -halfPI + radian); ? ? ? ? ? ? ? ? ctx.closePath(); ? ? ? ? ? ? ? ? ctx.fill(); ? ? ? ? ? ? } ? ? ? ? ? ? //渲染數(shù)字 ? ? ? ? ? ? function renderNum(num) { ? ? ? ? ? ? ? ? ctx.fillStyle = "black"; ? ? ? ? ? ? ? ? ctx.font = num < 10 ? singleNumFont : doubleNumFont; ? ? ? ? ? ? ? ? ctx.fillText(num, halfCanvasSize, halfCanvasSize); ? ? ? ? ? ? } ? ? ? ? ? ? //渲染 ? ? ? ? ? ? function render() { ? ? ? ? ? ? ? ? renderBg(); ? ? ? ? ? ? ? ? renderMask(radian); ? ? ? ? ? ? ? ? renderNum(countdownTime); ? ? ? ? ? ? } ? ? ? ? ? ? //更新 ? ? ? ? ? ? function update() { ? ? ? ? ? ? ? ? radian += radianStep; ? ? ? ? ? ? ? ? if(radian >= (doublePI + radianStep)) { ? ? ? ? ? ? ? ? ? ? radian = 0; ? ? ? ? ? ? ? ? ? ? countdownTime--; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if(countdownTime < 0) { ? ? ? ? ? ? ? ? ? ? stop(); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? //循環(huán) ? ? ? ? ? ? function loop() { ? ? ? ? ? ? ? ? render(); ? ? ? ? ? ? ? ? update(); ? ? ? ? ? ? } ? ? ? ? ? ? //停止 ? ? ? ? ? ? function stop() { ? ? ? ? ? ? ? ? if(intervalId === 0) { ? ? ? ? ? ? ? ? ? ? return; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? clearInterval(intervalId); ? ? ? ? ? ? ? ? intervalId = 0; ? ? ? ? ? ? } ? ? ? ? ? ? //開始倒計(jì)時(shí) ? ? ? ? ? ? function restart() { ? ? ? ? ? ? ? ? stop(); ? ? ? ? ? ? ? ? countdownTime = 10; ? ? ? ? ? ? ? ? radian = 0; ? ? ? ? ? ? ? ? intervalId = setInterval(loop, interval); ? ? ? ? ? ? } ? ? ? ? ? ? init(); ? ? ? ? </script> ? ? </body> </html>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- js實(shí)現(xiàn)日期天數(shù)、時(shí)分秒的倒計(jì)時(shí)完整代碼
- JavaScript實(shí)現(xiàn)倒計(jì)時(shí)功能2種方法實(shí)例
- JavaScript倒計(jì)時(shí)定時(shí)器和間隔定時(shí)器使用詳解
- 一步步教你用js簡(jiǎn)單實(shí)現(xiàn)新年倒計(jì)時(shí)
- JS實(shí)現(xiàn)簡(jiǎn)單網(wǎng)頁倒計(jì)時(shí)器
- javascript實(shí)現(xiàn)倒計(jì)時(shí)小案例
- 用JS寫了一個(gè)30分鐘倒計(jì)時(shí)器的實(shí)現(xiàn)示例
- JS利用時(shí)間戳倒計(jì)時(shí)的實(shí)現(xiàn)示例
相關(guān)文章
用javascript實(shí)現(xiàn)的電信鐵通(網(wǎng)通)自動(dòng)跳轉(zhuǎn)源代碼
用javascript實(shí)現(xiàn)的電信鐵通(網(wǎng)通)自動(dòng)跳轉(zhuǎn)源代碼...2007-11-11JS實(shí)現(xiàn)控制表格行內(nèi)容垂直對(duì)齊的方法
這篇文章主要介紹了JS實(shí)現(xiàn)控制表格行內(nèi)容垂直對(duì)齊的方法,通過javascript的getElementById獲取元素并設(shè)置其相應(yīng)樣式來實(shí)現(xiàn)這一功能,需要的朋友可以參考下2015-03-03webpack-dev-server 的 host 配置 0.0.0.0的方法
這篇文章主要介紹了webpack-dev-server 的 host 配置 0.0.0.0的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,,需要的朋友可以參考下2024-01-01響應(yīng)式表格之固定表頭的簡(jiǎn)單實(shí)現(xiàn)
下面小編就為大家?guī)硪黄憫?yīng)式表格之固定表頭的簡(jiǎn)單實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-08-08js中字符型和數(shù)值型數(shù)字的互相轉(zhuǎn)化方法(必看)
下面小編就為大家?guī)硪黄猨s中字符型和數(shù)值型數(shù)字的互相轉(zhuǎn)化方法(必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04javascript中創(chuàng)建對(duì)象的三種常用方法
在javascript中創(chuàng)建對(duì)象的三種方法,腳本之家以前發(fā)布過有簡(jiǎn)單實(shí)例版的,大家可以參考下。2010-12-12