用ajax实现预览链接可以看到链接的内容
首先先看实现代码
html代码部分
<!DOCTYPEhtml> <html> <head> <title>PreviewingLinks</title> <linkrel="stylesheet"href="script05.css"rel="externalnofollow"> <scriptsrc="script05.js"></script> </head> <body> <h2>AGentleIntroductiontoJavaScript</h2> <ul> <li><ahref="jsintro/2000-08.html"rel="externalnofollow">Augustcolumn</a></li> <li><ahref="jsintro/2000-09.html"rel="externalnofollow">Septembercolumn</a></li> <li><ahref="jsintro/2000-10.html"rel="externalnofollow">Octobercolumn</a></li> <li><ahref="jsintro/2000-11.html"rel="externalnofollow">Novembercolumn</a></li> </ul> <divid="previewWin"></div> </body> </html>
这个CSS设置预览弹出窗口的样式
#previewWin{ background-color:#FF9; width:400px; height:100px; font:.8emarial,helvetica,sans-serif; padding:5px; position:absolute; visibility:hidden; top:10px; left:10px; border:1px#CC0solid; clip:auto; overflow:hidden; } #previewWinh1,#previewWinh2{ font-size:1.0em; }
这个JavaScript进行服务器请求并且显示弹出窗口
window.onload=initAll; varxhr=false; varxPos,yPos; functioninitAll(){ varallLinks=document.getElementsByTagName("a"); for(vari=0;i<allLinks.length;i++){ allLinks[i].onmouseover=getPreview; } } functiongetPreview(evt){ if(evt){ varurl=evt.target; } else{ evt=window.event; varurl=evt.srcElement; } xPos=parseInt(evt.clientX); yPos=parseInt(evt.clientY); if(window.XMLHttpRequest){ xhr=newXMLHttpRequest(); } else{ if(window.ActiveXObject){ try{ xhr=newActiveXObject("Microsoft.XMLHTTP"); } catch(e){} } } if(xhr){ xhr.onreadystatechange=showContents; xhr.open("GET",url,true); xhr.send(null); } else{ alert("Sorry,butIcouldn"tcreateanXMLHttpRequest"); } } functionhidePreview(){ document.getElementById("previewWin").style.visibility="hidden"; } functionshowContents(){ varprevWin=document.getElementById("previewWin"); if(xhr.readyState==4){ if(xhr.status==200){ prevWin.innerHTML=xhr.responseText; } else{ prevWin.innerHTML="Therewasaproblemwiththerequest"+xhr.status; } prevWin.style.top=yPos+2+"px"; prevWin.style.left=xPos+2+"px"; prevWin.style.visibility="visible"; prevWin.onmouseout=hidePreview; } }
分析:
1.
varallLinks=document.getElementsByTagName("a"); for(vari=0;i<allLinks.length;i++){ allLinks[i].onmouseover=getPreview; }
这是initAll()函数的内容,它遍历页面上的所有链接,并且在每个链接上添加onmouseover事件
处理程序。这个事件处理程序将(你下面将看到的)读取目标页面并且向(可能的)访问者显示预览。
2.
if(evt){ varurl=evt.target; } else{ evt=window.event; varurl=evt.srcElement; } xPos=parseInt(evt.clientX); yPos=parseInt(evt.clientY);
在getPreview()中,首先需要查明要读取哪个文件,这就要查看事件的属性。根据访问者使用的
浏览器不同,URL保存在evt.target或window.event.srcElement中。获得了URL之后,就可以获得
鼠标的x和y位置供以后使用。
3.
functionhidePreview(){ document.getElementById("previewWin").style.visibility="hidden"; }
如果打算显示预览,将需要再次隐藏它,对吗?hidePreview()函数的作用是将预览窗口的可见性
重新设置为隐藏。
4.
varprevWin=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="Therewasaproblemwiththerequest"+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。
相关文章
- ajax跨域解除方案,关于Ajax跨域问题及解决方案详析「建议收藏」
- 什么是Ajax以及ajax请求的步骤[通俗易懂]
- java实现ajax_Ajax&Java
- Ajax教程_ajax是服务器端动态网页技术
- golang源码分析:grpc 链接池(6)超时的设置和传递
- 【gcc编译优化系列】结合真实的场景案例,如何获取gcc默认的链接脚本
- js ajax 设置代理ip(vue Ajax 设置 代理ip)
- Linux动态库链接技术:精确实现利用(linux动态库的链接)
- PHP连接MSSQL库的方法(php链接mssql)
- Oracle12c与百度云:无缝链接的完美组合(oracle12c百度云)
- 何时手机redis无法获取链接(手机redis无法获取链接)
- 学习Ajax基于MySQL的实例实践(ajax实例 mysql)
- 探究Ajax的MySQL驱动原理(ajax原理 mysql)
- 使用Ajax和Mysql实现简单点赞功能(ajax mysql点赞)
- MySQL与Ajax 精彩无穷的开发实现(ajax与mysql)
- AJAX技术简化Oracle数据库的访问处理(ajax连接oracle)
- Ajax实现对Oracle的异步操作(ajax操作oracle)
- 连接Redis被无情拒绝无法链接远程Redis(无法链接远程redis)
- 哨兵建立新的链接Redis协调机制(哨兵 链接 redis)
- Oracle优化减少数据库连接时长(oracle优化链接时长)
- 妙用Redis高效设定链接密码(redis设定链接密码)
- phpMyAdmin链接MySql错误个人解决方案
- jquery触发a链接点击事件解决方案