五、多物体变宽

这里面要注意由于物体变多了,需要给每个物体各配备一个定时器,否则如果只有一个定时器的话,当鼠标在不同物体之间快速滑动时,不同的物体就会出现争抢的现象。所以timer前要加obj.

 function changeWidth(obj,target) {//元素,目标值
clearInterval(obj.timer);//清除定时器防止嵌套调用
obj.timer=setInterval(function () {//设置定时器
var speed=(target-obj.offsetWidth)/8;//定义缓冲速度,目标值减当前值
speed=speed>0?Math.ceil(speed):Math.floor(speed);//缓冲速度一定要取整
if (obj.offsetWidth==target) {//判断物体当前宽度和目标值的关系,如果达到目标清除定时器
clearInterval(obj.timer);
} else {
obj.style.width=obj.offsetWidth+speed+'px';
}
},30)
}

举例:用3个li来举例:

 <style type="text/css">
*{
margin:;
padding:;
}
ul li{
width: 200px;
height: 100px;
background: yellow;
margin-bottom: 20px;
}
</style>
 <script type="text/javascript">
window.onload=function(){
var ob=document.getElementsByTagName('li');//一共3个li
for (var i = 0; i < ob.length; i++) {
ob[i].timer=null;//避免鼠标在他们仨快速移动时他们竞争定时器
ob[i].onmouseover=function(){
changeWidth(this,400);
}
ob[i].onmouseout=function(){
changeWidth(this,200);
}
}
}
</script>

this参数指的就是对象自己。和前几次不同的是这次的定时器清空要对每个li分别清空。

六、多物体变透明度

涉及到透明度就要注意浏览器的兼容性问题。还有,透明度的初始值不能像上一个单独物体透明度初值那样设置一个,多物体的透明度初始值要分别设置,每个物体都有初始值。

 function changeOpacity(obj,speed,target) {
clearInterval(obj.timer);//清除定时器,避免嵌套调用
obj.timer=setInterval(function () {
if (obj.alpha==target) {//如果透明度达到目标值,清除定时器
clearInterval(obj.timer);
} else {//当前透明度加上透明度变化的速度
obj.alpha=obj.alpha+speed;
obj.style.filter='alpha(opacity:'+obj.alpha+')';//IE浏览器
obj.style.opacity=obj.alpha/100;//火狐和谷歌
}
}, 30)
}

下面用几个div举例子:

 <style type="text/css">
*{
margin:;
padding:;
}
div{
width: 200px;
height: 200px;
background: red;
margin: 10px;
float: left;
filter: alpha(opacity:30);/*filter滤镜:不透明度,IE浏览器*/
opacity: 0.3;/*火狐和谷歌*/
}
</style>
 <div></div>
<div></div>
<div></div>
<script type="text/javascript">
window.onload=function(){
var ob=document.getElementsByTagName('div');
for (var i = 0; i < ob.length; i++) {
ob[i].timer=null;
ob[i].alpha=30;//每一个的透明度初值要分开设置
ob[i].onmouseover=function(){
changeOpacity(this,10,100);//从30变到100
}
ob[i].onmouseout=function(){
changeOpacity(this,-10,30);//从100变回30
}
}
}
</script>

js动画学习(三)的更多相关文章

  1. 【06-23】js动画学习笔记01

    <html> <head> <style> * { margin:0; padding:0; } #div1{ width:200px; height:200px; ...

  2. js动画学习(一)

    一.运动框架实现思路 1.匀速运动(属性值匀速变化)(改变 left, right, width, height, opacity 等): 2.缓冲运动(属性值的变化速度与当前值与目标值的差成正比): ...

  3. js动画(三)

    咳咳咳咳,感冒了感冒了,鼻塞,蓝瘦啊!嘴巴也开裂,哎,心疼自己.想到这是第三只唇膏了!只怪,放荡不倔爱自由, 行驶在冷风路上么,北风那个吹啊吹啊吹啊,好了,发神经发完了,接下来进入正题,严肃脸.(字数 ...

  4. js动画学习(四)

    七.多属性封装函数 前面分别介绍了单独改变单一属性值得动画,从本节起开始介绍多属性封装函数,一个函数搞定多种属性值的改变. 首先介绍一个很重要的函数getStyle(),这个函数返回一个元素的当前属性 ...

  5. js动画学习(二)

    四.简单动画之缓冲运动 实现速度的缓冲,即不同位置的速度不同,越靠近目标值速度越小,所以速度值与目标值与当前值之差成正比.这里要注意一个问题就是物体在运动中速度是连续变化的,不是按照整数变化的,当物体 ...

  6. Node.js基础学习三之登录功能

    本篇介绍Node.js访问数据库并返回数据给客户端 需求基于Node.js学习(二) 数据库请下载:user.sql 1.创建user 实体类(model-user.js) function User ...

  7. js动画学习(五)

    九.多属性同时运动 前面的例子都是每个属性单独运动,如果想要多属性同时运动怎么办?比如,我想要一个div的onmouseover事件中宽和高同时变化.下面这个函数是单独变宽: window.onloa ...

  8. js动画学习笔记

    <html> <head> <meta charest="utf-8"> <title>test</title> < ...

  9. js动画(四)

    终于到了最后了,这里要告一段落了,整了个js运动框架,咳咳咳,好冷 啊啊啊啊啊啊,这天气.妈的,工资怎么也不发,啊,说好的 人与人之间的信任呢?哎,气诶,不到150字啊,又是这个梗..怎么办?说些什么 ...

随机推荐

  1. web server服务器

    使用最多的 web server服务器软件有两个:微软的信息服务器(iis),和Apache. 通俗的讲,Web服务器传送(serves)页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序 ...

  2. Linux系统学习笔记之 1 一个简单的shell程序

    不看笔记,长时间不用自己都忘了,还是得经常看看笔记啊. 一个简单的shell程序 shell结构 1.#!指定执行脚本的shell 2.#注释行 3.命令和控制结构 创建shell程序的步骤 第一步: ...

  3. Xcode GDB 命令list

    此文下半部分为转载:但是这里有一些我自己使用技巧,结合下面的文章,我们会有更多的收获,在此感谢原创者.     --------------------- 关于调试异常崩溃: 一般崩溃是由内存使用错误 ...

  4. Rem & Viewport

    Rem布局 rem就是给根元素设置一个基准值 然后其他元素都以这个基准值作为单位 那么就可以在不同的手机上做出相同比例的元素了 事实上和百分比是同样的道理 网易和淘宝的rem 参考 http://ww ...

  5. JS 节流阀

    JS 节流阀 参考 https://github.com/hahnzhu/read-code-per-day/issues/5 节流阀 节流阀的基本原理 事件函数的执行都记下当前时间, 只有当前时间与 ...

  6. python进阶3--文件系统

    文件系统 python的标准库中包括大量工具,可以处理文件系统中的文件,构造和解析文件名,也可以检查文件内容. pyhton表文件名表示为简单的字符串,另外还提供了一些工具,用来由os.path中平台 ...

  7. Windows 安装 psutil

    第一步:下载pustil 网址:https://pipy.python.org  (http://yunpan.cn/cJg8aQpYwqfzh (提取码:7fa7)) 第二步:安装这个就没有什么好说 ...

  8. Codeforces Round#1

    A. Theatre Square 题目大意:有一个长宽为m和n的广场,用边长为a的正方形去铺盖,问铺满最少需要多少正方形 题解:题目分解为用长度为a的线条分别去覆盖长度为m和n的线条,计算两者的乘积 ...

  9. visual studio2013负载测试简单问题记录

    问题1: 错误 xxxx/xx/xx xx:xx:xx 未能对测试运行“xxxxxxxxxxx”进行排队: 活动的测试设置配置为使用 Visual Studio Online 运行测试. 使用团队资源 ...

  10. [IOI1996] USACO Section 5.3 Network of Schools(强连通分量)

    nocow上的题解很好. http://www.nocow.cn/index.php/USACO/schlnet 如何求强连通分量呢?对于此题,可以直接先用floyd,然后再判断. --------- ...