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;
            position: absolute;
        }
    </style>
</head>
<body>
<input type="button" value="移动到400px" id="bt1"/>
<input type="button" value="移动到800px" id="bt2"/>

<div id="dv"></div>
<script src="common.js"></script>
<script>
    my$("bt1").onclick = function () {
        animate(my$("dv"), 400);
    };
    my$("bt2").onclick = function () {
        animate(my$("dv"), 800);
    };

    //动画函数
    function animate(element, target) {
        //一会要清理定时器(只产生一个定时器)
        var timeId = setInterval(function () {
            //获取div当前的位置
            var current = element.offsetLeft;//数字类型没有px
            //div每次移动多少像素-----步数
            var step = 10;
            step = current < target ? step : -step;
            //每次移动后的距离
            current += step;
            //判断当前移动后的位置是否到达目标位置
            if (Math.abs(target - current) > Math.abs(step)) {
                element.style.left = current + "px";
            } else {
                //清理定时器
                clearInterval(timeId);
                element.style.left = target + "px";
            }
        }, 20)
    }
</script>
</body>
</html>

common.js:

/**
 * Created by Administrator on 2018/7/22.
 */
function my$(id) {
    return document.getElementById(id);
}
//设置任意的标签中间的文本内容
function setInnerText(element, text) {
    //判断浏览器是否支持该属性
    if (typeof element.textContent == "undefined") {
        element.innerText = text;
    } else {
        element.textContent = text;
    }
}
//获取任意标签中间的文本内容
function getInnerText(element) {
    if (typeof element.textContent == "undefined") {
        return element.innerText;
    } else {
        return element.textContent;
    }
}
//获取任意一个父级元素的第一个子级元素
function getFirstElementChild(element) {
    if (element.firstElementChild) {//true 支持
        return element.firstElementChild;
    } else {
        var node = element.firstChild;//第一个子节点
        while (node && node.nodeType != 1) {
            node = node.nextSibling;
        }
        return node;
    }
}

//获取任意一个父级元素的最后一个子级元素
function getLastElementChild(element) {
    if (element.lastElementChild) {
        return element.lastElementChild;
    } else {
        var node = element.lastChild;
        while (node && node.nodeType != 1) {
            node = node.previousSibling;
        }
        return node;
    }
}

//为任意元素绑定任意事件
//参数1:任意元素
//参数2:事件类型
//参数3:事件处理函数
function addEventListner (element, type, fn) {
    //判断浏览器是否支持该方法
    if(element.addEventListener) {
        element.addEventListener(type,fn, false);
    }else if(element.attachEvent) {
        element.attachEvent("on" + type, fn);
    }else {
        element["on"+type] = fn;
    }
}

原文地址:https://www.cnblogs.com/cuilichao/p/9407283.html

时间: 2024-11-10 14:31:47

JavaScript封装动画函数的相关文章

使用原生的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> &l

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

概述:使用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变速动画函数封装添加任意多个属性

<!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

JavaScript—封装animte动画函数

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

JavaScript——WEBAPIS_深入动画函数的封装,常见网页特效

深入动画函数的封装 1.动画函数的封装 1.1 缓动效果的实现 这里有一些核心的算法,(目标值 - 现在的位置) ??/??10 = 每一次移动的步长 拿一个具体的效果举例子,比如让一个元素慢下来, 实现想法:让元素的移动距离变下,每一次的步长都变小,核心的算法:** (目标值 - 现在的位置) ??/??10??? 做为每次移动的距离步长**,其停止的条件就是当盒子到达目标位置就停止定时器 实现的代码: <body> <button>点击之后老李才飞!</button>

js-特效部分学习-offsetParent、scrollHeight 、动画函数的封装

1. offsetParent  获取的最近的定位的父元素   offsetLeft/offsetTop  是相对于offsetParent的距离 offsetHeight/offsetWidth 获取盒子的大小   border + height + padding <style> #box { width: 200px; height: 200px; background-color: #ff0000; } #child { width: 100px; height: 100px; mar