先说原因:由于小数在计算时会先转换为二进制,存在精度丢失。
JS的小数运算常用的方法有两种:
1. 先转成整数,例如代码里的乘以100的做法
num.toFixed()方法,指定保留的小数位数,在截取时会进行四舍五入。
实际上,无论移入移出鼠标,都在抖动的。
下面是控制台输出的透明度。
1.移入鼠标的透明度
2.移出鼠标的透明度
非常好!
代码行数
if(speed > iTarget){
speed = -10;
}else{
speed = 10;
}
这不是speed>Tarfet,而是alpha > Target
onmouseover 和 onmouseout
time=setInterval 这行里,应该是timer ,不是time
js代码写在head里,你写的是window.onload(){};写错了 应该是widow.onload=function(){}; 所有的js代码写在function里
只要没离开指定的元素,就成在mouseover事件;函数就在执行;
应该是 filter:alpha(opacity=30)
使用getElementsByTagName来获取‘a’,此时获取的是一个数组对象,包含3个‘a’对象;然后通过数组编号来准确获取其中一个,或者通过循环遍历这个数组来对这3个进行设置。
一段程序里面id只能是唯一的,不能有两个相同ID,在这儿你可以把ID改为class,然后用getElementsByClassName来获取对象,之后是一样的。
首先第二行winddow.onload你检查一下。 其次这两句第一句说是针对IE指的是IE版本8及以下,8以上及其他浏览器用第二句。 oDiv.style.filter='alpha(opacity:'+alpha+')';//ie8及以下 oDiv.style.opacity=alpha/100;//ie8以上及其他浏览器
oDiv.onmouseover = function(){
startMove(10,100);
oDiv.onmouseout = function(){
startMove(-10,30);
}
}
这里错了 没{}对。应该是
oDiv.onmouseover = function(){
startMove(10,100);
}
oDiv.onmouseout = function(){
startMove(-10,30);
}
因为没有提供代码,我猜,你的 css 属性里面设置的 opacity 的初始值是 100, 然后在 js 里设置初始值为 30,所以。一开始看到的是 100, 鼠标移上去执行 30 值,然后再变回 100,就成了闪现的效果了。
大哥,你这是class="block",是类选择器啊,只能用document.getElementsByClassName("block")[0]来获取啊,还要看浏览器是否支持getElementsByClassName方法,不支持的话可以创建该方法
好的 ok
can not set property onmouseover of null看错误,应该是未找到元素。尝试把js放在页面最底部再获取div元素。
javascript的计算能力不强,用小数的方式来做数学运算容易得出错误结果,建议需要运算的代码尽量避开小数。
不知道为什么复制的代码出现很多变成中文了,opacity才是正确的。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>透明度</title>
<style type="text/css">
*{padding: 0;margin: 0;}
#div1{
width:200px;
height:200px;
background:red;
filter:alpha(opacity:30);//透明度30
opacity:0.3;
}
</style>
<script >
window.onload = function ()
{
var oDiv=document.getElementById("div1");
oDiv.onmouseover = function()
{
startMove(100);//鼠标移上去触发透明度100
}
oDiv.onmouseout = function()
{
startMove(30);//鼠标移开触发透明度30
}
}
var timer = null;
var alpha = 30;
function startMove(iTarget)
{
var oDiv=document.getElementById("div1");
clearInterval(timer);
timer = setInterval(function()
{
var speed = 0;//速度
if(alpha > iTarget)
{ speed = -10;}
else
{ speed = 10;}
if(alpha == iTarget)//iTarget目标
{clearInterval(timer);}//关闭定时器
else
{
alpha += speed;
oDiv.style.filter = 'alpha(opacity:'+ alpha + ')';
oDiv.style.opacity = alpha/100;
}
},30);
}
</script>
</head>
<body>
<div id="div1"></div>
</body>
</html>
为了不同浏览器的兼容性
你这样想:iTarget是个定值(30,100);
alpha是一个随时间变化而变化的值,即所对应的颜色深浅。
当alpha>iTarget时,是不是iTarget只能取30,这个不等式才能有效。即他的目标值是30,是不是颜色要变浅啊,颜色变浅是不是要给alpha值递减啊,递减的话,只能加一个负数吧。
你画一个数轴,标出alpha与iTarget就比较明显
因为每一次的循环调用都初始化了它的值 使其无法叠加
这只是为了兼容IE游览器所写得代码,如果你是使用IE游览器来测试你的效果,就必须加上这句代码了
因为爱
发现了,onmouseover的n写成了m,哭
第一个alpha是属性,第二个是变量
明白了,把var alpha=30移出去就可以啦
首先获取元素要在文档加载完成之后才能获取到的,其次是你那个速度是网页加载完成的时候输入的,所以要在点击事件里面获取,才能得到输入的速度值,这个值是个字符串用parseInt()转义下,speed是全局变量可以在函数里面使用,不用带进去
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>js动画制作</title>
<style type="text/css">
#div1{
width:200px;
height:200px;
border:2px solid red;
position:absolute;
left:0px;
top:50px;
}
</style>
</head>
<body>
<div id="div1"></div>
设置速度<input type="text" id="txt1"/>px/s
<input type="button" value="点击开始运动" style="position:relative;" onclick="startqwe()" />
<script type="text/javascript">
//获取元素要在文档加载完成之后在获取,一般写在最后面
var qwe=document.getElementById('div1');
var speed=document.getElementById('txt1').value;
function startqwe(){
//点击之后获取到速度值
speed=document.getElementById('txt1').value;
setInterval(function(){qwe.style.left=qwe.offsetLeft+parseInt(speed)+'px';
},1000);
}
</script>
</body>
</html>