JavaWeb小項目之綜合搜索工具(一):前端篇

JavaWeb小項目之綜合搜索工具(一):前端篇
JavaWeb小項目之綜合搜索工具(二):爬蟲篇
JavaWeb小項目之綜合搜索工具(三):創建RESTful服務篇

前言:

本項目是寫一個類似于綜合搜索一樣的網頁。
輸入一個關鍵詞,然后把此關鍵詞分發到各個搜索引擎之中獲得結果,
并將其在網頁中顯示出來。
后臺采用了Java語言來實現,本來用nodejs或python語言會很方便,但因為有個Java實訓要做,反正語言只是工具,思路才是重點。
主要是練習JavaWeb,所以前端篇會簡要提一下,代碼的下載放于文末。
Ps:關于數據來源,權當是練手,所以目前這一個版本只采用了“百科名醫”網站的站內搜索結果。

設計:

沒有怎么特別設計,就瞎弄。
由于藍色、綠色之類的安全色看的有點膩,遂用了一點少女心的漸變色。
配色丑不丑的話,個人主觀性太強,我也是瞎設計,改了好幾次,也就這樣了。如果覺得難看可以自己改。

如果自己不會設計漸變,那么去哪找好看的漸變色?
附上一家提供180種漸變配色靈感的網站:
https://webgradients.com/

我用的是這個

html{
    background-image: linear-gradient(-20deg, #f794a4 0%, #fdd6bd 100%);
}

然后最終成品的效果圖如下:

前端頁面效果圖.png
搜索.png

如何實現

思路:

  1. 關于頁面定位也挺簡單,普通的div+css定位就能大致實現。為了方便,現在還沒有加入響應式設計。
  2. 對后臺數據的請求使用AJAX來實現,這里減少工作量,直接上JQuery框架
  3. Loading動畫用CSS3來做

我說一下碰到的坑:

1.input后面的按鈕會出現2px的上下偏差

input后面的按鈕有明顯的偏差.png

原因:這是由于默認的CSS屬性box-sizing:border-box;導致的
解決方法:

.btn_search{
    /*消除input后面按鈕的偏差*/
    vertical-align: top;
}

網上也有其他的解決方案,貼另外一個:
http://www.cnblogs.com/ruanxh123/p/5658868.html

2.漸變背景色不能完全填充整個網頁,當結果很少的時候,頁面會出現空白,我為顯示結果的div添加的height:100%并沒有起到作用。

div下方的空白.png

原因:為子類設置了的height:100%,必須也要為父類添加該屬性。
解決方案:

html,body{
  /*
  此處不用height:100%是因為內容很少的話,大小只會根據子類來撐開,仍有空白 
  */
  min-height:100%;
}

3.Loading 動畫的制作,可以參考網上的博客:
http://www.cnblogs.com/jr1993/p/4622039.html

How to Use:
先把Loading動畫弄出來,為其設置display:none;,使之隱藏;
在Ajax beforeSend事件中更改display:block屬性使其顯示出來;
最后在success事件完成之后再隱藏掉

ps:
至于為什么不用Js生成,畢竟生成結果使用Js生成div的,能少生成一個是一個,資源盡量能省就省。而且修改div的結構也很麻煩。


前后端交互部分

這里是溝通前后端的橋梁與媒介,重點寫一下:

1.事件監聽

監聽Search按鈕的點擊事件,以及監聽Input輸入框有變化的時候,觸發SendAjax

    //按鈕,搜索框的事件監聽
    $("#btn_search").click(function(){
        sendAjax();
    });

    $("#input_search").on("input",function(){
        //監聽input的值是否產生變化
        //如果是使用了輸入法,input的值會出現一個空格,會觸發一次
        //所以要在sendAjax()中加入檢查
        sendAjax();
    });

2.sendAjax()

    function sendAjax(){

        search_text=$("#input_search").val();
        
        //檢查是否輸入搜索內容
        //如果是使用了輸入法,input的值會出現一個空格,會觸發一次
        if(search_text==""||search_text==" "){

            console.log("enter value is null");

        }else{
            $.ajax({
                type:"GET",
                dataType:"json",
                // 地址填上服務器的IP
                url:"http://localhost:8080/api/search/getArticle/"+search_text,
                beforeSend:function(){
                    OpenAlertInfo(false);   //關閉錯誤提示
                    rmAlertNotFound();      //關閉上次未找到結果的提示
                    addLoadingAnim();       //加載Loading動畫
                },
                success:function(data){
                    // console.log(data);

                    //////////////////////////
                    // 為了讓結果更快顯示,先添加后執行其他任務 //
                    //////////////////////////
                    
                    addResult_item(data);   //添加搜索結果到頁面
                    rmLoadingAnim();        //移除Loading動畫   
                    CheckHasResult();       //對結果檢查,沒有則顯示“未找到結果”的提示

                },
                error:function(XMLHttpRequest, textStatus, errorThrown){
                    // 請求沒有成功的處理
                    rmLoadingAnim();        //移除Loading動畫
                    OpenAlertInfo(true);    //顯示未連接到服務器的錯誤提示
                }
            });
        }
    }

3.解析服務器返回來的JSON data數據

    function addResult_item(data) {
        //添加動畫效果,使得搜索框上移,出現分割線
        moveSearchUp();
        $(".divider").addClass("Anim_DownSlideUp");

        //在顯示新的結果之前,清空上次搜索結果
        $(".result_group").empty();

        // 對JSON數據進行遍歷解析
        var all_datas_JSON=data;

        for(var bwk in all_datas_JSON){

            // console.log(all_datas_JSON[bwk]);        //bwk是三個對象(baike_datas...) 的名字(string)

            for(var element_i in all_datas_JSON[bwk]){              //element_i是bwk對象中元素的名字

                // console.log(all_datas_JSON[bwk][element_i]);         //返回一個Object("id","linkHref","linkText")


                var linkText=all_datas_JSON[bwk][element_i].linkText;   //文章名稱
                var linkHref=all_datas_JSON[bwk][element_i].linkHref;   //文章鏈接
                var summary=all_datas_JSON[bwk][element_i].summary;     //文章摘要

                // 用Js動態生成結果,DOM的創建操作
                $(".result_group").append(["<div class=\"result_item\">",
                "           <div class=\"item_header\">",
                "               <p class=\"item_text\"><a href="+linkHref+">"+linkText+"</a></p>",
                "           </div>",
                "           <div class=\"item_body\">",
                "               <p class=\"item_text\">"+summary+"</p>",
                "           </div>",
                "           <div class=\"item_footer\">",
                "               <p class=\"item_text\"></p>",
                "           </div>",
                "</div>"].join(""));

            }
        }
    };

使用Js來生成HTML DOM的話,手動加雙引號簡直反人類,你可以使用
站長工具-JS/HTML格式化

記得SublimeText也有這么個插件,不過名字我倒是忘了,自己上去找找

大概的坑就這么多。

放上代碼地址:
https://coding.net/u/thinker_er/p/JavaWebDemo_Search_DEMO/git

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,002評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,400評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,136評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,714評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,452評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,818評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,812評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,997評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,552評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,292評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,510評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,721評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,121評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,429評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,235評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,480評論 2 379

推薦閱讀更多精彩內容