先看下效果:

    
     aaarticlea/png;base64,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" alt="" />

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

在支持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>

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

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

    最近研究了一下如何利用javascript進行檔案分割上傳並且透過後端.特地記錄一下相關的用法 先寫限制跟本篇的一些陷阱 1.就是瀏覽器的支援了 因為本篇有用到blob跟webworker 在ie中需 ...

  2. 利用Javascript判断操作系统的类型实现不同操作系统下的兼容性

    原文地址 http://www.jb51.net/article/33640.htm 在通过Javascript实现客户端和服务端的交互时,有时候需要对操作系统进行判断,以便实现不同操作系统下的兼容性 ...

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

    利用javascript和WebGL绘制地球 [翻译] 原翻译:利用javascript和WebGL绘制地球 [翻译] 在我们所有已知的HTML5API中,WebGL可能是最有意思的一个,利用这个AP ...

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

    一.现在我们在网站设计(三)的基础上,来编写about.html页面. 这个页面要用到的知识点是利用JavaScript和DOM实现选择性地显示和隐藏某些DIV about.html页面在前面我们为了 ...

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

    1. ActionBarSherlock(推荐) ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便 ...

  6. 如何利用express新建项目(上)

    如何利用express新建项目(上) 摘要 这篇文章将讲解了如何快速利用express新建项目 一.express4.x的安装 1. npm install -g express 2. npm ins ...

  7. ASP利用xhEditor编辑器实现图片上传的功能。

    本人这几天在做一个软件,无意中用到xhEditor在线编辑器,这个编辑器虽然看着比较简单,但功能非常强大,大家可以去官网上查看,废话不说了. 这篇文件主要是实现在ASP环境中利用xhEditor编辑器 ...

  8. (Demo分享)利用JavaScript(JS)实现一个九宫格拖拽功能

    利用JavaScript(JS)实现一个九宫格拖拽功能   Demo实现了对任意方格进行拖拽,可以交换位置,其中Demo-1利用了勾股定理判断距离! Demo-1整体思路: 1.首先div实现自由移动 ...

  9. JS控制语句 编程练习 学生数据,分别是姓名、性别、年龄和年级,接下来呢,我们要利用JavaScript的知识挑出其中所有是大一的女生的的名字哦。

    编程练习 在一个大学的编程选修课班里,我们得到了一组参加该班级的学生数据,分别是姓名.性别.年龄和年级,接下来呢,我们要利用JavaScript的知识挑出其中所有是大一的女生的的名字哦. 学生信息如下 ...

随机推荐

  1. Bootstrap 网格系统(Grid System)实例4

    Bootstrap 网格系统(Grid System)实例4:中型和大型设备 <!DOCTYPE html><html><head><meta http-eq ...

  2. 原 荐 使用Spring Boot Actuator、Jolokia和Grafana实现准实时监控

    原 荐 使用Spring Boot Actuator.Jolokia和[可视化]Grafana实现准实时监控.   监控系统:          日志- 基础处理 - 表格 - 可视化一体化解决方案. ...

  3. java在线聊天项目0.4版本 制作服务端接收连接,客户端连接功能 新增客户端窗口打开时光标指向下边文本域功能,使用WindowListener监听WindowAdapter

    建一个服务端类ChatServer,用于设置端口接收连接 package com.swift; import java.io.IOException; import java.net.ServerSo ...

  4. ios copy assign retain

    一,retain, copy, assign区别 1. 假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b.此时a ...

  5. 漫谈使用Kafka作为MQ中间件

    哪些场景适合使用Kafka线上系统会实时产生数以万计的日志信息,服务器运行状态,用户行为记录,业务消息 等信息,这些信息需要用于多个不同的目的,比如审计.安全.数据挖掘等,因此需要以分类的方式将这些信 ...

  6. 文件的软硬链接& 文件编辑vi和vim

    目录 文件的软硬链接 1.软链接 2.硬链接 文件编辑vi和vim 须先安装vim命令的软件包yum install -y vim 三种模式: 1.普通模式 2.编辑模式 3.末行模式 文件的软硬链接 ...

  7. PAT Basic 1018

    1018 锤子剪刀布 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输 ...

  8. leetcode刷题——双指针

    知识点 专题-B-双指针 题目: 题解: CS-Notes Algorithm_Interview_Notes-Chinese awesome-algorithm zcy19941015的博客

  9. mysql 面安装配置

    解压MySQL压缩包    将以下载的MySQL压缩包解压到自定义目录下,我的解压目录是:    "D:\Program Files\MySQL\mysql-5.6.13-win32&quo ...

  10. OpennSSL之基本了解

    HTTPS是一种协议,等于HTTP+TLS(由于历史原因,SSL3.0之后就被TLS1.0替代了).openssl是一套开源工具集,主要有两个特性: 实现了ssl2,ssl3,TLSv1,TLSv1. ...