慕斯卡94142838
2021-08-13
就是为了内存的小优化
qq_晴雨云_0
2019-09-22
代码如下:
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)
}
qq_慕仙5504668
2019-08-23
var aLi = document.getElementsByTagName('li');
这句打错了
weixin_慕容1384957
2019-06-29
慕虎9073884
2019-06-05
两个地方有错误,
cher6271
2019-04-27
请问是怎么解决的呀
慕仙2458872
2018-08-09
夜阑卧听风吹雨y
2018-06-22
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
<style type="text/css">
*{padding:0;margin:0;}
ul,li{list-style:none;}
ul li{
width:200px;
height:100px;
line-height:100px;
background:yellow;
margin-bottom:20px;
}
</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()//鼠标移上去的时候执行函数function
{
startMove(this,400);//参数1 开始运动到400这个位置
}
aLi[i].onmouseout=function()
{
startMove(this,200);//参数2 返回运动到200这个位置
}
}
}
// var timer = null;
function startMove(obj,iTarget)//前面有两个参数,这里也要写两个参数
{
clearInterval(obj.timer);//关闭定时器
obj.timer = setInterval(function()
{ /*对象的可见宽度*/ //即距离
var speed =(iTarget-obj.offsetWidth)/8;//速度=(目标值-东西的宽度)/时间
speed = speed >0?Math.ceil(speed):Math.floor(speed);
//速度=速度>0那么向上取整:否则向下取整;
if(obj.offsetWidth == iTarget)
{
clearInterval(obj.timer);
}
else
{
obj.style.width = obj.offsetWidth + speed + 'px';
}
},30);
}
</script>
</head>
<body>
<ul>
<li></li>
<li></li>
<li></li>
</ul>
</body>
</html>
这就尴尬了
2018-05-03
ByThy
2018-04-06
原因是style.width仅能返回以style方式定义的内部样式表的width属性值,故第24行代码需修改为<div id="div1" style="width: 200px"></div>,再把原先的width样式删除即可。
remmargorP
2017-12-22
var 是声明变量 aLi[i].timer 是声明一个属性
慕勒0078764
2017-10-18
又报错了T_T
2017-09-21
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>JS动画2</title>
<style type="text/css">
ul li {
list-style: none;
width: 200px;
height: 100px;
background: yellow;
margin-bottom: 20px;
}
</style>
</head>
<body>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
</body>
<script type="text/javascript">
window.onload=function() {
var lis=document.getElementsByTagName("li");
for(var i=0;i<lis.length;i++){
lis[i].timer=null;//给每一个li设一个私有的定时器
lis[i].onmouseover=function(){//不是等于符号是点.
Move(this,400);
}
lis[i].onmouseout=function(){//不是等于符号是点.
Move(this,200);
}
}
}
//var timer=null;不能共用同一个定时去
function Move(tar,aim) {
clearInterval(tar.timer);
tar.timer=setInterval(function(){
var sp=(aim-tar.offsetWidth)/8;
sp=sp>0?Math.ceil(sp):Math.floor(sp);
if(tar.offsetWidth==aim){
clearInterval(tar.timer);
}else{
tar.style.width=tar.offsetWidth+sp+"px";//这里你写反了
}
},10);
}
</script>
</html>
慕粉2023498883
2017-09-16
慕粉3601794
2017-09-14
用控制台查了一下,你的speed 是不变的,这样的话,if(obj.offsetWidth==target)有可能永远都不满足,例如:用速度9从两百运动到400,会刚好错过400这个值,计时器就一直没被清除。
解决方法:
把speed的计算放进setInterval里面的那个参数下
代码:
function startMove(obj,target){
clearInterval(obj.timer);
obj.timer=setInterval(function(){
var speed=(target-obj.offsetWidth)/10;
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)
}
慕用7235999
2017-07-25
obj.style.width中的width小写,js是区分大小写的,你再试试
香宝的夫差
2017-07-15
window.onload=function(){ oDiv[i].style.alpha=30;}?
浪里白嫖张顺
2017-07-12
曾嵘
2017-06-14
37和38行?
37行是获取到id为‘li2’的元素。
38行是给id为‘li1’的元素添加鼠标经过事件。
慕函数7258168
2017-05-18
Li[i].onmouseover中的‘.’被你写成‘,’,逗号跟点的问题确实比较难找出来
qq_宝怪儿_0
2017-05-17
OneMagic
2017-05-08
可以简化,将变化方法封装一下,后面会有讲到。大概的意思就是说将 当前对象,需要改变的样式,目标值这些都传过去就可以了
山巅对弈
2017-04-27
作用域问题,你自己看下各个var获取id的声明在哪
迎风向上乀
2017-04-11
啊,解决了可以出现的问题,把53行代码去掉,
但是这样宽度的变化又出现了问题,怎样优化代码能同时实现效果呢?
杨辰沁再不疯狂就老了
2017-04-10
慕田峪6997291
2017-04-06
获取的时候错了 应该是document.getElementsByTagName('div');
fly狂奔的蜗牛
2017-03-30
打个比方,里面有3个苹果,分别是1、2、3;我直接去拿第三个,你要说我把3个都拿了吗
LittleCRush
2017-03-27
我怎么一直报错啊
慕田峪6011835
2017-03-10
定义for循环里面的alpha透明度属性应该只是为了后面的clearInterval(obj.timer);可以关闭
慕粉1703136593
2017-03-09
老铁,你写掉了一个字母,鼠标鼠标事件根本不能执行。
adiv[i].onmoseover=function(){startMove(this,100);}中 onmoseover应该是onmouseover