【发布时间】:2011-02-02 19:25:52
【问题描述】:
首先,如果我的问题措辞不正确,请允许我道歉 - 我不是专业的编码员,所以我的术语可能很奇怪。我希望我的代码不会太尴尬:(
我有一个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 + ")";
}
}
【问题讨论】:
标签: javascript methods correctness