使用原生的javascript封装动画函数(有callback功能)

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        #box {
            width: 100px;
            height: 100px;
            background-color: greenyellow;
            position: absolute;
        }
    </style>
</head>
<body>
<input type="button" value="按钮" id="btn"/>

<div id="box"></div>
<script>
    var btn = document.getElementById("btn");
    btn.onclick = function () {
        animate(box, {"height": 400, "width": 400, "borderRadius": 150, "left": 100, "top": 100}, function () {
            animate(box, {"height": 200, "width": 100, "borderRadius": 20, "left": 200, "top": 50}, function () {
                animate(box, {"height": 100, "width": 200, "borderRadius": 100, "left": 400, "top": 400})
            })
        })
    }
    function animate(obj, json, fn) {
        clearInterval(obj.timer);
        obj.timer = setInterval(function () {
            var isTrue = true;
            for (var k in json) {//{k:json[k]}
                var leader = parseInt(getAttr(obj, k)) || 0;//如果是nan的话,给一个默认值
                var step = (json[k] - leader) / 10;
                step = step > 0 ? Math.ceil(step) : Math.floor(step);//做一个判断,当step>0的时候,向上取整,保证至少为一;<0的时候,向下取整,保证至少为-1
                leader = leader + step;
                obj.style[k] = leader + "px";
                console.log("代码还在执行");
                if (leader != json[k]) {
                    isTrue = false;
                }
            }
            if (isTrue) {
                clearInterval(obj.timer);
                if (fn) {
                    fn();
                }
            }
        }, 15);
    }
    function getAttr(demo, attr) {
        if (window.getComputedStyle) {
            return window.getComputedStyle(demo, null)[attr];
        } else {
            return demo.currentStyle[attr];
        }
    }
</script>
</body>
</html>

原文地址:https://www.cnblogs.com/7qin/p/9602209.html

时间: 2024-11-13 09:52:33

使用原生的javascript封装动画函数(有callback功能)的相关文章

JavaScript封装动画函数

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> * { margin: 0; padding: 0; } div { margin-top: 10px; width: 100px; height: 50px; background-color: purple;

通过轮播图例子复习封装动画函数和定时器

概述:使用js实现自动播放.无缝连接的轮播图 图片轮播的实质是改变图片相对于父对象的左边距的值,利用offsetLeft获取,利用style.left修改 封装动画函数如下: function animate(element,target) { clearInterval(element.timeId); element.timeId=setInterval(function(){ var current=element.offsetLeft; var step=10; step=target>

08第二种定时器_封装动画函数_轮播图_offset系列

前面复习: 下面会说第二种定时器. 第二种定时器: 第一种的定时器回顾: 另一个定时器 setTimeout() 它是一个一次性的定时器: 因为,代码是从上往下执行的,btn 还没有生成,所以getElementById("btn").onclick = 肯定是会报错的. 它是一次性的定时器,如果没有取消的话,它会一直占着空间,所以一般都要写按钮btn 去取消timeId  . 1 <!DOCTYPE> 2 <html lang="en">

Javascript之回调函数(callback)

1.回调函数定义: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应. 在JavaScript中,回调函数具体的定义为:函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数A.我们就说函数A叫做回调函数.如果没有名称(函数表达式),就叫做匿名回调函数.因此callb

JavaScript变速动画函数封装添加任意多个属性

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> * { margin: 0; padding: 0; } div { width: 200px; height: 100px; background-color: pink; position: absolute

JavaScript变速动画函数封装添加任意多个属性加回调函数还有透明度

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> * { margin: 0; padding: 0; } div { width: 200px; height: 100px; background-color: purple; position: absolu

javascript封装的函数

1 js首先需要的函数 2 3 window.onload = function () { 4 function $(id){ 5 return document.getElementById(id); 6 } 7 function $arr(array){ 8 return document.getElementsByTagName(array); 9 } 10 function hide(id) { 11 $(id).style.display = "none"; 12 } 13

js原生实现链式动画效果

// 1. css样式 div { width: 100px; height: 100px; background: olivedrab; position: absolute; left: 0px; opacity: 1; } .top { top: 100px; } .bottom { top: 300px; } // html和JavaScript代码 <div class="top"></div> <div class="bottom&q

JavaScript—封装animte动画函数

封装Animte 动画函数 虽然可能以后的开发中可能根本不需要自己写,Jquery 给我们封装好了,或者用CSS3的一些属性达到这样的效果可能更简单. 我比较喜欢底层的算法实现,万变不离其中,这个逻辑思路,也是需要锻炼的.也跟着做了一遍 ///动画函数 //element:元素 //target:最后停止的位置 function animte(element, target) { //只有一个Timeid定时器在执行 if (element,timerId) { clearInterval(el