먼저 내 질문에 정확하게 말하지 않으면 사과하겠습니다. 전문 용어가 아닌 이상 전문 용어가 잘못되었을 수도 있습니다. 내 코드가 너무 당황하지 않기를 바란다. (자바 스크립트에 래퍼 객체 작성
나는 마우스 롤오버로 이미지를 페이드 인/아웃하는 방법이있다. 나는 이것이 올바른 용어라고 생각한다. 이미지 요소와 몇 가지 필수 속성을 보유 할 수 있지만이를 수행하는 방법을 모르겠습니다. fade()
은 HTML에서 호출되며 많은 추가 설정없이 페이지에 놓을 수 있도록 설계되었습니다 (따라서 새롭게 추가 할 수 있음). 다만 이와 같이, 임의의 HTML에 이미지) 페이딩 : 포인터 멀리 이동할 때
<div id="obj" onmouseover="fade('obj', 1);" onmouseout="fade('obj', 0);">
가 fade(obj, flag)
방법으로 화상을 페이드 setInterval을 시작하고, 간격은 지워지고되고 새로운 SetInterval은 이미지를 페이드 아웃하기 위해 생성됩니다. 불투명 상태를 저장하기 위해 개체에 몇 가지 속성 인 obj.opacity
, obj.upTimer
및 obj.dnTimer
을 추가했습니다.
모든 것이 정상적으로 작동하지만 HTML 요소에 속성을 추가하는 아이디어가 마음에 들지 않습니다. 다른 방법으로 이러한 속성을 덮어 쓰게 될 수 있기 때문입니다. 이상적으로는 래퍼 객체가 있어야한다고 생각하지만, 페이지를로드 할 때 객체를 생성하는 코드를 추가하지 않고도이를 완벽하게 수행하는 방법을 모르겠습니다. 누구든지 어떤 제안이라도 있으면 크게 고맙게 생각합니다.
var DELTA = 0.05;
function fade(id, flag) {
var element = document.getElementById(id);
var setCmd = "newOpacity('" + id + "', " + flag + ")";
if (!element.upTimer) {
element.upTimer = "";
element.dnTimer = "";
}
if (flag) {
clearInterval(element.dnTimer);
element.upTimer = window.setInterval(setCmd, 10);
} else {
clearInterval(element.upTimer);
element.dnTimer = window.setInterval(setCmd, 10);
}
}
function newOpacity(id, flag) {
var element = document.getElementById(id);
if (!element.opacity) {
element.opacity = 0;
element.modifier = DELTA;
}
if (flag) {
clearInterval(element.dnTimer)
element.opacity += element.modifier;
element.modifier += DELTA; // element.modifier increases to speed up fade
if (element.opacity > 100) {
element.opacity = 100;
element.modifier = DELTA;
return;
}
element.opacity = Math.ceil(element.opacity);
} else {
clearInterval(element.upTimer)
element.opacity -= element.modifier;
element.modifier += DELTA; // element.modifier increases to speed up fade
if (element.opacity < 0) {
element.opacity = 0;
element.modifier = DELTA;
return;
}
element.opacity =
Math.floor(element.opacity);
}
setStyle(id);
}
function setStyle(id) {
var opacity = document.getElementById(id).opacity;
with (document.getElementById(id)) {
style.opacity = (opacity/100);
style.MozOpacity = (opacity/100);
style.KhtmlOpacity = (opacity/100);
style.filter = "alpha(opacity=" + opacity + ")";
}
}
감사합니다. Felix에게 감사드립니다. Javascript의 밧줄을 배우기 전까지는 JQuery를 피하는 것이 좋습니다. 많은 도움이됩니다. 비록 Javascript 변수의 범위에서 완전히 신비 스럽습니다. 반환 블록 외부에서'init()'과'fade()'가 보이지 않는 이유를 모르겠습니다./ – SpaceJunk
@SpaceJunk : 제 업데이트를 참조하십시오. 이게 도움이 되길 바란다. 'return {...} '은 실제로는 블록이 아니기 때문에 함수를 볼 수 있습니다. 객체를 정의하기위한 객체 리터럴 표기법입니다. 이것은 동일합니다 :'var obj = {init : function() {...}}; obj;를 돌려 준다. 나는 또한 코드를 약간 변경하고'DELTA'를 즉각적인 함수로 옮겼습니다. 이것은 당신의 코드에서 더 잘 작동 할 것입니다. 더 궁금한 점이 있으면 부탁드립니다. –