首先,如果我的问题措辞不正确,请让我道歉 - 我不是专业的编码器,所以我的术语可能很奇怪。我希望我的代码不是太尴尬:(用Javascript编写包装器对象
我有一个fade()
方法,使用鼠标滚动来淡入淡出图像我想使用包装对象(我认为这是正确的术语),来保存图像元素和一些必需的属性,但我不知道如何完成这一操作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 + ")";
}
}
谢谢菲利克斯,我宁愿避免jQuery,直到我可以学习Javascript的绳索,这将帮助很多。虽然,我现在完全被Javascript变量的范围弄糊涂了。我不明白为什么在返回块之外可以看到`init()`和`fade()`:/ – SpaceJunk 2011-02-04 19:11:04