• 封装运动框架多个属性


    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>封装运动框架的多个属性</title>
    <style>
    div{ 100px; height: 100px; background-color:pink; position: absolute; left: 10px; top: 50px; }
    </style>
    </head>
    <body>
    <button id="btn200">200</button>
    <button id="btn400">400</button>
    <div id="demo"></div>
    </body>
    </html>
    <script>
    //想法:运用json来完成多个属性运动
    // 1、先获得出当前样式
    // 2、(最终的样式-当前的样式)/10 得到所谓的步长 当前样式用函数封装
    // 3、得到对象的样式属性 = current + step +“px”
    var btn200 = document.getElementById("btn200");
    var btn400 = document.getElementById("btn400");
    var demo = document.getElementById("demo");
    btn200.onclick = function(){
    animate(demo,{200,top:300,height:600,opacity:40, zIndex:3},function(){ alert("我来了")});
    }
    btn400.onclick = function(){
    animate(demo,{top:200,left:500});
    }
    // 多个属性运动框架 添加回调函数
    function animate(obj,json,fn){
    clearInterval(obj.timer);
    obj.timer = setInterval(function(){
    //开始遍历json
    var flag = true; //用来判断是否清除定时器
    for(var attr in json){
    //算出步长 = (目的样式 - 当前样式 ) / 10
    var current = 0;
    if(attr == "opacity")
    {
    current = Math.round(parseInt(getStyle(obj,attr)*100)) || 0;
    }else
    {
    current = parseInt(getStyle(obj,attr));
    }
    // console.log(current)
    //json[attr] 表示数值 attr 表示属性
    var step = (json[attr] - current)/10;
    step = step > 0 ? Math.ceil(step) : Math.floor(step);
    //兼容性
    if(attr == "opacity") //判断用户有没有输入透明度
    {
    // 判断浏览器是否支持这个属性
    if("opacity" in obj.style)
    {
    obj.style.opacity = (current + step) / 100;
    }else
    {
    obj.style.filter = "alpha(opacity = "+ (current + step)*10 +" )"
    }
    }
    else if(attr == "zIndex")
    {
    obj.style.zIndex = json[attr];
    }
    else{
    obj.style[attr] = current + step + "px";
    }

    //如果当前样式中只要有一个样式没执行完毕 都要开着定时器
    if(json[attr] != current){
    flag = false;
    }
    }
    if(flag) // 用于判断定时器的条件
    {
    clearInterval(obj.timer);
    //alert("ok了");
    if(fn) // 很简单 当定时器停止了。 动画就结束了 如果有回调,就应该执行回调
    {
    fn(); // 函数名 + () 调用函数 执行函数
    }
    }
    },30)
    }
    //封装当前样式函数 返回的是个数值
    function getStyle(obj,attr){
    if(obj.currentStyle){
    return obj.currentStyle[attr];
    }else{
    return window.getComputedStyle(obj,null)[attr]
    }
    }
    </script>
  • 相关阅读:
    java中equals与hashCode的重写问题
    关于java的二维码的生成与解析
    bootstrap的时间控件使用(双日历)
    Mysql表,列,库的增删查改
    关于js重名方法的先后调用问题
    javascript的比较运算符
    javascript的运算符
    JavaScript的数据类型
    javascript的基本语法
    MAP集合
  • 原文地址:https://www.cnblogs.com/zhaocong/p/7360550.html
Copyright © 2020-2023  润新知