就是为了内存的小优化
有点类似递归的思想,一级套一级,fuction()函数传参使用,相当于一个框架。
就是没有把画面跟上
是里面的方法写的有问题
视频10:53处有解决方法
先说原因:由于小数在计算时会先转换为二进制,存在精度丢失。
JS的小数运算常用的方法有两种:
1. 先转成整数,例如代码里的乘以100的做法
num.toFixed()方法,指定保留的小数位数,在截取时会进行四舍五入。
实际上,无论移入移出鼠标,都在抖动的。
下面是控制台输出的透明度。
1.移入鼠标的透明度
2.移出鼠标的透明度
box1.onmouseover = function () {
startMove();
}
你单词拼错了
加入if-else判断主要是为了判断何时结束定时器的运行,如果没有结束定时器的运行,那么动画会一直运动下去,要变的属性会一直变下去不会停止,肯定不行的,所以加个判断何时停止,然后手动停止定时器,那么动画也就停止了。
fn()改了 还是没用
先设置一个class再去控制这个class,哈哈
代码是存在问题,但错不在这,
var flag = true; 需要定义在定时器内
function commonStartMove(obj, json, fun) {
clearInterval(obj.timer);
obj.timer = setInterval(function () {
var flag = true; // 需要将flag定义在此处 ?
for (var attr in json) {
...
}
if (flag) {
clearInterval(obj.timer);
if (fun) {
fun();
}
}
}, 30);
}
按自己的理解改了部分代码 :)
没动画看看函数逻辑通不通一步步排除
代码如下:
function startmove(obj, iTarget) {
clearInterval(obj.timer);
obj.timer = setInterval(function () {
var speed = (iTarget - parseInt(getStyle(obj, 'width'))) / 10;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
if (parseInt(getStyle(obj, 'width')) == iTarget) {
clearInterval(obj.timer);
} else {
obj.style.width = parseInt(getStyle(obj, 'width')) + speed + 'px';
}
}, 30)
}
var aLi = document.getElementsByTagName('li');
这句打错了
非常好!
看看有啥不一样
我也遇见过这种情况,根据我的观察应该和鼠标的位置有关。事件判断的条件是a的mouseover,而a标签里有很多子标签,每个子标签都可以触发a的onmouseover事件。你可以在审查中通过对标签区域的观察来看看究竟是不是这样。。。。至于解决方案,我目前还没改出来
...............你不发发代码谁知道具体是什么情况呢
emmmmmmmmmm我找到问题出在哪了,但是却不知道为什么。你把if(obj.icur == end)中的obj.去掉就可以了
因为你的样式里面没有设置外间距,所以判断的结果不可能等于0,
你要么把判断条件改成>=0;
要么在头部样式(style)里面添加
*{
margin:0;
padding:0;
}
function startMove(iTarget)函数里你只有一个参数,但是调用的时候你传了两个 startMove(10,0);
改成只传目标值就可以了;
oDiv.onmousemove=function(){ startMove(0); } oDiv.onmouseout=function(){ startMove(-200); }
。。。。。。
style里面 少设置一个div
是window.onload哦
两个地方有错误,