用ajax实现预览链接可以看到链接的内容
首先先看实现代码
html代码部分
<!doctype html> <html> <head> <title>previewing links</title> <link rel="stylesheet"href="script05.css" rel="external nofollow" > <script src="script05.js"></script> </head> <body> <h2>a gentle introduction to javascript</h2> <ul> <li><a href="jsintro/2000-08.html" rel="external nofollow" >august column</a></li> <li><a href="jsintro/2000-09.html" rel="external nofollow" >september column</a></li> <li><a href="jsintro/2000-10.html" rel="external nofollow" >october column</a></li> <li><a href="jsintro/2000-11.html" rel="external nofollow" >november column</a></li> </ul> <div id="previewwin"> </div> </body> </html>
这个css设置预览弹出窗口的样式
#previewwin { background-color: #ff9; width: 400px; height: 100px; font: .8em arial, helvetica, sans-serif; padding: 5px; position: absolute; visibility: hidden; top: 10px; left: 10px; border: 1px #cc0 solid; clip: auto; overflow: hidden; } #previewwin h1, #previewwin h2 { font-size: 1.0em; }
这个javascript进行服务器请求并且显示弹出窗口
window.onload = initall; var xhr = false; var xpos, ypos; function initall() { var alllinks = document.getelementsbytagname("a"); for (var i=0; i< alllinks.length; i++) { alllinks[i].onmouseover = getpreview; } } function getpreview(evt) { if (evt) { var url = evt.target; } else { evt = window.event; var url = evt.srcelement; } xpos = parseint(evt.clientx); ypos = parseint(evt.clienty); if (window.xmlhttprequest) { xhr = new xmlhttprequest(); } else { if (window.activexobject) { try { xhr = new activexobject("microsoft.xmlhttp"); } catch (e) { } } } if (xhr) { xhr.onreadystatechange = showcontents; xhr.open("get", url, true); xhr.send(null); } else { alert("sorry, but i couldn't create an xmlhttprequest"); } } function hidepreview() { document.getelementbyid("previewwin").style.visibility = "hidden"; } function showcontents() { var prevwin = document.getelementbyid("previewwin"); if (xhr.readystate == 4) { if (xhr.status == 200) { prevwin.innerhtml = xhr.responsetext; } else { prevwin.innerhtml = "there was a problem with the request " + xhr.status; } prevwin.style.top = ypos+2 + "px"; prevwin.style.left = xpos+2 + "px"; prevwin.style.visibility = "visible"; prevwin.onmouseout = hidepreview; } }
分析:
1.
var alllinks = document.getelementsbytagname("a"); for (var i=0; i< alllinks.length;i++) { alllinks[i].onmouseover = getpreview; }
这是initall()函数的内容,它遍历页面上的所有链接,并且在每个链接上添加onmouseover事件
处理程序。这个事件处理程序将(你下面将看到的)读取目标页面并且向(可能的)访问者显示预览。
2.
if (evt) { var url = evt.target; } else { evt = window.event; var url = evt.srcelement; } xpos = parseint(evt.clientx); ypos = parseint(evt.clienty);
在getpreview()中,首先需要查明要读取哪个文件,这就要查看事件的属性。根据访问者使用的
浏览器不同,url保存在evt.target或window.event.srcelement中。获得了url之后,就可以获得
鼠标的x和y位置供以后使用。
3.
function hidepreview() { document.getelementbyid ("previewwin").style.visibility = "hidden"; }
如果打算显示预览,将需要再次隐藏它,对吗?hidepreview()函数的作用是将预览窗口的可见性
重新设置为隐藏。
4.
var prevwin = document.getelementbyid("previewwin");
if (xhr.readystate == 4) {
使用ajax读取文件之后,现在进入了showcontents()函数。我们将previewwin元素存储在prevwin
中以备后用。当xhr.readystate为4时,就该显示预览了。
5.
if (xhr.status == 200) { prevwin.innerhtml = xhr.responsetext; } else { prevwin.innerhtml = "there was a problem with the request " + xhr.status; } prevwin.style.top = ypos+2 + "px"; prevwin.style.left = xpos+2 +"px"; prevwin.style.visibility ="visible"; prevwin.onmouseout = hidepreview;
如果一切正常,那么xhr.status为200,而且我们希望放在prevwin.innerhtml中的数据已经存
在于xhr.responsetext中了。如果出现了问题,就在prevwin.innerhtml中放一个错误消息。
在此之后,需要查明要在哪里显示预览窗口,也就是当前的鼠标x和y坐标。这个窗口是一个弹
出窗口,所以将它放在触发该调用的当前鼠标位置向下和向右一点儿的地方(向下和向右各2像素)。
最后,将prevwin设置为可见,并且让javascript知道,当鼠标离开预览窗口时,应该隐藏prevwin。