封装好的运动函数:

1.能控制目标元素的多种属性

2.能自动获取元素的样式表:

3.获取样式函数兼容

4.能对于元素的多属性进行动画(缓动动画)修改

5.能区分透明度等没单位的属性和px属性的变化

animate.js

 /**
* 获取样式函数
* @param element 要获取的样式的对象
* return 目标css样式对象
* */
function getStyle(element) {
if(window.getComputedStyle) {
return window.getComputedStyle(element,null);
}else if(element.currentStyle){
return element.currentStyle;
}
} /**
* 动画函数
* @param element html标签
* @param attr 标签属性
* @param target 目标参数
* */
function animate(element,obj) {
clearInterval(element.timer);
element.timer = setInterval(function () {
var flag = true;
for(var attr in obj){
// 在for in 的内部要区别开到底是透明度还是像素px的变化
if( attr == "opacity") {
var current = getStyle(element)[attr];
var target = obj[attr];
current = current * 100;
target = target * 100;
// Math.round() 函数返回一个数字四舍五入后最接近的整数值。
current = Math.round(current);
var step = (target - current) / 10;
current += current <= target ? Math.ceil(step):Math.floor(step);
if(current != target) {
flag = false;
}
// element.style.left等
element.style[attr] = current / 100;
}else if(attr == "zIndex"){
element.style[attr] = obj[attr];
} else{
var current = parseInt(getStyle(element)[attr]);
var target = obj[attr];
var step = (target - current) / 10;
current += current <= target ? Math.ceil(step):Math.floor(step);
if(current != target) {
flag = false;
}
// element.style.left等
element.style[attr] = current+ "px";
}
}
if(flag) {
clearInterval(element.timer);
}
},40);
}

animate2.js

 // 多个属性运动框架  添加回调函数
function animate(obj,json,fn) { // 给谁 json
clearInterval(obj.timer);
obj.timer = setInterval(function() {
var flag = true; // 用来判断是否停止定时器 一定写到遍历的外面
for(var attr in json){ // attr 属性 json[attr] 值
//开始遍历 json
// 计算步长 用 target 位置 减去当前的位置 除以 10
// console.log(attr);
var current = 0;
if(attr == "opacity")
{
current = Math.round(parseInt(getStyle(obj,attr)*100)) || 0;
console.log(current);
}
else
{
current = parseInt(getStyle(obj,attr)); // 数值
}
// console.log(current);
// 目标位置就是 属性值
var step = ( json[attr] - current) / 10; // 步长 用目标位置 - 现在的位置 / 10
step = step > 0 ? Math.ceil(step) : Math.floor(step);
//判断透明度
if(attr == "opacity") // 判断用户有没有输入 opacity
{
if("opacity" in obj.style) // 判断 我们浏览器是否支持opacity
{
// obj.style.opacity
obj.style.opacity = (current + step) /100;
}
else
{ // obj.style.filter = alpha(opacity = 30)
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(current != json[attr]) // 只要其中一个不满足条件 就不应该停止定时器 这句一定遍历里面
{
flag = false;
}
}
if(flag) // 用于判断定时器的条件
{
clearInterval(obj.timer);
//alert("ok了");
if(fn) // 很简单 当定时器停止了。 动画就结束了 如果有回调,就应该执行回调
{
fn(); // 函数名 + () 调用函数 执行函数
}
}
},30)
}
function getStyle(obj,attr) { // 谁的 那个属性
if(obj.currentStyle) // ie 等
{
return obj.currentStyle[attr]; // 返回传递过来的某个属性
}
else
{
return window.getComputedStyle(obj,null)[attr]; // w3c 浏览器
}
}

旋转木马例子

 <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>旋转木马轮播图</title>
<style>
/*初始化 reset*/
blockquote,body,button,dd,dl,dt,fieldset,form,h1,h2,h3,h4,h5,h6,hr,input,legend,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0}
body,button,input,select,textarea{font:12px/1.5 "Microsoft YaHei", "微软雅黑", SimSun, "宋体", sans-serif;color: #666;}
ol,ul{list-style:none}
a{text-decoration:none}
fieldset,img{border:0;vertical-align:top;}
a,input,button,select,textarea{outline:none;}
a,button{cursor:pointer;} .wrap{
width:1200px;
margin:100px auto;
}
.slide {
height:500px;
position: relative;
}
.slide li{
position: absolute;
left:200px;
top:0;
}
.slide li img{
width:100%;
}
.arrow{
/*opacity: 0;*/
}
.prev,.next{
width:76px;
height:112px;
position: absolute;
top:50%;
margin-top:-56px;
background: url(images/prev.png) no-repeat;
z-index: 99;
}
.next{
right:0;
background-image: url(images/next.png);
}
</style>
</head> <body>
<div class="wrap" id="wrap">
<div class="slide" id="slide">
<ul>
<li>
<a href="#"><img src="data:images/slidepic1.jpg" alt="" /></a>
</li>
<li>
<a href="#"><img src="data:images/slidepic2.jpg" alt="" /></a>
</li>
<li>
<a href="#"><img src="data:images/slidepic3.jpg" alt="" /></a>
</li>
<li>
<a href="#"><img src="data:images/slidepic4.jpg" alt="" /></a>
</li>
<li>
<a href="#"><img src="data:images/slidepic5.jpg" alt="" /></a>
</li>
</ul>
<div class="arrow" id="arrow">
<a href="javascript:;" class="prev" id="arrLeft"></a>
<a href="javascript:;" class="next" id="arrRight"></a>
</div>
</div>
</div>
<!--把动画函数封装好,再通过script标签的属性引入到当前文件-->
<script src="animate.js"></script>
<script>
/**
* 第一个功能:
* 让图片都散开,到达每一张图片应该到达的位置
* 根据config数组,设置每一张图片的位置即可
*
* 第二个功能
* 旋转
* 点击左右按钮
*/
var config = [
{
width: 400,
top: 20,
left: 50,
opacity: 0.2,
zIndex: 2
}, //
{
width: 600,
top: 70,
left: 0,
opacity: 0.8,
zIndex: 3
}, //
{
width: 800,
top: 100,
left: 200,
opacity: 1,
zIndex: 4
}, //
{
width: 600,
top: 70,
left: 600,
opacity: 0.8,
zIndex: 3
}, //
{
width: 400,
top: 20,
left: 750,
opacity: 0.2,
zIndex: 2
} //
]; var slide = document.getElementById('slide');
var slideItem = slide.children[0].children;
var arrLeft = document.getElementById("arrLeft");
var arrRight = document.getElementById("arrRight");
// 页面加载完毕后,运行散开动画
for(var i = 0 ; i < slideItem.length; i++ ) {
animate(slideItem[i],config[i]); }
// 给右按钮添加点击事件 arrRight.onclick = function () {
//splice() 方法通过删除现有元素和/或添加新元素来更改一个数组的内容。
// config.splice(0,1)[0] 截取数组的第一个元素
// 再把截取的元素放到改变之后的数组的最后位置
config.splice(config.length,0,config.splice(0,1)[0]);
for(var i = 0 ; i < slideItem.length; i++ ) {
animate(slideItem[i],config[i]);
}
}
arrLeft.onclick = function () {
config.splice(0,0,config.splice(config.length-1,1)[0]);
for(var i = 0 ; i < slideItem.length; i++ ) {
animate(slideItem[i],config[i]);
}
} </script>
</body> </html>

JavaScript--封装好的运动函数+旋转木马例子的更多相关文章

  1. JavaScript封装

    js封装就是把使用方式简单化,内部逻辑和使用解耦.使用人员知道参数和返回值就可以了,其他不用使用人员设置. 封装就是将属性,方法,字段等封装成类. JavaScript封装方法 1,函数方式 func ...

  2. Javascript之封装运动函数

    @ 目录 阶段一.仅适用单位带px属性的匀速运动 阶段二.可适用单位不带px属性(如opacity)的匀速运动 阶段三.适用于多元素单一属性的匀速运动 阶段四.适用于多元素单一属性的匀速或缓冲运动 阶 ...

  3. 我自己的Javascript 库,封装了一些常用函数 Kingwell.js

    我自己的Javascript 库,封装了一些常用函数 Kingwell.js 博客分类: Javascript javascript 库javascript库  现在Javascript库海量,流行的 ...

  4. JavaScript封装一个函数效果类似内置方法concat()

    JavaScript封装一个函数效果类似内置方法concat() 首先回忆concat()的作用: concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,而仅仅会返回被连接数组的一个 ...

  5. 原生JS封装时间运动函数

    /*讲时间运动之前先给大家复习一下运动函数 通常大家都会写运动框架,一个定时器(Timer),一个步长(step 就是每次运动的距离),一个当前位置(current)一个目标位置(target),然后 ...

  6. 运动函数封装(js)

    // 运动函数 function starMove(obj,json,fnEnd){ clearInterval(obj.timer); obj.timer  = setInterval(functi ...

  7. Javascript 封装方法

    基本封装方法 请看下面的例子: var Person = function(name,age){ this.name = name; this.age = age || "未填写" ...

  8. javaScript封装的各种写法

    在javascript的世界里,写法是个神奇的现象,真是百家齐开放啊!每次看到老外写的js组件,思想和写法都怪异,就没看到一个js结构基本相同的代码出来.今天,我就来谈谈js写法,我在开发过程中,也写 ...

  9. 分享几个Javascript 封装方法

    基本封装方法 请看下面的例子: var Person = function(name,age){ this.name = name; this.age = age || "未填写" ...

随机推荐

  1. [编织消息框架][JAVA核心技术]数值与逻辑分离

    为什么要分离? 业务需求是不停地变,如果把条件写进代码里,当用户需求变时要改代码发版本更新才能生效,这过程无疑是漫长的 就算是在开发期,不停的变开发者精力耗光在沟通,小修改上,无法专注逻辑部分 分离的 ...

  2. Ionic 生成icon图标

    1.直接切换到项目跟目录 运行以下命令 备注:运行第一次ionic rescoures 后自动生成文件夹rescoures ,让后帮你自己的icon.png 文件放进入就ok ,在次运行ionic r ...

  3. leetcode算法题笔记|Reverse Integer

    /** * @param {number} x * @return {number} */ var reverse = function(x) { var s; if(x<0){ s=-x; } ...

  4. iframe加载完成事件

    var iframe = document.createElement("iframe"); iframe.src = "http://www.jb51.net" ...

  5. Flask中cookie和session设置与csrf原理攻防

    Flask之操作cookie app.py from flask import Flask, request, Response app = Flask(__name__) @app.route('/ ...

  6. 架构hive2mysql流程

    1.分析参数 args = new String[5]; args[0]="d:/3-20.sql"; args[1]="-date"; args[2]=&qu ...

  7. VS2015使用Nuget安装OpenCV3.X以及Python3安装OpenCV3.X

    VS2015已经自带Nuget安装工具了,所以,新建一个项目,点击管理Nuget包 搜索OpenCV3 注意,目前只有这个版本支持VS2015,也就是平台工具集可以为vs140,其他的都会报错,报错我 ...

  8. UVA11722 Jonining with Friend

    Joining with Friend You are going from Dhaka to Chittagong by train and you came to know one of your ...

  9. getBoundingClientRect介绍

    getBoundingClientRect用于获取元素相对与浏览器视口的位置 由于getBoundingClientRect()已经是w3c标准,所以不用担心兼容,不过在ie下还是有所区别 { top ...

  10. python 中的split()函数和os.path.split()函数

    Python中有split()和os.path.split()两个函数: split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表. os.path.split():将文件 ...