我的js运动库新

1、一些样式的获取和设置

//通过id获取当前元素
//params:id
function $id(id) {
    return document.getElementById(id);
}
//向css一样获取元素
function $(selector) {
    return document.querySelector(selector);
}
//向css一样,获取一组元素
function $all(selector) {
    return document.querySelectorAll(selector);
}

//下边是有关运动的一些方法
//获取当前元素的样式值(兼容写法)
//param:obj(元素对象),attr(属性)
function getStyle(obj,attr) {
    if (window.getComputedStyle) {
        if(attr == "opacity"){//如果是透明度,则返回100倍的数
            return parseFloat(window.getComputedStyle(obj,false)[attr])*100;
        }else if(attr == "zISndex"){
            return parseInt(window.getComputedStyle(obj,false)[attr]);
        }else{
            return parseFloat(window.getComputedStyle(obj,false)[attr]);
        }
    } else {//ie8及以下浏览器的兼容
        if(attr == "opacity"){//如果是透明度,则返回100倍的数
            return parseInt(obj.currentStyle["filter"]);
        }else if(attr == "zIndex"){
            return parseInt(obj.currentStyle[attr]);
        }else{
            return parseFloat(obj.currentStyle[attr]);
        }
    }
}
//设置属性值
function setStyle(obj,attr,index) {
    if (window.getComputedStyle) {
        if(attr == "opacity"){//如果是透明度,则返回100倍的数
           obj.style[attr] = index/100;
        }else if(attr == "zIndex"){
            obj.style[attr] = index;
        }else{
            obj.style[attr] = index + "px";
        }
    } else {//ie8及以下浏览器的兼容
        if(attr == "opacity"){//如果是透明度,则返回100倍的数
            // filter: alpha(opacity=20);
           obj.style["filter"] = "alpha(opacity=" + index + ")";
        }else if(attr == "zIndex"){
            obj.style[attr] = index;
        }else{
            obj.style[attr] = index + "px";
        }
    }
}

2、匀速运动

//匀速运动
//params:obj(运动的对象),attr(变化的样式名称),target(目标值),speed(每次运动的距离),time(运动间隔)
function linear(obj,attr,target,speed,time) {
    //取消其他该对象的定时器,避免重复点击从而开启多个定时器的bug
    clearInterval(obj.timer);
    //开启定时器,进行运动
    obj.timer = setInterval(function () {
        //获取当前元素的属性值,为数字类型
        var currentAttr = getStyle(obj,attr);
        //判断是否达到了目标值
        if (Math.abs(currentAttr - target)<Math.abs(speed)) {
            //这里设置的原因是可能不能达到目标值,我们需要手动设置
            setStyle(obj,attr,target);
            //关掉定时器
            clearInterval(obj.timer);
        } else {
            setStyle(obj,attr,currentAttr+speed);
        }
    },time);
}
//匀速运动
//params:obj(运动的对象),attr(变化的样式名称),target(目标值),speed(每次运动的距离),time(运动间隔)
function linear2(obj, attr, target, speed, time,callback) {
    //取消其他该对象的定时器,避免重复点击从而开启多个定时器的bug
    clearInterval(obj.timer);
    //开启定时器,进行运动
    obj.timer = setInterval(function () {
        //获取当前元素的属性值,为数字类型
        var currentAttr = getStyle(obj, attr);
        //判断是否达到了目标值
        if (Math.abs(currentAttr - target) < Math.abs(speed)) {
            //这里设置的原因是可能不能达到目标值,我们需要手动设置
            setStyle(obj, attr, target);
            //关掉定时器
            clearInterval(obj.timer);
            callback();
        } else {
            setStyle(obj, attr, currentAttr + speed);
        }
    }, time);
}

3、缓冲运动

//缓冲运动(从快变慢)
//params:obj(元素对象),attr(属性),target(最终目标),time(时间间隔)
function slower(obj,attr,target,time) {
    clearInterval(obj.timer);
    //定义初始速度
    var speed = 0;
    obj.timer = setInterval(function () {
        //获取当前元素的属性值
       var currentAttr = getStyle(obj,attr);
       //计算当前速度(当前值与目标值差值的十分之一)
        speed = (target - currentAttr) / 10;
        //避免由于精度问题导致的不能达到目标值(取大数)
        speed = speed>0? Math.ceil(speed):Math.floor(speed);
        if (currentAttr == target) {
            clearInterval(obj.timer);
        } else {
            setStyle(obj,attr,speed+currentAttr);
        }
    },time);
}
//缓冲运动(从快变慢)添加一个对象的其他运动连续进行
//params:obj(元素对象),attr(属性),target(最终目标),time(时间间隔),callback(回调函数)
function slower2(obj,attr,target,time,callback) {
    clearInterval(obj.timer);
    //定义初始速度
    var speed = 0;
    obj.timer = setInterval(function () {
        //获取当前元素的属性值
       var currentAttr = getStyle(obj,attr);
       //计算当前速度(当前值与目标值差值的十分之一)
        speed = (target - currentAttr) / 10;
        //避免由于精度问题导致的不能达到目标值(取大数)
        speed = speed>0? Math.ceil(speed):Math.floor(speed);
        if (currentAttr == target) {
            clearInterval(obj.timer);
             // 上一个动作完成 进入下一个动作
             if (callback) {
                callback();
            }
        } else {
            setStyle(obj,attr,speed+currentAttr);
        }
    },time);
}
//缓冲运动(从快变慢)添加一个对象的其他运动连续进行,添加一个对象同时的多个属性运动
//params:obj(元素对象),json {attr:target},time(时间间隔),callback(回调函数)
function slower3(obj,json,time,callback) {
    clearInterval(obj.timer);
    //定义初始速度
    var speed = 0;
    obj.timer = setInterval(function () {
        //循环所有传入的属性
        for (var attr in json) {
          //获取当前元素的属性值
            var currentAttr = getStyle(obj,attr);
            console.log(currentAttr);

            //计算当前速度(当前值与目标值差值的十分之一)
                speed = (json[attr] - currentAttr) / 10;
                //避免由于精度问题导致的不能达到目标值(取大数)
                speed = speed>0? Math.ceil(speed):Math.floor(speed);
                if (currentAttr == json[attr]) {
                    clearInterval(obj.timer);
                    // 上一个动作完成 进入下一个动作
                    if (callback) {
                        callback();
                    }
                } else {
                    setStyle(obj,attr,speed+currentAttr);
                }
        }

    },time);
}

原文地址:https://www.cnblogs.com/dhrwawa/p/10468796.html

时间: 2024-10-11 05:35:08

我的js运动库新的相关文章

JS运动库

1 // JavaScript Document 2 3 function startMove(obj,json,endFn){ 4 5 clearInterval(obj.timer); 6 7 obj.timer = setInterval(function(){ 8 9 var bBtn = true; 10 11 for(var attr in json){ 12 13 var iCur = 0; 14 15 if(attr == 'opacity'){ 16 if(Math.round

封装自己的Common.js工具库

Code/** * Created by LT on 2013/6/16. * Common.js * 对原生JS对象的扩展 * Object.Array.String.Date.Ajax.Cookie */ ;(function(){ Object.extend =function(targetObj,fnJson){ for(var fnName in fnJson){ targetObj[fnName]=fnJson[fnName]; } return targetObj; }; /**

解析JS运动

解析JS运动 物体运动原理:通过改变物体的位置,而发生移动变化.方法:      1.运动的物体使用绝对定位       2.通过改变定位物体的属性(left.right.top.bottom)值来使物体移动.例如向右或左移动可以使用offsetLeft(offsetRight)来控制左右移动.步骤:    1.开始运动前,先清除已有定时器 (因为:是连续点击按钮,物体会运动越来越快,造成运动混乱)    2.开启定时器,计算速度    3.把运动和停止隔开(if/else),判断停止条件,执行

JS运动中的封装的部分实用函数(框架)总结

JS运动中的封装的部分实用函数(框架)总结 前段时间学习JS运动时做的很实用的几个函数,应该可以称之为小的框架了,现在总结一下.为什么不当时就总结呢?我认为所谓总结不是趁着大脑中还残留着对新知识印象的时候将其写下来,而是过了一段时间之后再回头去看,将其重新拾起,这个时候一般会有对这些新东西的新看法和新的体会,我把这个过程称为"知识的发酵".对于我来说经过 "发酵"之后的带有自己的见解和体会东西才可以称之为总结. 下面分为几个版本来说,也反映了他们的进化过程,这几个函

Highcharts纯js图表库,以后可以跟客户说,你跟阿里云ECS用的图表库是同款

Highcharts是一款纯javascript编写的图表库,能够很简便的在Web网站或Web应用中添加交互性的图表,Highcharts目前支持直线图.曲线图.面积图.柱状图.饼图.散点图等多达18种不同类型的图表,可以满足常用的Web图表需求 ! 近来维护我的阿里云服务器,进入后台偶然发现阿里云管理后台数据图表用的也是Highcharts,刚好正需要WEB端展示数据的东西,研究哈… Highcharts官网:http://www.highcharts.com Highcharts中文站:ht

带无缝滚动的轮播图(含JS运动框架)

今天学习了一下轮播图的写作,想到前一阵学过的无缝滚动得思想,所以就把轮播与滚动结合了一下.不过我的代码的神逻辑我自己都不敢恭维,在没网没参照的情况下,只能硬着头皮往下写,希望跟大家共勉吧. js运动框架的代码如下: 1 //获取样式 2 function getStyle(obj,attr){ 3 if(obj.currentStyle){ 4 return obj.currentStyle[attr]; 5 }else{ 6 return getComputedStyle(obj,false)

JS运动从入门到兴奋1

hello,我是沐晴,一个充满了才华,却靠了照骗走江湖的前端妹子.在这个充满PS的年代,这你们都信,哈哈,废话不多说,今天要分享的是关注JS运动的知识.楼主一直认为,不管学习什么,核心思想才是王道,掌握了思想,不管需求怎么改变,我们都能把它玩弄于股掌之中...下面我们就由浅入深走进运动的世界吧. 首先来看最基础的运动:单个物体向右匀速运动到某一点停止      例子:一个按钮,一个div,点击按钮,让div向右运动到某一个位置暂停 // 原理: 1 获取物体当前的位置 oDiv.offsetle

关于js运动的一些总结

js运动实现,有两种.一种是速度版,另一种是时间版. 速度版是通过对速度的加减乘除,得出元素的运动数据.时间版是通过对时间进行Tween公式运算,得出元素的运动数据. 速度版运动优点:容易在运动过程中,对运动做一些修改. 时间版运动优点:切换或缩小浏览器页面,浏览器会对网页定时器进行停缓处理.这样会导致一些速度版运动bug.因为时间版运动是通过记录时间变化区间,来对运动进行控制.所以不会有这种bug. 运动形式有:缓冲运动,碰撞运动,重力运动.缓冲运动,是速度自身也在变化的结果.碰撞运动,是碰撞

JS运动1 (转)

JS运动从入门到兴奋1 http://www.cnblogs.com/moqing/p/5666476.html hello,我是沐晴,一个充满了才华,却靠了照骗走江湖的前端妹子.在这个充满PS的年代,这你们都信,哈哈,废话不多说,今天要分享的是关注JS运动 的知识.楼主一直认为,不管学习什么,核心思想才是王道,掌握了思想,不管需求怎么改变,我们都能把它玩弄于股掌之中...下面我们就进入运动的世界吧. 首先来看最基础的运动:单个物体向右匀速运动到某一点停止      例子:一个按钮,一个div,