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阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容