利用javascript实现在圆周上匀速划动的动画效果

先看下效果:

圆心下的那个那个白圈的位置是光圈的起始位置,光圈所在的位置为终点位置。光圈从起始位置开始,沿着圆的轮廓匀速到终点位置。

在支持css3的情况下,可以利用css3做旋转效果来达到这种效果。具体思路为:

1)将光圈相对于圆进行绝对定位,设置光圈的绝对位置为上面所说的终点位置;

2)对圆设置一个旋转角度,如:transform: rotate(130deg),此时,光圈也会改变位置,光圈旋转后的位置为上面所说的起点位置。

3)然后对圆设置transition,如:transition: transform .6s ease-out;这样会在0.6s内将光圈从起点位置旋转到终点位置。

在不支持css3的情况下,如IE9及IE9以下的浏览器,我使用的是javascript实现。具体思路为:

1)对圆心进行相对定位,对光圈进行绝对定位,设置圆的起始位置(在圆心的正下方)

2)以圆心为中心点,光圈的起始位置可以看做是-90读的地方,现在要将光圈从-90度到45度。做法就是通过不断的改变角度,从-90到45(这里需要使用定时器),根据每次的角度和圆的半径,首先获取弧度,再根据js中的Math对象的sin()和cos()获取光圈的x,y坐标(相对与圆心)。

3)根据每次得到的x,y坐标计算光圈的left,top值。由于角度是慢慢改变的,因此呈现的效果就是光圈从-90度到45度匀速划动。

实现的代码为:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>rotate</title>
    <style>
    #box{
        width: 80px;
        height: 80px;
        background-color: limegreen;
        border-radius: 50%;
        -moz-border-radius:50%;
        -webkit-border-radius:50%;
        padding-top: 1px;
    }

#box .circle-dot{
        position: relative;
        margin-top: 39px;
        margin-left: 40px;
        width: 1px;
        height: 1px;
    }

#box .circle-dot #light{
        position: absolute;
        width: 30px;
        height: 30px;
        background:url(images/light.png) no-repeat;
        left: -15px;
        top: 25px;
    }
    </style>
</head>
<body>
    <div id="box">
        <div class="circle-dot">
            <dev id="light"></dev>
        </div>
    </div>
<script>
   window.onload=function(){
        var light = document.getElementById("light");
        var circle = document.getElementById("box");
        rotate(light,circle);
        //js控制光圈划动
        function rotate(ele,circle){
            var r = circle.clientWidth/2;
            var rotate = -91;
            var timer = setInterval(step,10);
            function step(){
                rotate += 3;
                var a = 2*Math.PI/360*rotate;
                if(rotate == 44){
                    clearInterval(timer);
                }
                var x = r * Math.cos(a)-15; //光圈宽高为30,减去15是让光圈的中心在圆周上
                var y = -r * Math.sin(a)-15;
                ele.style.left=x+"px";
                ele.style.top=y+"px";
            }
        }
   }
</script>
</body>
</html>

时间: 2024-10-11 18:39:20

利用javascript实现在圆周上匀速划动的动画效果的相关文章

[ASP.NET] 如何利用javascript分割檔案上傳至後端合併

最近研究了一下如何利用javascript進行檔案分割上傳並且透過後端.特地記錄一下相關的用法 先寫限制跟本篇的一些陷阱 1.就是瀏覽器的支援了 因為本篇有用到blob跟webworker 在ie中需要最少10版以上才有支援以下的方法喔! 2.因為我這是簡單的測試,所以我是將檔案存放在Session當中,實際要使用的話.應該會是將檔案分割存放在檔案系統中 廢話就不多說,我們先來看js端的程式碼 self.onmessage = function (e) { ////web worker star

想给UIVIew上控件添加一些动画效果

如果你还不知道怎样让一张图片缓缓滑动,渐渐消失,或者是在原地翻滚,不知道怎样让一个窗口弹出的时候有一点抖动的效果不那么僵硬,那正好,今儿在下总结的内容可能刚好能帮你实现你想要的效果(⊙o⊙)哦. 首先说一下什么是动画效果,动画效果有哪些好处吧: 这里所说的动画绝对不是你在电视上看到的,有剧情的那种(当然这句可能是废话),而是为了增加用户的体验感,通过对控件的属性或者layer进行一些处理达到美化界面的效果,主要是让界面看起来更加的生动,不会太枯燥.想象一下,你在用读书软件时候的翻页效果,就能被称

GitHub Android 最火开源项目Top20 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上。基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要。利用这些项目,有时能够让你达到事半功倍的效果。

1. ActionBarSherlock(推荐) ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便地使用所有版本的Android动作栏的设计模式. 对于Android 4.0及更高版本,ActionBarSherlock可以自动使用本地ActionBar实现,而对于之前没有ActionBar功能的版本,基于Ice Cream Sandwich的自定义动作栏实现将自动围绕布局.能够让开发者轻松开发

JavaScript网站设计实践(四)编写about.html页面,利用JavaScript和DOM,选择性的显示和隐藏DIV元素

一.现在我们在网站设计(三)的基础上,来编写about.html页面. 这个页面要用到的知识点是利用JavaScript和DOM实现选择性地显示和隐藏某些DIV about.html页面在前面我们为了看导航栏菜单项高亮显示时,已经写了部分内容,只是那时写的代码没有实现div显示和隐藏,现在就在之前编写的基础上,为页面添加显示和隐藏div的效果. 没有写JavaScript之前看到的效果: 实现后的效果图: 这个就是我们现在要做的效果. 1.背景: 我们在about.html页面中写了一个ul列表

利用 JavaScript SDK 部署网页版“Facebook 登录”

利用 JavaScript SDK 部署网页版"Facebook 登录" 通过采用 Javascript 版 Facebook SDK 的"Facebook 登录",用户可以使用 Facebook 凭据登录您的网页.即使您因为一些原因而无法使用我们的 JavaScript SDK,也一样可以实施"Facebook 登录". 要在不使用 JavaScript SDK 的情况下实施"Facebook 登录",请参阅手动构建登录流程

利用javascript和WebGL绘制地球 【翻译】

利用javascript和WebGL绘制地球 [翻译] 原翻译:利用javascript和WebGL绘制地球 [翻译] 在我们所有已知的HTML5API中,WebGL可能是最有意思的一个,利用这个API我们能够在浏览器中创造出炫酷3D场景的能力.本文将完整的向你展示一些炫酷是如何实现的. 需要特别指出的是,这篇教程我们将会构建一个地球行星模型,这个模型可以像一个兴奋的人一样环绕的旋转,另外,它可能使我们可以获得一些其他程序员的称赞,好吧,就这么多了. 准备 这篇教程我们将会用到一个令人着迷的We

利用PHP获取一个页面上的链接信息

开发中我们可能会获取某个页面或是一段内容中的链接信息,下面我分享一个我写的函数给大家,希望能帮到大家. 函数功能: 1.获取一段内容中链接信息: 2.获取一个URL中链接信息: 3.剔除锚链等无效的链接 4.获取当前域下的链接信息 5.获取他域下的链接信息 6.保留链接的文本信息 代码: /** * +---------------------------------------------------------- * 功能:获取一个网页或一段内容里面的链接信息 * +------------

Firefox中利用javascript调用本地程序

http://blog.csdn.net/jensonhjt/article/details/1765557 script>function hello () {  netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");  var file = Components.classes["@mozilla.org/file/local;1"].createInstance(

【知了堂学习笔记】/利用JavaScript对手风琴的实现/Aidrich

利用JavaScript实现banner图手风琴效果 2018-01-14 这一篇文章主要是利用纯JavaScript实现手风琴效果代码,希望能给您带来一定的帮助,感兴趣的小伙伴可以进行一个参考. 首先我给大家先介绍一下为什么实现的效果为什么叫做手风琴吧,可能大家都见过手风琴, 没错,就是这样的一个效果,我们在网页上实现一个手风琴的效果就像这个手风琴一样,在一块变宽的时候,另外一块会变窄,那么怎么用JavaScript代码去实现这样的一个效果呢? 接下来我将为大家呈现出我所写的代码,先说明只是呈