应该这样写filter:Alpha(opacity = 30)
obj.style[filter]改为obj.style['filter'],obj.style.filter === obj.style['filter']
Li1.onmouseout = function () {
stratMove(this, 'opacity', 30);
}
start拼写错误,其他没看
兼容的问题,加个webkit试试
它是round的(float*100)
为什么删不掉提问,懵逼,少写了一个=。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
小细节 不仔细看 很难发现
在IE浏览器中,识别filter;在chrome中用opacity
obj.style.filter='alpha(opacity:'+(icur+speed)+')';
针对火狐的那段代码错了; getComputedStyle() 方法是 window 对象的方法;你写成obj调用了,obj只是接收实参的形参;所以错了。
问题?你的问题是什么?
写错了,应该是round。。
哈哈,自己发现了,移出透明度忘记改为30了,郁闷。。。。
视频里好像说随机出现吧,你确定你试过所有数了吗?
细心点。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
body,ul{
margin: 0;
padding: 0;
}
ul,li{
list-style: none;
}
ul li{
width: 200px;
height: 100px;
background: yellow;
margin-bottom: 20px;
border:4px solid #ddd;
filter: alpha(opacity: 30);
opacity: 0.3;
}
</style>
<script>
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);
// }
// }
// alert(Math.round(3.4));
var Li1 =document.getElementById('li1');
var Li2 =document.getElementById('li2');
Li1.onmouseover =function(){
startMove(this,'opacity',100);
};
Li1.onmouseout =function(){
startMove(this,'opacity',30);
};
function getStyle(obj,attr){
if(obj.currentStyle)
{
return obj.currentStyle[attr];
}
else{
return getComputedStyle(obj,false)[attr];
}
}
var alpha =30;
function startMove(obj,attr,iTarget){
clearInterval(obj.timer);
obj.timer =setInterval(function(){
var icur = 0;
if (attr =='opacity') {
icur =Math.round( parseFloat(getStyle(obj,attr))*100);
}
else{
icur = parseInt(getStyle(obj,attr));
}
var speed =(iTarget-icur)/8;
speed=speed>0?Math.ceil(speed):Math.floor(speed);
if (icur==iTarget) {
clearInterval(obj.timer);
}
else{
if (attr=='opacity') {
obj.style.filter="alpha(opacity:'+(icur+speed)+')";
obj.style.opacity =(icur+speed)/100;
}
else{
obj.style[attr] =icur+speed+'px';
}
}
},30);
}
};
</script>
</head>
<body>
<ul>
<li id="li1" ></li>
</ul>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JS动画</title>
<style>
body,ul,li{
margin: 0;
padding: 0;
}
ul,li{
list-style: none;
}
ul li{
width: 200px;
height: 100px;
background: yellow;
margin-bottom: 20px;
border:5px solid black;
}
ul #li1{
filter:alpha(opacity:30) ;
opacity:0.3;
}
</style>
</head>
<body>
<ul>
<li id="li1"></li>
<li id="li2"></li>
</ul>
<script>
window.onload=function () {
// var list=document.getElementsByTagName('li')
// for (var i=0;i<list.length;i++){
// list[i].times=null;
// list[i].onmouseover=function () {
// startMove(this,400);
// }
// list[i].onmouseout=function () {
// startMove(this,200);
// }
// }
var li1=document.getElementById('li1');
var li2=document.getElementById('li2');
// li1.times=null;
// li2.times=null;
// li3.times=null;
li1.onmouseover=function () {startMove(this,100,'opacity')}
li1.onmouseout=function () {startMove(this,30,'opacity')}
li2.onmouseover=function () {startMove(this,200,'height')}
li2.onmouseout=function () {startMove(this,100,'height')}
}
//var times=null;
function startMove(obj,iTarget,sty){
clearInterval(obj.times);
obj.times=setInterval(function () {
var icur=0;
if(sty=='opacity'){
icur=Math.round(parseFloat(getStyle(obj,sty))*100);
}
else {icur=parseInt(getStyle(obj,sty))}
var speed=(iTarget-icur)/10;
speed=speed>0?Math.ceil(speed):Math.floor(speed);
if(icur==iTarget){
clearInterval(obj.times);
}
else{
if(sty=='opacity'){
obj.style.filter='alpha(opacity:'+icur+speed+')';
obj.style['opacity']=(icur+speed)/100;
}
else{
obj.style[sty]=icur+speed+'px';}
}
},30)
}
function getStyle(obj,sty) { //获取样式
if(obj.currentStyle){
return obj.currentStyle[sty]; //IE下的
}
else {return getComputedStyle(obj,false)[sty]}//火狐下的
}
</script>
</body>
</html>
把70和71行的odiv改成obj就可以了,另外60行的“*100”应该放在括号内。
opacity的值chrome的是小数,IE的是整数,parselnt返回的是整数opacity就不会改变所以用parseFloat返回浮点数,就酱~
var oDiv=document.getElementsByTagName("did");这里did改成div
setInterval后面没有加上时间,系统就默认为0
这个参数是“伪类”必需的,以前如果不是伪类,必须设置为false,现在可以不写
在startmove函数里icur=Math.round(parseFloat(getStyle(obj.attr))*100);中(obj.attr)是逗号,细点心
if(aa==iTarget){ //为什么这里用aa>=iTarget或是<=实现不了呢,这句话意思同下:
iTarget这个词在viviAN讲师第二章或三章的时候就讲过,speed代表是速度,而iTarget代表目标,
比如说跑步,小明跑了aa米,iTarget目标定的是200米,吹哨子的体育老师在200米等他,当小明到了200米,老师让他停,如同这句话clearInterval(obj.timer);,相反>=和<=,目标就是200米,你跑203米和19几米,多跑和少跑有什么意义。比赛本来就是200米跑步竞赛。
因为在chrom和ff 浏览器中 css样式透明度是opacity:0.3; 数值是0到1之间的数值 是有小数的
你是从哪拿的代码呀?为啥不去下老师的代码呀。重新听一遍,把思路屡屡再写就会好点
<!DOCTYPE html> <html> <head> <meta charset="utf-8;"> <title>透明度运动</title> </head> <style type="text/css"> body,div{ margin: 0; padding: 0; } li{ list-style:none; width: 200px; height: 200px; background: red; margin-bottom:20px; filter:alpha(opacity:70); opacity:0.3; border:2px solid black; fontSize:30px; } </style> <script type="text/javascript"> window.onload=function() { var lis = document.getElementsByTagName("li"); var uls = document.getElementsByTagName("ul"); //为什么写成for循环就不能运行,而分开写就能正常运行呢 for(var j=0; j<lis.length; j++) { lis[j].indexTimer = null; lis[j].onmouseover=function(){ move(this,{width:400, height:400, opacity:100})}; lis[j].onmouseout=function(){ move(this,{width:200, height:200, opacity:30})}; } } var indexTimer=null; function move(obj,json,fn)// { clearInterval(obj.indexTimer);//清除每个li的定时器 obj.indexTimer=setInterval( function() { var getArr = 0; var flag = true; for(var attr in json) { //取属性值 if(attr=="opacity") { getArr =Math.round((parseFloat(getStyle(obj,attr)))*100); } else { getArr=parseInt(getStyle(obj,attr)); } //根据目标值计算速度 var speed=(json[attr]-getArr)/20; speed=speed>0?Math.ceil(speed):Math.floor(speed); if(attr=="opacity") { obj.style.opacity =(getArr+speed)/100; obj.style.filter = "alpha(opacity:'+(getArr+speed)+')" ; } else{ obj.style[attr] = getArr+speed + "px";} if(getArr!=json[attr]) { flag=false; } } if(flag == true) { clearInterval(obj.indexTimer); if(fn){fn();}; } },30); } function getStyle(obj,attr) { if(obj.currentStyle) { return obj.currentStyle[attr]; } else { return getComputedStyle(obj,false)[attr]; } } </script> <body> <ul> <li>1</li> <li>2</li> <li>3</li> </ul> </body> </html>
startMove方法 里面的parseFolat里面的getStyle里面的“,”写错了,你写成了“.”
IE浏览器取出来的也是一个0到1之间的小数。你自己写段代码看看。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
ul,li{
list-style: none;
}
ul li{
width: 200px;
height: 100px;
background: yellow;
margin-bottom:20px;
filter: alpha(opacity:30);
border: 4px solid #000;
filter: alpha(opacity:30);
opacity: 0.3;
}
</style>
<script>
window.onload=function(){
var Li1=document.getElementById('li1');
var Li2=document.getElementById('li2');
Li1.onmouseover=function(){
startMove(this,'opacity',100);
}
Li1.onmouseout=function(){
startMove(this,'opacity',30);
}
}
function getStyle(obj,attr){
if(obj.currentStyle){
return obj.currentStyle[attr];
}else{
return getComputedStyle(obj,false)[attr];
}
}
//var timer=0;
var alpha=30;
function startMove(obj,attr,iTarget){
clearInterval(obj.timer);
obj.timer=setInterval(function(){
var icur=0;
if(attr=='opacity'){
icur=Math.round(parseFloat(getStyle(obj.attr))*100); // 这行代码写错了getStyle(obj.attr)应该是getStyle(obj,attr) 是调用用 , 号不是.号
}else{
icur=parseInt(getStyle(obj.attr)); // 这个也是 自己改过来
}
//var icur=parseInt(getStyle(obj,attr));
var speed=(iTarget-icur)/8;
speed=speed>0?Math.ceil(speed):Math.floor(speed);
if(icur==iTarget){
clearInterval(obj.timer);
}else{
if(attr=='opacity'){
obj.style.filter='alpha(opacity:'+(icur+speed)+')';
obj.style.opacity=(icur+speed)/100;
}else{
obj.style[attr]=icur+speed+'px';
}
}
},30)
}
</script>
</head>
<body>
<ul>
<li id="li1"></li>
</ul>
</body>
</html>