下面是《javascript DOM编程艺术》一书10.1节的代码:
HTML:
<p id="message">Whee!</p>
<p id="message2">Whoa!</p>
js:
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
oldonload();
func();
}
}
} function moveElement(elementID,final_x,final_y,interval) {
if (!document.getElementById) return false;
if (!document.getElementById(elementID)) return false;
var elem = document.getElementById(elementID);
var xpos = parseInt(elem.style.left);
var ypos = parseInt(elem.style.top);
if (xpos == final_x && ypos == final_y) {
return true;
}
if (xpos < final_x) {
xpos++;
}
if (xpos > final_x) {
xpos--;
}
if (ypos < final_y) {
ypos++;
}
if (ypos > final_y) {
ypos--;
}
elem.style.left = xpos + "px";
elem.style.top = ypos + "px";
var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
movement = setTimeout(repeat,interval);
}function positionMessage() {
if (!document.getElementById) return false;
if (!document.getElementById("message")) return false;
var elem = document.getElementById("message");
elem.style.position = "absolute";
elem.style.left = "50px";
elem.style.top = "100px";
moveElement("message",125,25,20);
if (!document.getElementById("message2")) return false;
var elem = document.getElementById("message2");
elem.style.position = "absolute";
elem.style.left = "50px";
elem.style.top = "50px";
moveElement("message2",125,75,20);
}
addLoadEvent(positionMessage);我有以下三个问题需要请教:
①下面这段代码书中是这样解释的:第一次测试是否相等,我们需要知道变量xpos和ypos的值是否等于目的地那里的“左”位置和“上位置”,如果是,则退出这个函数。
我的理解:退出函数那不应该是 return false吗?这里怎么是return true呢?这段代码哪位朋友还能给个更浅显些的解释吗?
if (xpos == 200 && ypos == 100) {
return true;
}
②下面的这段代码应该怎么解释,变量怎么还加引号了?而且第一个变量还是两个引号,+elementID+表示什么呀?这种表示变量的方法改如何称呼?请推荐些相关资料给我。
var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
③函数positionMessage中先后定义了两个相同的变量名:elem,这样不违反js的什么语法规则吗?这两个定义js是如何解析执行的?
HTML:
<p id="message">Whee!</p>
<p id="message2">Whoa!</p>
js:
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
oldonload();
func();
}
}
} function moveElement(elementID,final_x,final_y,interval) {
if (!document.getElementById) return false;
if (!document.getElementById(elementID)) return false;
var elem = document.getElementById(elementID);
var xpos = parseInt(elem.style.left);
var ypos = parseInt(elem.style.top);
if (xpos == final_x && ypos == final_y) {
return true;
}
if (xpos < final_x) {
xpos++;
}
if (xpos > final_x) {
xpos--;
}
if (ypos < final_y) {
ypos++;
}
if (ypos > final_y) {
ypos--;
}
elem.style.left = xpos + "px";
elem.style.top = ypos + "px";
var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
movement = setTimeout(repeat,interval);
}function positionMessage() {
if (!document.getElementById) return false;
if (!document.getElementById("message")) return false;
var elem = document.getElementById("message");
elem.style.position = "absolute";
elem.style.left = "50px";
elem.style.top = "100px";
moveElement("message",125,25,20);
if (!document.getElementById("message2")) return false;
var elem = document.getElementById("message2");
elem.style.position = "absolute";
elem.style.left = "50px";
elem.style.top = "50px";
moveElement("message2",125,75,20);
}
addLoadEvent(positionMessage);我有以下三个问题需要请教:
①下面这段代码书中是这样解释的:第一次测试是否相等,我们需要知道变量xpos和ypos的值是否等于目的地那里的“左”位置和“上位置”,如果是,则退出这个函数。
我的理解:退出函数那不应该是 return false吗?这里怎么是return true呢?这段代码哪位朋友还能给个更浅显些的解释吗?
if (xpos == 200 && ypos == 100) {
return true;
}
②下面的这段代码应该怎么解释,变量怎么还加引号了?而且第一个变量还是两个引号,+elementID+表示什么呀?这种表示变量的方法改如何称呼?请推荐些相关资料给我。
var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
③函数positionMessage中先后定义了两个相同的变量名:elem,这样不违反js的什么语法规则吗?这两个定义js是如何解析执行的?
2、var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
这说明 repeat是一个字符串 ,setTimeout函数接收的两个参数 ,一个是字符串,一个是以毫秒为单位的时间段。。
var str = "alert('x')";
setTimeout(str,1000); 就样就是一秒后执行alert('x')。上面这个也是一样的道理
3、javascript,跟 java,c#不一样,重定义变不会出错,最多只是赋值,第二句其实就是
elem = document.getElementById("message2");
javascript DOM编程艺术那本书,前面偏简单,后面偏难。前面看看则已,后面尤其你问问题的这块,难,好多代码没有注释。
不过现在貌似出第二版了。
我就是看的第二版,这部分基本没变。
加了html5和jquery的部分。