免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5811 | 回复: 6
打印 上一主题 下一主题

[学习]用XMLHttpRequest+javascript做相册 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-20 00:02 |只看该作者 |倒序浏览
看了 乔楚 很多的回帖跟作品,不由地也被他带动学习javascript的兴趣

看了 乔楚" 图像浏览画册"  自己也想将 XMLHttpRequest结合进去  小弟献丑将代码贴上
望各位高手多多指点, 里面参考了乔楚作品的很多代码



共三个文件
第一个 file1 保存为XNConn.js
   在这里 就不在贴了 http://bbs.chinaunix.net/viewthread.php?tid=670239&extra=page%3D1
第二个 file2 保持为 dir.php

  1. <?php
  2. /*
  3. File name   : dir.php + test.html +XNConn.js
  4. Description : 图像浏览画册
  5. Requirement : HTML+JavaScript+XMLHttpRequest

  6. Copyright(C), ydlhero, 2005/12/19, All Rights Reserved.

  7. Author:ydlhero (ydlhero@hotmail.com)
  8. */
  9. //支持的图形ext
  10. $imgArr[]="gif";
  11. $imgArr[]="jpg";
  12. $imgArr[]="JPG";
  13. $getDir=".".$_POST["dir"];
  14. $getDir=str_replace(".//","./",$getDir);
  15. $getDir=str_replace("//","/",$getDir);
  16. $getDir=str_replace("\\","/",$getDir);
  17. $fileDir=getcwd();
  18. if ($handle = opendir($getDir)) {
  19.         $img="";
  20.         $dir="";
  21.     while (false !== ($file = readdir($handle))) {      
  22.              if(is_dir($getDir.$file)){
  23.                                  if($file!='.' && $file!='..')
  24.                                  $dir.=$file."/";
  25.                          }else{                                         
  26.                                  $extarr=explode('.',$file);
  27.                                  $n=count($extarr)-1;
  28.                                  if(in_array($extarr[$n],$imgArr)){
  29.                                          $img.=$file."/";
  30.                                  }
  31.                          }
  32.     }
  33.         chdir($getDir);
  34.         $nowdir=str_replace($fileDir,'',getcwd());
  35.         chdir("./../");
  36.         $ParentDir=str_replace($fileDir,'',getcwd());
  37.     $ParentDir=str_replace("\\","/",$ParentDir);
  38.         $nowdir=str_replace("\\","/",$nowdir);
  39.     $ParentDir=$ParentDir."/";
  40.         if($ParentDir=='/')$ParentDir='//';//现在所在的父目录
  41.         $nowdir=$nowdir."/";//现在所在目录
  42.     closedir($handle);
  43.         echo $dir.",".$img.','.$nowdir.','.$ParentDir;        //返回 目录文件 次目录的图形文件  现在所在目   父目录
  44. }
  45. ?>
复制代码

第三个 file3 保存为test.html


  1. <html>
  2. <body>
  3. <script type="text/javascript" src="XNConn.js"></script>

  4. <script language='javascript'>
  5. /*
  6. File name   : dir.php + test.html +XNConn.js
  7. Description : 图像浏览画册
  8. Requirement : HTML+JavaScript+XMLHttpRequest

  9. Copyright(C), ydlhero, 2005/12/19, All Rights Reserved.

  10. Author:ydlhero (ydlhero@hotmail.com)
  11. */
  12. /********Opent news windows**************/

  13. var serverGet;//get info form server
  14. var dirGet;//get dir from server /Array
  15. var imgGet;//get img from server /Array
  16. var myConn = new XHConn();//xmlHTTP
  17. // var imgUrl="http://localhost/tiaos/js/"; //server的路径
  18. var imgUrl="http://210.34.160.160/cwd/"; //server的路径
  19. var ImgBaseHref=imgUrl;
  20. var trNum=3;//一页多少行
  21. var tdNum=4;//一行多少张图
  22. var totalNum;
  23. var pageNum;
  24. var nowDir;//现在访问的地址
  25. var i;
  26. function OpenWindow(TheUrl, WinName, WinOpt, objid)//打开新窗口
  27. {
  28. var imgId=document.getElementById('img'+objid);
  29.         if (imgId.name=="")
  30.         {
  31.                 alert("请稍后,"+imgId.alt+"正在下载......");
  32.         }
  33.         if (imgId.name=="")
  34.         {
  35.                 return false;
  36.         }

  37.         winName = "objopenwin";
  38.         imgheight = 400;
  39.         imgwidth =imgheight * imgId.width/imgId.height;
  40.         WinOpt = "width=" + (imgwidth) + ",height=" + (imgheight) + ",outerHeight=0,outerWidth=0,location=no,menubar=no,resizable=no,status=no,screenX="+(window.screen.width-10)+",screenY="+(window.screen.height-10)+",scrollbars=no,titlebar=no,toolbar=no,z-look=yes,alwaysRaised=yes,dependent=yes";
  41.         objopenwin=window.open("about:blank",winName,WinOpt);
  42.    // objopenwin.document.title.title="4";
  43.         //alert( objopenwin.document.title.title);
  44.     objopenwin.document.write("<HTML>");
  45.     objopenwin.document.write("<TITLE>" + imgId.name + "</TITLE>");
  46.     objopenwin.document.write("<BODY leftmargin='0' topmargin='0'>");   
  47.     objopenwin.document.write("<IMG SRC='"+TheUrl+"' border='0' vwidth='"+imgwidth+"' vheight='"+imgheight+"'>");        
  48.     objopenwin.document.write("</BODY>");   
  49.     objopenwin.document.write("</HTML>");   
  50.     objopenwin.document.close();
  51.     itWidth = objopenwin.document.images[0].width;   
  52.     itHeight = objopenwin.document.images[0].height;  
  53.     if (0 && itHeight > imgheight)
  54.     {
  55.         objopenwin.document.images[0].width = imgwidth;
  56.         objopenwin.document.images[0].height = imgheight;
  57.         objopenwin.resizeTo(imgwidth + 10, imgheight + 55);
  58.     }else{
  59.                 objopenwin.resizeTo(itWidth + 10, itHeight + 55);
  60.     }
  61.         objopenwin.document.oncontextmenu = noevent;
  62.         objopenwin.document.onmousedown   = noevent;       
  63.     objopenwin.focus();
  64. }
  65.         document.oncontextmenu = noevent;
  66.         document.onmousedown   = noevent;       
  67.         function noevent()
  68. {
  69.         return true;
  70. }
  71. /***********creat Table**************/
  72. var tbl,tb2, tbody, tr, td, text, i, max,j;
  73. function creatTable(page){
  74. var nums,imgName,tem;
  75. tem="";
  76. tem+="总共"+pageNum+"页 ";
  77.   tbl = document.getElementById("td1");
  78.   if(page>0){
  79.   tbl.removeChild(tbody);//删除 tbody
  80.   }else {
  81.     page++;
  82.   }
  83.   tbl.width = "750";
  84.   for(i=1;i<=pageNum;i++){
  85.      tem= tem+"[<a href='#' onclick='creatTable("+i+")'>"+i+"</a>]" ;
  86.   }
  87.   var divId= document.getElementById("outDiv");
  88.   divId.innerHTML=tem;
  89.   tbody = document.createElement("TBODY");
  90.   tbl.insertBefore(tbody, null);
  91.   for (i=0; i< trNum; i++) {
  92.      tr = document.createElement("TR");
  93.          for(j=0;j<tdNum;j++){
  94.              td = document.createElement("TD");
  95.                  td.align="center";
  96.                  td.height="180";
  97.                  if((i*trNum+j+(page-1)*trNum*tdNum)<totalNum){
  98.                     nums=(i*trNum+j+(page-1)*trNum*tdNum);
  99.                         imgName=imgGet[nums];
  100.                         td.innerHTML="<a href='#' onClick=\"javascript:OpenWindow('"+ImgBaseHref+imgName+"','','',"+nums+") ;return false;\" ><img border='1' src='"+ImgBaseHref+imgName+"' alt='["+imgName+"]' NAME='["+imgName+"]' border='0'  id='img"+nums+"'  width='150'  height='120'></a>";
  101.                 }
  102.                 tr.insertBefore(td, null);
  103.          }
  104.      tbody.insertBefore(tr, null);
  105.   }
  106. }
  107. /******creat dir***"*******/
  108. function getInfo(dir){
  109.   if (!myConn) {alert("XMLHTTP not available. Try a newer/better browser.");}
  110.   var fnWhenDone = function (oXML) {
  111.       serverGet=oXML.responseText;
  112.           var dirInfo="";
  113.           var serArr=serverGet.split(',');
  114.           imgGet=serArr[1].split('/');
  115.           dirGet=serArr[0].split('/');
  116.           for(i=0;i< (dirGet.length-1);i++){
  117.              dirInfo+="  [<a href='#' onClick=\"getInfo('"+dir+dirGet[i]+"/')\">"+dirGet[i]+"</a>]  ";
  118.           }
  119.           if(dirInfo=="")dirInfo="无";
  120.           dirInfo="    子目录:"+dirInfo;
  121.           totalNum=imgGet.length-1;
  122.           pageNum=Math.round(totalNum / (trNum * tdNum)+0.4);
  123.           if(dir=='/'){//第一次进入的时候
  124.                dirInfo="当前目录:[//]"+dirInfo;
  125.                ImgBaseHref = imgUrl+dir.replace(/\/\//gi,"/");
  126.                    creatTable(0);
  127.           }else{
  128.                //alert(dir);
  129.                ImgBaseHref = imgUrl+dir.replace(/\/\//gi,"/");
  130.                   // alert(ImgBaseHref);
  131.                    if(dir=='//'){
  132.                           dirInfo="当前目录:[//]"+dirInfo;
  133.                         }else{
  134.                              if(serArr[2]!=''){
  135.                                  dirInfo="当前目录:["+serArr[2]+"]"+dirInfo;
  136.                                  }else {
  137.                                       dirInfo="当前目录:[//]"+dirInfo;
  138.                              }
  139.                                  if(serArr[3]=='')serArr[3]='//';
  140.                                  dirInfo="上级目录:[<a href='#' onClick=\"getInfo('"+serArr[3]+"')\">"+serArr[3]+"</a>]    "+dirInfo;
  141.                         }
  142.                 creatTable(1);
  143.          }
  144.          var pageDiv=document.getElementById("pageDiv");
  145.          pageDiv.innerHTML=dirInfo;
  146.   }
  147. // dir=dir.replace(/\/\//gi,"/");
  148.   myConn.connect("dir.php", "POST", "dir="+dir, fnWhenDone);
  149. }
  150. </script>
  151. <body valign="center" onLoad="getInfo('/')">
  152. <div id="pageDiv" align="center"></div>
  153. <table width="750" border=0 align="center" id="pTable" name="pTable">
  154. <tr id="pTr" name="pTr">
  155.     <td >
  156.         <table id="td1"></table>
  157.         </td>
  158.         </td>
  159. </tr>
  160. </table>
  161. <div id="outDiv" align="center"></div>
  162. </body>
  163. </html>
复制代码

[ 本帖最后由 ydlhero 于 2005-12-20 00:05 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2005-12-20 00:03 |只看该作者

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
3 [报告]
发表于 2005-12-20 17:07 |只看该作者
网站速度太慢了,没有体会到ajax的好处哦

论坛徽章:
0
4 [报告]
发表于 2005-12-21 08:15 |只看该作者
原帖由 HonestQiao 于 2005-12-20 17:07 发表
网站速度太慢了,没有体会到ajax的好处哦


嗯;学校网络速度不尽人意!
代码也需改进.

论坛徽章:
0
5 [报告]
发表于 2006-01-09 23:32 |只看该作者

回复 1楼 ydlhero 的帖子

serverGet=oXML.responseText;
          var dirInfo="";
          var serArr=serverGet.split(',');
          imgGet=serArr[1].split('/');
          dirGet=serArr[0].split('/');
          for(i=0;i< (dirGet.length-1);i++){
             dirInfo+="  [<a href='#' onClick=\"getInfo('"+dir+dirGet[i]+"/')\">"+dirGet[i]+"</a>]  ";
          }

LZ既然用了这样了个长字符串,为什么不用responseXML呢,那样更方便一些,把一个长的responseText来分成数组这样不太好吧。
不过我还是从你的样例中学到了一些东西的。

论坛徽章:
0
6 [报告]
发表于 2006-01-10 00:35 |只看该作者
very Good

论坛徽章:
0
7 [报告]
发表于 2006-01-10 23:23 |只看该作者
好提议^_^ 偶会改进的
最近在忙考试 很少心思放这边。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP