javascript动画效果之任意效果任意值
通过学习,我发现当同一个ul下的li标签如果想要不同的效果,那怎么办?
比如第一个li是width变化,第二个li为透明度(opacity)变化,而opacity的值和width的值类型不同,不能通用那怎么办?
而设置两个函数,只为了,两个值变化就显得太过麻烦,通过学习,我发现可以通过一些方法来实现
代码如下
<!DOCTYPE html>
<html> <head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
font-size: 12px;
} li {
list-style: none;
width: 200px;
height: 100px;
margin: 10px;
background: pink;
border: 1px solid blue;
filter: alpha(opacity: 30);
opacity: 0.3;
}
</style>
</head> <body> <ul id="show">
<li id="btn1"></li>
<li id="btn2"></li>
</ul> </body> </html>
js部分用了一些新的方法,可以看注释,还不清楚可以自行百度
<script type="text/javascript">
function $(id) {
return typeof id === "string" ? document.getElementById(id) : id;
}
window.onload = function() { var btn1 = $("btn1");
var btn2 = $("btn2");
var speed = 0; btn1.onmouseenter = function() {
changeBtn(this, 'width', 400);
} btn1.onmouseleave = function() {
changeBtn(this, 'width', 200);
} btn2.onmouseenter = function() {
changeBtn(this, 'opacity', 100);
} btn2.onmouseleave = function() {
changeBtn(this, 'opacity', 30);
} //obj为当前的鼠标所指向的标签
//stChg为对应的变量样式
//chgWid为需要改变的值
function changeBtn(obj, stChg, chgWid) {
clearInterval(obj.timer); obj.timer = setInterval(function() {
//chg这个变量本来为长度,宽度,或者透明度什么的
//但是现在通过一个getStyle()函数来获取
var chg = 0;
//进入函数,需要先判定是否透明度样式
if (stChg == 'opacity') {
//为真,则执行parseFloat()此方法返回的是浮点数
chg = Math.round(parseFloat(getStyle(obj, stChg)) * 100);
} else {
//为假,则执行parseInt()此方法返回的是整数
chg = parseInt(getStyle(obj, stChg));
}
//判定初始值(chg)是否小于输入值(chgWid)
if (chg < chgWid) {
speed = 10;
} else {
speed = -10;
}
//console.log(speed);
if (chg == chgWid) {
//相等时候,则清楚定时器
clearInterval(obj.timer);
} else {
//不相等时,则先进性判定样式是否为特殊样式opacity
if (stChg == 'opacity') {
//为真,对应其他浏览器,则执行(chg+speed)=当前样式的值+speed
//比如开始是(30+10),那么下一次就为(40+10)
obj.style.opacity = (chg + speed) / 100;
//为真,对应的ie浏览器,方法同上
obj.style.filter = 'alpha(opacity: ' + (chg + speed) + ')';
} else {
//为假则为普通样式取值,stChg为width时style[width]=style.width
obj.style[stChg] = chg + speed + 'px';
}
}
}, 30);
} //这个函数返回的是一个值,例如attr传参为width
//为真时obj.currentStyle[attr]=200
function getStyle(obj, attr) {
if (obj.currentStyle) {
//currentStyle获取样式的值,对应的是ie浏览器
return obj.currentStyle[attr];
} else {
//同理,对应的是其他浏览器
return getComputedStyle(obj, false)[attr];
}
} }
</script>
javascript动画效果之任意效果任意值的更多相关文章
- Javascript动画效果(三)
Javascript动画效果(三) 前面我们已经介绍了速度动画.透明度动画.多物体运动和任意值变化,并且我们在Javascript动画效果(二)中介绍到我们封装了一个简单的插件雏形,接下来我们对前面的 ...
- Javascript动画效果(一)
Javascript动画效果(一) 前面我们介绍了Javascript的回到顶部效果,今天呢,我们对Javascript动画做进一步的研究.在这篇博文中我们只介绍简单的匀速运动.简单的缓冲运动和简单的 ...
- Javascript动画效果(二)
Javascript动画效果(二) 在前面的博客中讲了简单的Javascript动画效果,这篇文章主要介绍我在改变之前代码时发现的一些问题及解决方法. 在前面的多物体宽度变化的例子中,我们给其增加代码 ...
- Javascript动画效果(四)
Javascript动画效果(四) 前面我们自己写了一个小小的关于js动画的插件,下面我们来使用之前的框架来完成我们想要的动画效果.我们经常在淘宝网中看到,鼠标经过某一图片时,该图片有从上滚出而又从下 ...
- javascript动画效果之缓冲动画(修改版)
在编写多块同时触发运动的时候,发现一个BUG, timer = setInterval(show, 30);本来show是一个自定义函数,当设为timer = setInterval(show(one ...
- javascript动画效果之透明度(修改版)
在编写多块同时触发运动的时候,发现一个BUG, timer = setInterval(show, 30);本来show是一个自定义函数,当设为timer = setInterval(show(one ...
- javascript动画效果之匀速运动(修订版)
在编写多块同时触发运动的时候,发现一个BUG, timer = setInterval(show, 30);本来show是一个自定义函数,当设为timer = setInterval(show(one ...
- cocos2dx - shader实现任意动画的残影效果
本节主要讲利用cocos2dx机制实现opengl es shader脚本的绘制 这里先看下最终效果: 这里分别实现了灰度效果及残影的效果. 一.绘制基类 这 ...
- 用CSS3动画特效实现弹窗效果
提示:如果大家觉得本篇实现的弹窗效果有用,可持续关注.接下会添加更多效果并且封装成插件,这样使用就方便了.效果查看: https://heavis.github.io/hidialog/index.h ...
随机推荐
- HDU 5887 Herbs Gathering
背包,$map$,优化. 和普通背包一样,$map$加一个$erase$优化一下就可以跑的很快了. #pragma comment(linker, "/STACK:1024000000,10 ...
- CodeForces 711B Chris and Magic Square
简单题. 找一个不存在$0$的行,计算这行的和(记为$sum$),然后就可以知道$0$那个位置应该填的数字(记为$x$). 如果$x<=0$,那么无解,否则再去判断每一行,每一列以及两个斜对角的 ...
- 开发中常用的 $.extend 总结
工作中常见$.extend( ),所以就查了一些它的用法. 一.Jquery的扩展方法原型是: extend(dest, src1, src2, src3...) 它的含义是将src1,src2,sr ...
- Android UI方面的学习记录
1,android:textAllCaps=“false” android5.0后有可能button的text显示全是大写,设置这个后才能正常显示小写 2,优化listview性能: 1,view重用 ...
- action解耦方式
ServletAction方式,必须要有Servlet容器作支持 package com.hanqi.action; import javax.servlet.ServletContext; impo ...
- 动态Order by
),) set @order='' ' select * from T_Table order by then ID end desc, then CreateTime end desc
- redis7--hash set的操作
数据类型Hash(1)介绍hash数据类型存储的数据与mysql数据库中存储的一条记录极为相似Redis本身就类似于Hash的存储结构,分为key-value键值对,实际上它的Hash数据就好像是在R ...
- zookeeper分布式锁避免羊群效应(Herd Effect)
本文(转自:http://jm-blog.aliapp.com/?p=2554)主要讲述在使用ZooKeeper进行分布式锁的实现过程中,如何有效的避免“羊群效应( herd effect)”的出现. ...
- LCOV 如何过滤iostream等系统函数的覆盖率信息
最近在做cppunit test相关工作,用gcov和lcov工具来查看每行代码的覆盖率,个人感觉lcov真棒,看起来很舒服,点起来也很爽!~~ 闲聊至此,如题: 我使用的是lcov的 --remov ...
- 《JavaScript高级程序设计》读书笔记 ---单体内置对象
Global对象Global(全局)对象可以说是ECMAScript 中最特别的一个对象了,因为不管你从什么角度上看,这个对象都是不存在的.ECMAScript 中的Global 对象在某种意义上是作 ...