最近忙着做JS,在JS里头有用到鼠标的一些事件时,通常我都是把鼠标事件包含在一个JS文件中调用
<script type="text/javascript" src="js/sb_cd.js"></script>
在鼠标事件中若包含如下鼠标的特效,就会导致事件触发:js/sb_cd.js
// JavaScript Document
var sb_cd_a_Colour='fff000';
var sb_cd_b_Colour='00ff00';
var sb_cd_c_Colour='ff00ff';
var sb_cd_Size=120;
var sb_cd_YDummy=new Array(),sb_cd_XDummy=new Array(),sb_cd_xpos=0,sb_cd_ypos=0,sb_cd_ThisStep=0;sb_cd_step=0.6;
if (document.layers){
window.captureEvents(Event.MOUSEMOVE);
function sb_cd_nsMouse(evnt){
sb_cd_xpos = window.pageYOffset+evnt.pageX+6;
sb_cd_ypos = window.pageYOffset+evnt.pageY+16;
}
window.onMouseMove = sb_cd_nsMouse;
}
else if (document.all)
{
function sb_cd_ieMouse(){
sb_cd_xpos = document.body.scrollLeft+event.x+6;
sb_cd_ypos = document.body.scrollTop+event.y+16;
}
document.onmousemove = sb_cd_ieMouse;
}
function sb_cd_swirl(){
for (i = 0; i < 3; i++)
{
sb_cd_YDummy[i]=sb_cd_ypos+sb_cd_Size*Math.sin((1*Math.sin((sb_cd_ThisStep)/10))+i*2)*Math.sin((sb_cd_ThisStep)/4);
sb_cd_XDummy[i]=sb_cd_xpos+sb_cd_Size*Math.cos((1*Math.sin((sb_cd_ThisStep)/10))+i*2)*Math.sin((sb_cd_ThisStep)/4);
}
sb_cd_ThisStep+=sb_cd_step;
setTimeout('sb_cd_swirl()',10);
}
var sb_cd_amount=10;
if (document.layers){
for (i = 0; i < sb_cd_amount; i++)
{
document.write('<layer name=sb_cd_nsa'+i+' top=0 left=0 width='+i/2+' height='+i/2+' bgcolor='+sb_cd_a_Colour+'></layer>');
document.write('<layer name=sb_cd_nsb'+i+' top=0 left=0 width='+i/2+' height='+i/2+' bgcolor='+sb_cd_b_Colour+'></layer>');
document.write('<layer name=sb_cd_nsc'+i+' top=0 left=0 width='+i/2+' height='+i/2+' bgcolor='+sb_cd_c_Colour+'></layer>');
}
}
else if (document.all){
document.write('<div id="sb_cd_ODiv" style="position:absolute;top:0px;left:0px">'
+'<div id="sb_cd_IDiv" style="position:relative">');
for (i = 0; i < sb_cd_amount; i++)
{
document.write('<div id=sb_cd_x style="position:absolute;top:0px;left:0px;width:'+i/2+';height:'+i/2+';background:'+sb_cd_a_Colour+';font-size:'+i/2+'"></div>');
document.write('<div id=sb_cd_y style="position:absolute;top:0px;left:0px;width:'+i/2+';height:'+i/2+';background:'+sb_cd_b_Colour+';font-size:'+i/2+'"></div>');
document.write('<div id=sb_cd_z style="position:absolute;top:0px;left:0px;width:'+i/2+';height:'+i/2+';background:'+sb_cd_c_Colour+';font-size:'+i/2+'"></div>');
}
document.write('</div></div>');
}
function sb_cd_prepos(){
var sb_cd_ntscp=document.layers;
var sb_cd_msie=document.all;
if (document.layers){
for (i = 0; i < sb_cd_amount; i++)
{
if (i < sb_cd_amount-1)
{
sb_cd_ntscp['sb_cd_nsa'+i].top=sb_cd_ntscp['sb_cd_nsa'+(i+1)].top;sb_cd_ntscp['sb_cd_nsa'+i].left=sb_cd_ntscp['sb_cd_nsa'+(i+1)].left;
sb_cd_ntscp['sb_cd_nsb'+i].top=sb_cd_ntscp['sb_cd_nsb'+(i+1)].top;sb_cd_ntscp['sb_cd_nsb'+i].left=sb_cd_ntscp['sb_cd_nsb'+(i+1)].left;
sb_cd_ntscp['sb_cd_nsc'+i].top=sb_cd_ntscp['sb_cd_nsc'+(i+1)].top;sb_cd_ntscp['sb_cd_nsc'+i].left=sb_cd_ntscp['sb_cd_nsc'+(i+1)].left;
}
else
{
sb_cd_ntscp['sb_cd_nsa'+i].top=sb_cd_YDummy[0];sb_cd_ntscp['sb_cd_nsa'+i].left=sb_cd_XDummy[0];
sb_cd_ntscp['sb_cd_nsb'+i].top=sb_cd_YDummy[1];sb_cd_ntscp['sb_cd_nsb'+i].left=sb_cd_XDummy[1];
sb_cd_ntscp['sb_cd_nsc'+i].top=sb_cd_YDummy[2];sb_cd_ntscp['sb_cd_nsc'+i].left=sb_cd_XDummy[2];
}
}
}
else if (document.all){
for (i = 0; i < sb_cd_amount; i++)
{
if (i < sb_cd_amount-1)
{
sb_cd_msie.sb_cd_x[i].style.top=sb_cd_msie.sb_cd_x[i+1].style.top;sb_cd_msie.sb_cd_x[i].style.left=sb_cd_msie.sb_cd_x[i+1].style.left;
sb_cd_msie.sb_cd_y[i].style.top=sb_cd_msie.sb_cd_y[i+1].style.top;sb_cd_msie.sb_cd_y[i].style.left=sb_cd_msie.sb_cd_y[i+1].style.left;
sb_cd_msie.sb_cd_z[i].style.top=sb_cd_msie.sb_cd_z[i+1].style.top;sb_cd_msie.sb_cd_z[i].style.left=sb_cd_msie.sb_cd_z[i+1].style.left;
}
else
{
sb_cd_msie.sb_cd_x[i].style.top=sb_cd_YDummy[0];sb_cd_msie.sb_cd_x[i].style.left=sb_cd_XDummy[0];
sb_cd_msie.sb_cd_y[i].style.top=sb_cd_YDummy[1];sb_cd_msie.sb_cd_y[i].style.left=sb_cd_XDummy[1];
sb_cd_msie.sb_cd_z[i].style.top=sb_cd_YDummy[2];sb_cd_msie.sb_cd_z[i].style.left=sb_cd_XDummy[2];
}
}
}
setTimeout("sb_cd_prepos()",10);
}
function sb_cd_Start(){
sb_cd_swirl(),sb_cd_prepos()
}
window.onload=sb_cd_Start;
其中页面的代码如下:
当打开DW时,通常会先有这样预先定义好的代码,先看看第一行
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>
<body>
<script type="text/javascript" src="js/sb_cd.js"></script>
</body>
</html>
问题找了很久,都不知道是什么地方的问题。后来才发现是DW生成的代码第一句
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
使得这个鼠标事件不运行。,原来这里声明了后面的鼠标事件必须遵循这个DTD文档 的规则。
而不事件中的一些定义没有遵循,所以这个鼠标事件即不触发,也不报错。
官方是这样定义 DOCTYPE HTML PUBLIC 的
!DOCTYPE
指定了 HTML 文档遵循的文档类型定义(DTD)。
Microsoft® Internet Explorer 6 的新增内容
你可使用此声明将 Internet Explorer 6 及以后版本切换到标准兼容模式下。
语法
| HTML |
顶级元素 可用性 "注册//组织//类型 标签//定义 语言""URL" |
可能值
| 顶级元素 |
指定 DTD 中声明的顶级元素类型。这与声明的 SGML 文档类型相对应。
|
| 可用性 |
指定正式公开标识符(FPI)是可公开访问的对象还是系统资源。
| PUBLIC |
默认。可公开访问的对象。 |
| SYSTEM |
系统资源,如本地文件或 URL。 | |
| 注册 |
指定组织是否由国际标准化组织(ISO)注册。
| + |
默认。组织名称已注册。 |
| - |
组织名称未注册。Internet 工程任务组(IETF)和万维网协会(W3C)并非注册的 ISO 组织。 | |
| 组织 |
指定表明负责由 !DOCTYPE 声明引用的 DTD 的创建和维护的团体或组织的名称,即 OwnderID。
|
| 类型 |
指定公开文本类,即所引用的对象类型。
|
| 标签 |
指定公开文本描述,即对所引用的公开文本的唯一描述性名称。后面可附带版本号。
|
| 定义 |
指定文档类型定义。
| Frameset |
框架集文档。 |
| Strict |
排除所有 W3C 专家希望逐步淘汰的代表性属性和元素,因为样式表已经很完善了。 |
| Transitional |
包含除 frameSet 元素的全部内容。 | |
| 语言 |
指定公开文本语言,即用于创建所引用对象的自然语言编码系统。该语言定义已编写为 ISO 639 语言代码(大写两个字母)。
|
| URL |
指定所引用对象的位置。 |
注释
此声明必须出现在文档的起始处,出现在 html 标签之前。
!DOCTYPE 元素不需要关闭标签。
此元素在 Microsoft® Internet Explorer 3.0 的 HTML 中可用。
你可使用此声明在 Internet Explorer 6 及以后版本中切换为严格的标准兼容模式。若想打开此开关,请在你的文档顶部包含 !DOCTYPE 声明,在声明中指定合法的标签,在某些情况下,还需要指定定义和/或 URL。下面的表格列出了标准兼容模式的开关情况。
| DOCTYPE |
出现 URL |
未出现 URL |
| 未出现 DOCTYPE |
关 |
关 |
| HTML (无版本) |
关 |
关 |
| HTML 2.0 |
关 |
关 |
| HTML 3.0 |
关 |
关 |
| HTML 4.0 |
开 |
开 |
| HTML 4.0 Frameset |
开 |
关 |
| HTML 4.0 Transitional |
开 |
关 |
| HTML 4.0 Strict |
开 |
开 |
| XHTML |
开 |
开 |
| XML |
开 |
开 |
| 无法识别的 DOCTYPE |
开 |
开 |
注意 在标准兼容模式下,不能保证与其它版本的 Internet Explorer 保持兼容。当打开标准兼容模式时,文档的渲染行为也许与将来版本的 Internet Explorer 不同。若内容本来就是固定的(如刻录在 CD 上),则不应该使用此模式。
示例
下面的例子演示了如何使用 !DOCTYPE 声明指定文档遵从的 DTD,并将 Internet Explorer 6 及更高版本切换到标准兼容模式。
下面例子中的声明都指定了遵从 HTML 4.0 DTD。第二种声明指定了“Strict”。第一种声明没有指定。这两种声明都将会把 Internet Explorer 6 及以后版本切换到标准兼容模式。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Strict//EN">
下面例子中的声明都指定了遵从“Transitional”HTML 4.0 DTD。第二种声明指定了 DTD 的 URL。第一种声明没有指定。第二种声明将会把 Internet Explorer 6 及以后版本切换到标准兼容模式。第一种声明不会。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
标准信息