TWaver动画之雷达扫描效果
UI和功能是好的产品的两个重要因素,很多产品往往只注重功能上的设计,而忽略了UI。在这个“看脸”的时代,就算产品的功能很强大,如果UI跟不上步伐,你的产品都会在客户心中大打折扣。
做安全和监控的项目中经常会进行扫描,一般会用一个gif图片来表示软件正在进行扫描,但是如果想更换这个图标的样式,就需要美工重新做图。TWaver提供了动画效果,如果对图标的动画样式不满意,可以通过简单的更改程序来实现,避免了美工的二次返工,提高了效率。切入正题,看我们怎么实现一个动画的雷达扫描图,首先注册一个图片,用HTML5的canvas画了一个静态的雷达图,如果你熟悉TWaver的话,下边这段代码应该不难。如果不熟悉的话,可以参考产品文档自定义绘制(draw)这一节的内容。
twaver.Util.registerImage('radar', {
v: [
{
shape: 'draw',
draw: function (ctx, data, view) {
var canvas = this.canvas,
g = this.g,
gradient = this.gradient,
diameter = Math.floor(data.getWidth() * view.getZoom()),
radius = diameter / 2,
hueStart = 120,
hueEnd = 170,
hueDiff = Math.abs(hueEnd - hueStart),
width = diameter,
height = diameter;
if (!canvas) {
this.canvas = canvas = document.createElement('canvas');
}
if (width !== canvas.width || height !== canvas.height) {
canvas.width = diameter;
canvas.height = diameter;
this.g = g = canvas.getContext('2d');
this.gradient = gradient = g.createLinearGradient(radius, 0, 0, 0);
gradient.addColorStop(0, 'hsla(' + hueStart + ', ' + 50 + '%, ' + 40 + '%, 1)');
gradient.addColorStop(1, 'hsla(' + hueEnd + ', ' + 50 + '%, ' + 40 + '%, 0.1)');
}
g.globalCompositeOperation = 'destination-out';
g.fillStyle = 'hsla(0, 0%, 0%, 0.1)';
g.fillRect(0, 0, width, height);
g.globalCompositeOperation = 'lighter';
var i;
for (i = 0; i < 4; i++) {
g.beginPath();
g.arc(radius, radius, ((radius - 1) / 4) * (i + 1), 0, Math.PI * 2, false);
g.strokeStyle = 'hsla(' + (hueEnd - (i * (hueDiff / 4))) + ', ' + 50 + '%, ' + 40 + '%, 0.1)';
g.lineWidth = 3;
g.stroke();
};
g.beginPath();
g.moveTo(radius - 1, 2);
g.lineTo(radius - 1, height - 2);
g.moveTo(2, radius - 1);
g.lineTo(width - 2, radius - 1);
g.strokeStyle = 'hsla(' + ((hueStart + hueEnd) / 2) + ', ' + 50 + '%, ' + 40 + '%, .03)';
g.stroke();
g.save();
g.translate(radius, radius);
g.rotate(data.getClient('angle'));
g.beginPath();
g.moveTo(0, 0);
g.arc(0, 0, radius, -0.0349, 0.0349, false);
g.closePath();
g.fillStyle = gradient;
g.fill();
g.restore();
ctx.scale(1 / view.getZoom(), 1 / view.getZoom());
ctx.drawImage(canvas, -width / 2, -height / 2);
}
}
]
});
接下来给这个雷达图设置一个动态的效果,让雷达图不断的扫描。下边的这段代码设置了雷达指针的扫描角度,持续时间:
new twaver.Animate({
source: node,
attr: 'C@angle',
from: 0,
to: Math.PI * 2,
dur: 4000,
repeat: Number.POSITIVE_INFINITY,
reverse: false
}).play();
}
这样一个简单的雷达动画效果就出来了,是不是很简答,如果对这个效果用兴趣的,可以发邮件索取源代码,附上邮箱:jack.shangguan@servasoft.com
TWaver动画之雷达扫描效果的更多相关文章
- 【canvas系列】canvas实现"雷达扫描"效果
今天来讲解"雷达扫描"效果demo,来源于QQ群里边有群友说想要个雷达效果,就尝试写了一下. 效果图: demo链接: https://win7killer.github.io/c ...
- html 类似雷达扫描效果 及 闪屏效果
//雷达扫描效果 1 <em id="Radar" class="RadarFast"></em> css: .RadarFast{ p ...
- canvas实现"雷达扫描"效果
今天来讲解“雷达扫描”效果demo,来源于QQ群里边有群友说想要个雷达效果,就尝试写了一下. 效果图: demo链接: https://win7killer.github.io/can_demo/de ...
- cesium 飞线 瓣体传感器(雷达扫描) 效果
参考:github地址 本人新手,npm webpack 这些还是一知半解,只记录自己得到成功结果的操作步骤,可能存在多余或错误的步骤. 1.github 把代码下载下来,解压. 2.webstorm ...
- 【Flutter 实战】自定义动画-涟漪和雷达扫描
老孟导读:此篇文章是 Flutter 动画系列文章第五篇,本文介绍2个自定义动画:涟漪和雷达扫描效果. 涟漪 实现涟漪动画效果如下: 此动画通过 CustomPainter 绘制配合 Animatio ...
- OpenGL 画出雷达动态扫描效果(二) 非底图
OpenGL 画出雷达动态扫描效果(一)中给出了已一张图片作为底图的雷达扫面程序 如果有漂亮的雷达底图的话,效果应该非常不错的,另外也可以直接手绘雷达框架 效果如下 雷达主体代码 glLineWidt ...
- jQuery雷达扫描切换幻灯片代码
基于jQuery雷达扫描切换幻灯片代码.这是一款切换效果类似雷达扫描,支持鼠标滚轮滚动切换.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class=" ...
- 028 Android 旋转动画+病毒查杀效果+自定义样式的ProgressBar
1.目标效果 旋转动画+病毒查杀效果 2.xml布局文件 (1)activity_kill_virus.xml <?xml version="1.0" encoding=&q ...
- 使用Unity3D自带动画系统制作下雨效果
之前看了以前版本的unity3d demo AngryBots ,觉得里面的下雨效果不错,刚好前段时间学习了,写出来跟大家分享下,直接开始. 使用自带动画系统制作下雨效果. 先制作下雨的雨滴涟漪 步骤 ...
随机推荐
- [办公应用]如何打印较小边距的PPT讲义(或者每页打印16页)
关键词:打印 PPT 讲义 4张 边距 今天同事问我如何打印PowerPoint的讲义.她自己使用PowerPoint打印讲义,设置每页4张,但是页边距太大:觉得浪费很大. 经过网上查阅后,现将方 ...
- [LeetCode] Construct Binary Tree from Inorder and Pretorder Traversal
Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that ...
- Java 基础 —— enum
枚举的遍历: enum Suit { CLUB, DIAMOND, HEART, SPADE } Collection<Suit> suitTypes = Arrays.asList(Su ...
- 【Beijing 2010】 次小生成树
[题目链接] 点击打开链接 [算法] 首先,有一个结论 : 一定有一棵严格次小生成树是在最小生成树的基础上去掉一条边,再加上一条边 这个结论的正确性是显然的 我们先用kruskal算法求出最小生成树, ...
- bzoj 1925: [Sdoi2010]地精部落【dp】
设[f[i][j]为1到i,开头数字是j并且是山峰的方案数 注意到当数字j和j-1不相邻时,交换它们会得到一个新的符合要求的序列,所以f[i][j]+=f[i][j-1]; 如果相邻,那么j是山峰,j ...
- Mybatis Generator插件升级版
一.目的: 1. *mapper.java 文件名称 改为*DAO.java2. mapper以及mapper.xml 重复执行,只会覆盖原模板方法,不会覆盖自定义方法3. 实体类添加中文注释 二.步 ...
- httpd 安装ssl证书
1) 安装ssl模块 # yum install mod_ssl -y Ps:安装完成后,会在/etc/httpd/conf.d/下生成一个ssl.conf配置文件. 2) 先建一个目录用来放ssl证 ...
- AppConfig 操作简易封装
using System; using System.Configuration; namespace HT.IMS.Common { public class ClientConfig { ; pu ...
- JavaScript 正则表达式(转自 mozilla)
正则表达式是被用来匹配字符串中的字符组合的模式.在JavaScript中,正则表达式也是对象. 这种模式可以被用于 RegExp 的 exec 和 test 方法以及 String 的 match.r ...
- 278 First Bad Version 第一个错误的版本
你是产品经理,目前正在领导一个团队开发一个新产品.不幸的是,您的产品的最新版本没有通过质量检查.由于每个版本都是基于之前的版本开发的,所以错误版本之后的所有版本都是不好的.假设你有 n 个版本 [1, ...