JS动画之缓冲动画与多物体动画即获取样式的方法

一、缓冲动画
Ps1:opacity:所有浏览器都支持 opacity 属性。
注释:IE8 以及更早的版本支持替代的 filter 属性。例如:filter:Alpha(opacity=50)。
Ps2:缓冲运动的速度值一定要转换成整数,不然将到达不了终点,是用Math.ceil(),还是Math.floor(),要看就提情况。
Ps3:动画大致模版(思路):
            window.onload = function(){
            var oDiv = document.getElementById("div1");
            oDiv.onmouseover = function(){
                startMove(0);
            }
            oDiv.onmouseout = function(){
                startMove(-200);
            }
        }
        var timer=null;
        function startMove(iTarget){
            clearInterval(timer);
            var oDiv = document.getElementById("div1");
            timer=setInterval(function(){
                var speed=(iTarget-oDiv.offsetLeft)/20;
                speed=speed>0?Math.ceil(speed):Math.floor(speed);
                if(oDiv.offsetLeft==iTarget){
                    clearInterval(timer);
                }
                else{
                oDiv.style.left=oDiv.offsetLeft+speed+"px";
                }
            },30)
        }

二、多物体运动
for循环来为每一个TagNameList[i]添加事件 并添加属性来区分各自的定时器(用于取消)
利用参数中的this来指定所选择的当前元素
多物体不要共用一个值,在对象上定义一个单独的属性保持值
存在多项共用一个值,并且这个值会发生改变时,最好单独给赋值,避免出现争用的情况。

window.onload=function(){
        var aLi=document.getElementsByTagName("li");
        for(var i=0;i<aLi.length;i++){
            aLi[i].timer=null;
            aLi[i].onmouseover=function(){
                startMove(this,400);
            }
            aLi[i].onmouseout=function(){
                startMove(this,200);
            }
        }
    }
    function startMove(obj,iTarget){
        clearInterval(obj.timer)
        obj.timer=setInterval(function(){
            var speed=(iTarget-obj.offsetWidth)/8;
            speed=speed>0?Math.ceil(speed):Math.floor(speed);
            if (obj.offsetWidth==iTarget) {
                clearInterval(obj.timer)
            }
            else{
                obj.style.width=obj.offsetWidth+speed+"px";
            }
        },30)
    }

三、获取样式
1.过程:obj.stlye.width是样式中的块width;而obj.offsetWidth是显示的width(包括border之类的),故obj.style.width=obj.offsetWidth-1=obj.style.width+borderWidth-1,当borderWidth>1时,其实这是在加宽度而不是减宽度;
2.原型为parseInt ( String s , [ int radix ] ),用于解析一个字符串,并返回一个整数。还有parseFloat,则解析一个字符串,返回一个浮点数;
3.用js的style属性可以获得html标签的样式,但是不能获取非行间样式。即: 用document.getElementById(‘element‘).style.xxx可以获取元素的样式信息,可是它获取的只是DOM元素style属性里的样式规则,对于通过class属性引用的外部样式表,就拿不到我们要的信息了。所以js用currentStyle和getComputedStyle获取css的非行间样式;
3.var style = window.getComputedStyle("元素", "伪类");第二个参数“伪类”(如果不是伪类,设置为null)
function getStyle(obj,style){//引用时style要带引号
if(obj.currentStyle){
return obj.currentStyle[style];
}else{
return getComputedStyle(obj,null)[style];
}
}
style:标准的样式!可用来查询由html标签的style属性指定的样式。
currentStyle:可用来查询/修改外联或者内部样式表中的样式(仅IE、Opera)。 代表了在全局样式表、内嵌样式和 HTML 标签属性中指定的对象格式和样式。当使用currentStyle做条件判断是,要加上body,document.body.currentStyle,这样才能兼容上IE6,7。
runtimeStyle: 运行时的样式!如果与style的属性重叠,将覆盖style的属性。代表了居于全局样式表、内嵌样式和 HTML 标签属性指定的格式和样式之上的对象的格式和样式。
getComputedStyle:用于Firefox、Chrome、Safari、Opera等浏览器,作用与currentStyle相同。

currentStyle 指浏览器当前显示的,如果用runtimeStyle 写入新样式,那么这个新样式权重最高,currentStyle的值亦改为新样式,所以可以说currentStyle是style 和 runtimeStyle 的结合。即运行时就是runtimeStyle ,否则就style 或currentStyle 。

时间: 2024-10-06 10:08:55

JS动画之缓冲动画与多物体动画即获取样式的方法的相关文章

html5 canvas结合js实现的非常酷的ascii animation动画特效

代码下载地址:http://www.zuidaima.com/share/1789567017372672.htm 原文:html5 canvas结合js实现的非常酷的ascii animation动画特效 演示地址:http://demo.zuidaima.com/html/1789567017372672/cool-ascii-animation-using-an-image-sprite-canvas-and-javascript.html html5 canvas结合js实现的非常酷的a

JS:指定FPS帧频,requestAnimationFrame播放动画

Flash制作动画,最基础的概念就是帧,但在Flash中,帧频的控制比较简单,只需要编译前指定一下目标帧频就可以了. 实际运行时,不需要我们关心定时器的问题,flash player会定时触发EnterFrame消息,推动Movieclip播放. 在js这一侧,需要我们设定一个定时器,并推动相应的绘制逻辑执行. 最简单: var FPS = 60; setInterval(draw, 1000/FPS); 这个简单做法,如果draw带有大量逻辑计算,导致计算时间超过帧等待时间时,将会出现丢帧.除

解惑:如何使用html+css+js实现旋转相册,立方体相册等动画效果

解惑:如何使用html+css+js实现旋转相册,立方体相册等动画效果 一.前言 最初还是在抖音上看到可以使用简单地代码实现炫酷的网页效果的,但是想要找到可以运行的代码还是比较困难的,最近突然想起就在网上汇总了一些这样的代码. 二.3D效果代码 2.1.旋转相册 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>旋转相

node.js里面的声明周期和animate.css动画

1声明周期<template><div id="lifeinfo"><p>组件的生命周期</p><button @click="changeData">修改数据</button><p>{{msg}}</p></div></template><script>export default {name: "lifeinfo"

[ jquery 效果 stop(stopAll,goToEnd) ] 此方法用于停止所有在指定元素上正在运行的动画,如果队列中有等待执行的动画(并且clearQueue没有设为true),他们将被马上执行

停止所有在指定元素上正在运行的动画,如果队列中有等待执行的动画(并且clearQueue没有设为true),他们将被马上执行 实例: <!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title> <meta http-equiv='description' content=''.animation' is my page'> <meta ht

JavaScript之jQuery-5 jQuery 动画效果(隐藏和显示、自定义动画、并发与排列效果)

一.jQuery 隐藏和显示 基本显示.隐藏效果 - show() / hide() - 作用: 通过同时改变元素的宽度和高度来实现显示或隐藏 - 用法: $obj.show(执行时间,回调函数); 执行时间:slow,normal,fast或毫秒数 回调函数:动画执行完毕之后要执行的函数 滑动式动画效果 - slideDown() / slideUp() - 作用: 通过改变高度来实现显示或者隐藏的效果 - 用法同 show() / hidden() 淡入淡出式动画效果 - fadeIn()

android动画之通过子线程来实现动画

使用android动画机制,往往是相对于原始位置来进行参照. 这里通过子线程修改物体位置实现动画. 布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:

android动画具体解释六 XML中定义动画

动画View 属性动画系统同意动画View对象并提供非常多比view动画系统更高级的功能.view动画系统通过改变绘制方式来变换View对象,view动画是被view的容器所处理的,由于View本身没有要操控的属性.结果就是View被动画了.但View对象本身并没有变化. 在Android3.0中,新的属性和对应的getter和setter方法被增加以克服此缺点. 属性动画系统能够通过改变View对象的真实属性来动画Views. 并且.View也会在其属性改变时自己主动调用invalidate(

iOS开发——动画编程OC篇&amp;(五)动画组

一:组动画简单说明 CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup对象加入层后,组中所有动画对象可以同时并发运行 属性解析: animations:用来保存一组动画对象的NSArray 默认情况下,一组动画对象是同时运行的,也可以通过设置动画对象的beginTime属性来更改动画的开始时间 二:分组动画代码示例 代码: 1 #import "YYViewController.h" 2 3 @interface YYViewController (