zoukankan      html  css  js  c++  java
  • 用js实现类似jquery里的animate动画效果

    效果如下,鼠标移上,先宽度变化,再高度变化,最后透明度变化,鼠标移出,再依次变回去。

     

    要点一:

    startrun(obj,attr,target,fn)

    box.onmouseover = function(){
    startrun(box,"width",200,function(){
    startrun(box,"height",200,function(){
    startrun(box,"opacity","100")
    });
    });
    }
    如上面,函数也可以做为参数使用,就可以达到先执行某个动作,再执行某个动作的效果了。

    要点二:

    if(cur == target){
    clearInterval(obj.timer);
    if(fn){
    fn();
    }
    }

    当运动到达目标点,关闭定时器,然后就可以执行新的函数了。

    最后,上代码

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="gb2312" />
    <title>无标题文档</title>
    <style>
    <!--
    body
    {margin:0; padding:0; font:12px/1.5 arial;}
    #box
    {width:100px; height:100px; position:absolute; background:#06c; left:0;filter:alpha(opacity=30); opacity:0.3;}
    -->
    </style>
    <script>
    <!--
    function getstyle(obj,name){
    if(obj.currentStyle){
    return obj.currentStyle[name];
    }
    else{
    return getComputedStyle(obj,false)[name];
    }
    }

    window.onload
    = function(){
    var box = document.getElementById("box");
    box.onmouseover
    = function(){
    startrun(box,
    "width",200,function(){
    startrun(box,
    "height",200,function(){
    startrun(box,
    "opacity","100")
    });
    });
    }
    box.onmouseout
    = function(){
    startrun(box,
    "height",100,function(){
    startrun(box,
    "width",100,function(){
    startrun(box,
    "opacity","30");
    });
    });
    }
    }

    function startrun(obj,attr,target,fn){
    clearInterval(obj.timer);
    obj.timer
    = setInterval(function(){
    var cur = 0;
    if(attr == "opacity"){
    cur
    = Math.round(parseFloat(getstyle(obj,attr))*100);
    }
    else{
    cur
    = parseInt(getstyle(obj,attr));
    }
    var speed = (target-cur)/8;
    speed = speed>0?Math.ceil(speed):Math.floor(speed);

    if(cur == target){
    clearInterval(obj.timer);
    if(fn){
    fn();
    }
    }
    else{
    if(attr == "opacity"){
    obj.style.filter
    = "alpha(opacity="+(cur+speed)+")";
    obj.style.opacity
    = (cur+speed)/100;
    }else{
    obj.style[attr]
    = cur + speed + "px";
    }
    }

    },
    30)
    }
    //-->
    </script>
    </head>

    <body>
    <div id="box">
    </div>
    </body>
    </html>



  • 相关阅读:
    ESP8266 wifi钓鱼
    九,ESP8266 判断是断电上电(强制硬件复位)之后运行的内部程序还是内部软件复位之后运行的程序(基于Lua脚本语言)
    关于Http 传输二维json
    Android6.0权限大全和权限分类
    Android 多线程-----AsyncTask详解
    关于加密(转载文章)
    java基础之:匿名内部类
    系统吞吐量(TPS)、用户并发量、性能测试概念和公式
    java多线程之:SynchronousQueue队列
    Hibernate之:各种主键生成策略与配置详解
  • 原文地址:https://www.cnblogs.com/jingangel/p/2395548.html
Copyright © 2011-2022 走看看