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动画之雷达扫描效果的更多相关文章

  1. 【canvas系列】canvas实现"雷达扫描"效果

    今天来讲解"雷达扫描"效果demo,来源于QQ群里边有群友说想要个雷达效果,就尝试写了一下. 效果图: demo链接: https://win7killer.github.io/c ...

  2. html 类似雷达扫描效果 及 闪屏效果

    //雷达扫描效果 1 <em id="Radar" class="RadarFast"></em> css: .RadarFast{ p ...

  3. canvas实现"雷达扫描"效果

    今天来讲解“雷达扫描”效果demo,来源于QQ群里边有群友说想要个雷达效果,就尝试写了一下. 效果图: demo链接: https://win7killer.github.io/can_demo/de ...

  4. cesium 飞线 瓣体传感器(雷达扫描) 效果

    参考:github地址 本人新手,npm webpack 这些还是一知半解,只记录自己得到成功结果的操作步骤,可能存在多余或错误的步骤. 1.github 把代码下载下来,解压. 2.webstorm ...

  5. 【Flutter 实战】自定义动画-涟漪和雷达扫描

    老孟导读:此篇文章是 Flutter 动画系列文章第五篇,本文介绍2个自定义动画:涟漪和雷达扫描效果. 涟漪 实现涟漪动画效果如下: 此动画通过 CustomPainter 绘制配合 Animatio ...

  6. OpenGL 画出雷达动态扫描效果(二) 非底图

    OpenGL 画出雷达动态扫描效果(一)中给出了已一张图片作为底图的雷达扫面程序 如果有漂亮的雷达底图的话,效果应该非常不错的,另外也可以直接手绘雷达框架 效果如下 雷达主体代码 glLineWidt ...

  7. jQuery雷达扫描切换幻灯片代码

    基于jQuery雷达扫描切换幻灯片代码.这是一款切换效果类似雷达扫描,支持鼠标滚轮滚动切换.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class=" ...

  8. 028 Android 旋转动画+病毒查杀效果+自定义样式的ProgressBar

    1.目标效果 旋转动画+病毒查杀效果 2.xml布局文件 (1)activity_kill_virus.xml <?xml version="1.0" encoding=&q ...

  9. 使用Unity3D自带动画系统制作下雨效果

    之前看了以前版本的unity3d demo AngryBots ,觉得里面的下雨效果不错,刚好前段时间学习了,写出来跟大家分享下,直接开始. 使用自带动画系统制作下雨效果. 先制作下雨的雨滴涟漪 步骤 ...

随机推荐

  1. 浏览器对MP4视频 帧宽度 高度的兼容性

    传入oss后 或者 本地 拖动到   浏览器 谷歌 都不能播放 Edge 可以播放 但 Edge不支持 本地拖入 播放 搜狗浏览器 同谷歌

  2. 解决ES集群状态异常教程(存在UNASSIGNED)

    解决ES集群状态异常教程(存在UNASSIGNED)_百度经验 https://jingyan.baidu.com/article/9158e00013f787a255122843.html

  3. JS的内存空间

    变量对象与引用数据 概念解释 对于基本数据类型Undefined.Null.Boolean.Number.String往往保存在变量对象中 而对于引用数据类型,如Array.String.Object ...

  4. ios21--xib例子

    故事板控制器: // // XMGViewController.m // 03-综合练习 // // Created by xiaomage on 15/12/28. // Copyright © 2 ...

  5. Application Warm-up Module IIS7.5 也有Warm Up功能,让ASP.NET 第一次Request不变慢

    Application Warm-up Module: 應用程式的暖機代理人 http://www.microsoft.com/taiwan/technet/iis/expand/Applicatio ...

  6. POJ2503 Babelfish map或者hash_map

    POJ2503 这是一道水题,用Map轻松AC. 不过,可以拿来测一下字符串散列, 毕竟,很多情况下map无法解决的映射问题需要用到字符串散列. 自己生成一个质数, 随便搞一下. #include&l ...

  7. jquery对所有<input type="text"的控件赋值

    function resetData() {      $("input[type=text]").each(      function() {     $(this).attr ...

  8. mybatis中各种数据的映射类型

    Mybatis对应的java和数据库的数据类型,最后有图片 Mybatis                                  java                          ...

  9. nginx 多进程 + io多路复用 实现高并发

    一.nginx 高并发原理 简单介绍:nginx 采用的是多进程(单线程) + io多路复用(epoll)模型 实现高并发 二.nginx 多进程 启动nginx 解析初始化配置文件后会 创建(for ...

  10. 自动生成 html5 小页面

    StringBuilder htmltext = new StringBuilder();            try            {                //var readP ...