canvas动画快照 欢迎大家有好点建议可以提。js高级扣扣群:170798851 欢迎来交流学习
git项目地址:https://github.com/Jonavin/HTML5_Study
重点思路:
snapshotBtn.onclick = function(e){ var dataUrl; if(snapshotBtn.value === "快照"){ dataUrl = cvs.toDataURL();//重点方法 clearInterval(loop); snapshotImg.src = dataUrl; snapshotImg.style.display = "inline"; cvs.style.display = "none"; snapshotBtn.value="恢复"; }else{ cvs.style.display = "inline"; snapshotImg.style.display = "none"; loop = setTimeout(function(){ _functions.drawClock.call(_functions); },1000); snapshotBtn.value="快照"; } }
/**
* Created by wsf on 2014-11-22.
*/
(function(win){
"use strict";
var doc = win.document,cvs = doc.getElementById("canvas"),ctx = cvs.getContext("2d"),
WIDTH = cvs.width,HEIGHT = cvs.height,
FONT_HEIGHT=3,MARGIN=160,HAND_TRUNCATION = WIDTH/10,
HOUR_HAND_TRUNCTION = WIDTH/10,NUMERAL_SPACING = 20,
RADIUS = WIDTH/2-MARGIN,HAND_RADIUS=RADIUS+NUMERAL_SPACING,
numerals = [1,2,3,4,5,6,7,8,9,10,11,12],
snapshotBtn = doc.getElementById("snapshotBtn"),
snapshotImg = doc.getElementById("snapshotImg"),
loop;
/**
* 画图函数
* @type {{}}
*/
var _functions = {
//画外层圆形
drawCircle:function(){
ctx.beginPath();//开始路径
ctx.arc(WIDTH/2,HEIGHT/2,RADIUS,0,Math.PI*2,true);
ctx.stroke();
},
//画钟表刻度
drawNumerals:function(){
var angle = 0,numeralWidth = 0;
numerals.forEach(function(numeral){
angle = Math.PI/6*(numeral-3);
numeralWidth = ctx.measureText(numeral).width;
ctx.fillText(numeral,WIDTH/2+Math.cos(angle)*(HAND_RADIUS)-numeralWidth/2,HEIGHT/2+Math.sin(angle)+(HAND_RADIUS)+FONT_HEIGHT/3);
});
},
//画中间圆心
drawCenter:function(){
ctx.beginPath();
ctx.arc(WIDTH/2,HEIGHT/2,5,0,Math.PI*2,true);
ctx.fill();//实心
},
//画钟表指针
drawHand:function(loc,isHour){
var angle = (Math.PI*2)*(loc/60)-Math.PI/ 2,
handRadius = isHour?RADIUS-HAND_TRUNCATION-HOUR_HAND_TRUNCTION:RADIUS-HAND_RADIUS;
ctx.moveTo(WIDTH/2,HEIGHT/2);//改变圆点坐标
ctx.lineTo(WIDTH/2+Math.cos(angle)*handRadius,HEIGHT/2+Math.sin(angle)*handRadius);
ctx.stroke();
},
//画所有的钟表指针
drawHands:function(){
var _d = new Date,_h = _d.getHours(),
_h = _h>12?_h-12:_h;
this.drawHand(_h*5+(_d.getMinutes()/60)*5,true);
this.drawHand(_d.getMinutes(),false);
this.drawHand(_d.getSeconds(),false);
},
//画钟表主函数
drawClock: function () {
ctx.clearRect(0,0,WIDTH,HEIGHT);//清空画布
this.drawCircle();
this.drawCenter();
this.drawHands();
//this.drawNumerals();
}
}
ctx.font = FONT_HEIGHT+"px";
loop = setInterval(function(){
_functions.drawClock.call(_functions);
},1000);
/**
* 重点思路
* @param e
*/
snapshotBtn.onclick = function(e){
var dataUrl;
if(snapshotBtn.value === "快照"){
dataUrl = cvs.toDataURL();//重点方法
clearInterval(loop);
snapshotImg.src = dataUrl;
snapshotImg.style.display = "inline";
cvs.style.display = "none";
snapshotBtn.value="恢复";
}else{
cvs.style.display = "inline";
snapshotImg.style.display = "none";
loop = setTimeout(function(){
_functions.drawClock.call(_functions);
},1000);
snapshotBtn.value="快照";
}
}
})(window);
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>canvas钟表</title> <style> body{ background: #ddd; } body{ background: #aaaaaa; } #canvas{ position: absolute; left:10px; top:1.5em; margin:20px; border: thin solid dodgerblue; background: #fff; } #snapshotImg{ position: absolute; display: none; left: 10px; top:1.5em; margin:20px; border: thin solid dodgerblue; background: #fff; } </style> </head> <body> <div id="controls"> <input type="button" id="snapshotBtn" value="快照"/> </div> <img id="snapshotImg"/> <canvas id="canvas" width="500" height="300"></canvas> </body> <script src="clock.js"></script> </html>
相关推荐
HTML5-Canvas五彩纸屑飘落动画特效.rar HTML5-Canvas五彩纸屑飘落动画特效.rar HTML5-Canvas五彩纸屑飘落动画特效.rar HTML5-Canvas五彩纸屑飘落动画特效.rar HTML5-Canvas五彩纸屑飘落动画特效.rar HTML5-Canvas...
ec-canvas 实现echart图表显示ec-canvas 实现echart图表显示ec-canvas 实现echart图表显示ec-canvas 实现echart图表显示ec-canvas 实现echart图表显示ec-canvas 实现echart图表显示ec-canvas 实现echart图表显示ec-...
"html5-canvas-mouse-ink"这个项目显然与Canvas有关,特别是涉及到了鼠标交互和动画效果,这通常是用来创建某种动态视觉效果,比如跟随鼠标移动的墨迹效果。 在HTML5 Canvas中,`<canvas>`元素是核心,它是画布,而...
《Leaflet.Canvas-Markers-0.2.0:在地图上绘制高性能的canvas标记》 在Web开发中,地图已经成为一种常见的数据可视化工具,而Leaflet作为一款轻量级的JavaScript库,因其易于使用和强大的功能深受开发者喜爱。本文...
HTML5的Canvas元素是网页开发中的一个重要组成部分,它允许开发者在网页上进行动态图形绘制,提供了丰富的绘图功能。在这个“文字粒子效果html5-canvas-side-文字.rar”压缩包中,包含的项目是一个利用Canvas API...
Canvas是HTML5的一个重要特性,允许在网页上进行动态图形绘制。在这个“vue-canvas-poster”项目中,我们将探讨如何结合Vue和Canvas来实现一个海报合成的功能。 首先,Vue组件是Vue.js的核心概念,它允许开发者将UI...
HTML5-Canvas点击泡沫横飞特效.rar HTML5-Canvas点击泡沫横飞特效.rar HTML5-Canvas点击泡沫横飞特效.rar HTML5-Canvas点击泡沫横飞特效.rar HTML5-Canvas点击泡沫横飞特效.rar HTML5-Canvas点击泡沫横飞特效.rar ...
html5-实现canvas宇宙黑洞炫酷粒子动画特效.rar html5-实现canvas宇宙黑洞炫酷粒子动画特效.rar html5-实现canvas宇宙黑洞炫酷粒子动画特效.rar html5-实现canvas宇宙黑洞炫酷粒子动画特效.rar html5-实现canvas宇宙...
html2canvas-1.0.0-rc.4版本
在微信小程序中,`canvas`同样被用来进行图形绘制和交互,但是其API和HTML5中的canvas有所不同,主要是为了适应小程序的特性和性能优化。 该组件的核心在于拖动和缩放机制的实现。微信小程序提供了`wx....
HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上直接绘制图形,从而创建交互式的、动态的视觉效果。这个"html5-canvas-loader.rar"文件很可能包含了一个使用HTML5 Canvas技术实现的加载器示例。让我们...
EC-Canvas是阿里云ECharts团队推出的一种专为移动端设计的绘图库,它基于HTML5的Canvas元素,用于在移动设备上展示丰富的数据可视化效果。EC-Canvas动态加载是其核心特性之一,允许开发者在运行时根据需要加载图表,...
【微信小程序 uni-app wxml-to-canvas】是一个用于在微信小程序中利用静态模板和样式来绘制canvas,并最终能够导出为图片的工具。这个技术在实际应用中特别适合用来生成分享图,即用户在社交平台上分享时看到的个性...
在这个特定的案例中,"HTML5 Canvas 3D跳动Loading加载动画-可调节参数"是一个利用Canvas API创建的3D加载动画,其特点是可以根据需求调整动画参数,提供更个性化的用户体验。 首先,我们需要了解HTML5 Canvas的...
- **游戏开发**:通过canvas实现游戏中的图形动画效果,如角色移动、碰撞检测等。 - **图片处理**:对图片进行裁剪、旋转、滤镜等操作,增强用户体验。 - **矢量图形**:绘制矢量图形,保持图形在不同分辨率设备上的...
总之,"html5-canvas-3d-earth-rotate.zip"项目展示了HTML5 Canvas在3D图形方面的应用,通过JavaScript实现了3D地球的动态旋转效果,这不仅涉及到基本的Canvas绘图,还包括3D图形理论和动画技术。对于想要提升Web...
JavaScript是Web开发中的重要语言,尤其在创建交互式和动态网页内容方面发挥着...通过学习和实践这些知识点,你可以创建出更复杂的Canvas动画效果,不仅限于太空星球运动,还可以扩展到其他各种动态图形和交互式场景。
这个组件基于HTML5的canvas元素,使得用户能够在PC和移动设备上进行手写签名,适用于各种需要签名确认的场景,如电子商务、文档签署等。 在深入探讨Vue-sign-canvas组件之前,我们先了解一下关键组成部分: 1. **...
基于HTML5 Canvas烟花绽放效果,支持自定义 基于HTML5 Canvas烟花绽放效果,支持自定义 基于HTML5 Canvas烟花绽放效果,支持自定义 基于HTML5 Canvas烟花绽放效果,支持自定义 基于HTML5 Canvas烟花绽放效果,...
HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上进行动态图形绘制,创造出丰富的交互式用户体验。"html5-canvas-web-图片涂鸦"这个主题涉及到的知识点主要集中在如何利用HTML5的Canvas API来实现图片...