博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript版的简单动画
阅读量:5794 次
发布时间:2019-06-18

本文共 2595 字,大约阅读时间需要 8 分钟。

Google+中有一个特效:拖拽用户头像至分组内,用户头像会有一个特效(绕着圆圈转一圈)。写了个简单的示例,效果如下图所示:

image

 

核心部分就是:

for (var i = 0; i < 360; i+=1) {

    var radius = Math.PI * i / 180;

    //Math.cos(angle)、Math.sin(angle)

   //todo….

}

1角度 = Math.PI / 180   => (π/180)

   ~ ~ 
步长:
1: 
2: //1度=π/180 弧度 ( ≈0.017453弧度 )
3: 
4: !(function() {
5:     for (var i = 0; i < 360; i+=1) {
6:         var r = 200;
7:         var x0 = 300;
8:         var y0 = 300;
9: 
10:         var angle = Math.PI * i / 180;
11:         var x = Math.cos(angle) * r + x0;
12:         var y = Math.sin(angle) * r + y0;
13: 
14:         document.write('
');
15: 
16:         r = 170;
17:         x = Math.cos(angle) * r + x0;
18:         y = Math.sin(angle) * r + y0;
19:         document.write('
');
20:     }
21: })();
22: 
23: function getEl(id) {
24:     return typeof id === 'string' ? document.getElementById(id) : id;
25: }
26: 
27: getEl("btn").onclick = moveHandler;
28: 
29: function movePos(n) {
30:     var el = getEl("modelEl");
31: 
32:     var r = 185;
33:     var x0 = 300;
34:     var y0 = 300;
35: 
36:     var angle = Math.PI * n / 180;
37:     var x = Math.cos(angle) * r + x0 - el.offsetWidth/2;
38:     var y = Math.sin(angle) * r + y0 - el.offsetHeight/2;
39: 
40:     el.style.left = x + 'px';
41:     el.style.top = y + 'px';
42: }
43: 
44: movePos(270);
45: 
46: function transform(A) {
47:     return 1 - Math.pow(1 - A, 3);
48: }
49: 
50: function moveHandler() {
51:     var base = 270;
52:     var step = getEl('sel').value | 0;
53:     var start = 360;
54:     var end = 0;
55: 
56:     getEl("btn").disabled = true;
57:
58:     var timer = setInterval(function() {
59:         if (start >= end) {
60:             movePos(base + start);
61:             start -= step;
62: 
63:             step += transform((start - end)/360) / 100;
64:         } else {
65:             movePos(base + end);
66:
67:             clearInterval(timer);
68: 
69:             if (moveHandler.count < 10) {
70:                 moveHandler.count++;
71:
72:                 setTimeout(function() {
73:                     getEl("sel").selectedIndex = Math.random() * getEl("sel").options.length | 0;
74: 
75:                     moveHandler();
76:                 }, 100);
77:             } else {
78:                 moveHandler.count = 0;
79:                 getEl("btn").disabled = false;
80:             }
81:
82:         }
83:     }, 1);
84: }
85: 
86: moveHandler.count = 0;
87: 
</
script
>
</
body
>
</
html
>

本地运行示例:

~ ~开始运动
步长:1235810152030
预览代码

转载地址:http://kfbfx.baihongyu.com/

你可能感兴趣的文章
CYQ.Data V5 从入门到放弃ORM系列:教程 - MProc类使用
查看>>
NIO-SelectableChannel
查看>>
跟屌丝一起学习 DB2 第五课 存储过程(三) 存储过程实例
查看>>
PAAS平台的web应用性能测试与分析
查看>>
wiki 调研
查看>>
天龙光电开拓光伏下游应用受挫
查看>>
测试用例及时更新的可实施性
查看>>
SQL数据库性能测试,插入数据
查看>>
以金融安全为生命线 金融支付打开智慧城市的想象空间
查看>>
OA办公系统如何实现高效办公用品管理
查看>>
用社会共治应对网络病毒
查看>>
本溪移动促进物联网业务发展
查看>>
Selenium WebDriver处理Table
查看>>
峰任策划:如何将网站推广做的更有效果
查看>>
《DevOps实战:VMware管理员运维方法、工具及最佳实践》——1.2 采用系统思维...
查看>>
Apache® CarbonData™ 成 Apache 软件基金会顶级项目
查看>>
KaOS 2017.06 发布,桌面 Linux 发行版
查看>>
开发者技能修炼的 5 个等级,你冲关到哪儿了?
查看>>
OSC 职位推荐: Java 开发招聘专场
查看>>
基于 ThinkJS + React 的通用博客系统 Firekylin
查看>>