Ajaxload動態加載動畫生成工具的實現(ajaxload的本地移植)

前言

前段時間看到一個國外的網站,在線生成ajax loading動畫。覺得很實用,於是動起了移植到自己網站的念頭(一直以來的習慣,看到好的工具總想着移植到本地好好研究)。根據以往移植的經驗最終把 這個工具移植到自己網站上了,生成圖片的核心還是用了原來網站的接口,所以這個功能的實現完全依賴於原網站,生成和下載圖片的速度取決於網速,由於是國外 的網站,功能並不穩定。下面介紹下我移植的過程已經遇到的問題。

1.把原網站的代碼本地化

這一步比較簡單,不過有點麻煩,相關的圖片,css,js,html文件保存在本地。

2.實現生成圖片的功能

這裏遇到了第一個問題,網站生成的圖片保存在根據顏色值生成的途徑上,而這些圖片有防盜鏈設置,不 允許外來網站引用。嘗試過寫程序把網站上的所有圖片按原目錄下載到本地,但是圖片太多,放棄了這個思路。

最後採取的辦法是通過僞造來源訪問原網站的圖片,獲取圖片數據,並直接輸出在頁面。

下面是實現的代碼

  1. $file=$_REQUEST['file'];

  2. $url = ’http://www.ajaxload.info/’.$file;

  3. $ch = curl_init();

  4. curl_setopt($ch, CURLOPT_URL, $url);

  5. curl_setopt ($ch, CURLOPT_HEADER,0);

  6. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

  7. curl_setopt ($ch, CURLOPT_REFERER, “http://www.ajaxload.info”);

  8. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);


  9. $chData = curl_exec($ch);

  10. if (curl_errno($ch)) {

  11. echo ’Curl error: ’ . curl_error($ch);

  12. }


  13. curl_close($ch);

  14. header(“Content-type:p_w_picpath/gif”);

  15. echo$chData;

注:本人的網站基於BAE建設,與其他服務器的僞造來源有些區別

其他服務器需把

  1. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

替換成

  1. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);

把上述代碼保存爲ajaxload.php文件用下面的代碼

  1. var url = ’http://bloglaotou.duapp.com/ajaxloader.php?file=cache/’+c1+’/'+c2+’/'+c3+’/'+c4+’/'+c5+’/'+c6+’/'+$$(‘type’).value+’-'+trans+’.gif’;

注:http://bloglaotou.duapp.com替換成你自己的ajaxloader.php文件的地址。

替換原網站script.js文件中的

  1. var url = ’cache/’+c1+’/'+c2+’/'+c3+’/'+c4+’/'+c5+’/'+c6+’/'+$(‘type’).value+’-'+trans+’.gif’;

3.下載圖片的實現

同樣的原因,原網站的下載功能移植到本地後也不能用了,實現的方法與生成圖片的方法類似

代碼如下

  1. if(isset($_GET[url])){


  2. $file=$_GET[url];//獲取參數

  3. header(“Content-Type: application/force-download”);

  4. header(“Content-Disposition: p_w_upload; filename=ajax-loading.gif”);//$downname是下載後的文件名

  5. $file=$_REQUEST['url'];

  6. $url = ’http://www.ajaxload.info/’.$file;

  7. $ch = curl_init();

  8. curl_setopt($ch, CURLOPT_URL, $url);

  9. curl_setopt ($ch, CURLOPT_HEADER,0);

  10. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

  11. curl_setopt ($ch, CURLOPT_REFERER, “http://www.ajaxload.info”);

  12. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);


  13. $chData = curl_exec($ch);

  14. if (curl_errno($ch)) {

  15. echo ’Curl error: ’ . curl_error($ch);

  16. }


  17. curl_close($ch);

  18. echo$chData;

  19. exit;//結束程序

  20. }

把上面的代碼保存爲download.php並把原網站script.js文件中的

  1. if(!$(‘downloadit’)) domEl(‘a’,'Download it’,[['id','downloadit'],['href','download.php?img='+url]],$(‘previewinner’));

替換爲

  1. if(!$(‘downloadit’)) domEl(‘a’,'下載’,[['id','downloadit'],['href','http://bloglaotou.duapp.com/download.php?url='+path]],$(‘previewinner’));

注:http://bloglaotou.duapp.com替換成你自己的ajaxloader.php文件的地址。

效果預覽

查看示例

該功能已經集成到網站的小工具裏,點這裏查看

下載地址


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章