다른 요소에 대해 함수가 여러 번 호출되는 문제가 있습니다. 이 함수를 여러 요소에 대해 사용할 수 있도록 모든 변수를 지역화해야한다고 생각합니다. 그것이 중요한 경우에는 jquery 1.3을 호출합니다.자바 스크립트 지원
한 번만 pageSlide를 호출하면 모든 것이 정상이지만 한 번 여러 번 호출하면 고통 스럽습니다. 오류가 없으며 엉뚱한 행동입니다.
코드는
var slideMenu=function(){
var speed, startWidth, time, menuId, liID, menuLen, menuWidth, globalWidth, openWidth;
return{
speed : 0, startWidth : 0, time : 0, menuId : 0, liID : 0, menuLen : 0, menuWidth : 0, globalWidth : 0, openWidth : 0,
build:function(ulID,passStartWidth,passTime,s,passSlideLen,passHeight){
speed=s;
startWidth=passStartWidth;
time=passTime;
menuId=document.getElementById(ulID);
liID=menuId.getElementsByTagName('li');
menuLen=liID.length;
menuWidth=menuId.offsetWidth;
globalWidth=menuWidth/menuLen;
openWidth=Math.floor((menuWidth-startWidth)/(menuLen-1));
var i=0;
for(i;i<menuLen;i++){
s=liID[i];
s.style.width=globalWidth+'px';
this.timer(s)
}
if(passSlideLen!=null){
menuId.timer=setInterval(function(){
slideMenu.slide(liID[passSlideLen-1])
},time)
}
},
timer:function(s){
s.onmouseover=function(){
clearInterval(menuId.htimer);
clearInterval(menuId.timer);
menuId.timer=setInterval(function(){
slideMenu.slide(s)
},
time)
}
s.onmouseout=function(){
clearInterval(menuId.timer);
clearInterval(menuId.htimer);
menuId.htimer=setInterval(function(){
slideMenu.slide(s,true)
},
time)
}
},
slide:function(s,passChange){
var changeWidth=parseInt(s.style.width);
if((changeWidth<startWidth && !passChange) || (changeWidth>globalWidth && passChange)){
var overallWidth=0;
var i=0;
for(i;i<menuLen;i++){
if(liID[i]!=s){
var slideObj,openWidth; var opening=0; slideObj=liID[i]; openWidth=parseInt(slideObj.style.width);
if(openWidth<globalWidth && passChange){
opening=Math.floor((globalWidth-openWidth)/speed);
opening=(opening>0)?opening:1;
slideObj.style.width=(openWidth+opening)+'px';
}else if(openWidth>openWidth && !passChange){
opening=Math.floor((openWidth-openWidth)/speed);
opening=(opening>0)?opening:1;
slideObj.style.width=(openWidth-opening)+'px'
}
if(passChange){
overallWidth=overallWidth+(openWidth+opening)}else{overallWidth=overallWidth+(openWidth-opening)
}
}
}
s.style.width=(menuWidth-overallWidth)+'px';
}else{
clearInterval(menuId.timer);
clearInterval(menuId.htimer)
}
}
};
}();
위의 코드는 오류가 있지만 작동하지 않는 업데이트되었습니다. 이 키워드를 사용하면 더 좋아지지 않습니다.
제 질문은 어떤 변수가 "this"가되어야한다는 것입니다. 나는 여러 가지 조합을 시도해 봤지만 뭔가 빠졌습니다.
이 코드가 무엇을하는지 정확하게 설명하는 것이 도움이 될 것입니다. – cgp
변수 이름이 빠르다면, 지금은 매우 고통 스럽습니다. – mkoryak
난독 화되지 않은 버전은 읽기가 더 쉬울 것입니다. – fmsf