使用HTML5开发App(四)

TabBar图标修改

接着上篇文章,今天的内容是TabBar图标的修改,和页面跳转


MUI中虽然提供了很多图标但是不能满足我们所有项目需求,那这个时候需要我们自己定义图标,我这里面推荐的是阿里巴巴图片矢量图http://iconfont.cn/

阿里巴巴矢量图

可以在这里面搜索想要的图标,例如:网易新闻第一个图标是‘新闻’,就可以在里面搜索新闻两个字,下面就会出现非常多的图标供你选择,总会有你喜欢的一张。


第一步:选择你喜欢的图标加入购物车里面(这里是免费的)

第二步:存储

WeChat_1457402510.jpeg

第三步:下载到本地

下载到本地解压之后,会将合并后的字体文件及自动生成的css全部下载

第四步:修改css

默认的CSS代码:

@font-face {font-family: "iconfont";
  src: url('iconfont.eot'); /* IE9*/
  src: url('iconfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
  url('iconfont.woff') format('woff'), /* chrome, firefox */
  url('iconfont.ttf') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
  url('iconfont.svg#iconfont') format('svg'); /* iOS 4.1- */
}

.iconfont {
  font-family:"iconfont" !important;
  font-size:16px;
  font-style:normal;
  -webkit-font-smoothing: antialiased;
  -webkit-text-stroke-width: 0.2px;
  -moz-osx-font-smoothing: grayscale;
}
.icon-yuedu:before { content: "\\e600"; }
.icon-wode:before { content: "\\e601"; }
.icon-huati:before { content: "\\e602"; }
.icon-shipin:before { content: "\\e603"; }
.icon-xinwen:before { content: "\\e604"; }

注意:

1:为保证和mui目录结构统一,建议将字体文件放在fonts目录下,这样我们需要修改@font-face下得url属性, src: url('../fonts/iconfont.ttf')
2:只兼容iOS和Android版本的话,我们仅需要ttf格式的字体即可,其它字体可以删除;同时,我们也仅需保留-webkit前缀语法,-moz前缀部分可以删除;
修改之后,代码如下:

@font-face {font-family: "iconfont";
  src: url('../fonts/iconfont.ttf') format('truetype'); /* iOS 4.1- */
}

.iconfont {
  font-family:"iconfont" !important;
  font-size:16px;
  font-style:normal;
  -webkit-font-smoothing: antialiased;
  -webkit-text-stroke-width: 0.2px;
  -moz-osx-font-smoothing: grayscale;
}
.icon-yuedu:before { content: "\\e600"; }
.icon-wode:before { content: "\\e601"; }
.icon-huati:before { content: "\\e602"; }
.icon-shipin:before { content: "\\e603"; }
.icon-xinwen:before { content: "\\e604"; }

第五步:集成mui

将iconfont.css及iconfont.ttf两个文件分别拷贝到mui工程css及fonts目录下,


然后即可在mui中引用刚生成的字体图标代码如下:
引入:

<link rel="stylesheet" type="text/css" href="css/iconfont.css"/>

修改后代:

 <a class="mui-tab-item mui-active">
    <span class="mui-icon iconfont icon-yuedu"></span>
    <span class="mui-tab-label">阅读</span>
</a>

主要代码:将mui默认的icon(如mui-icon-home)替换成 iconfont icon-yuedu,修改后预览效果如下:

图标修改完成,接下来我们来看下页面跳转

页面跳转

有的小伙伴问我数据是怎么来的,我这里是通过工具抓包过来的,如果不会呢可以看下//www.greatytc.com/p/ae1c6f878a63
我们第一步首先是从新闻列表点击之后进入详情页面首先来分析一下接口,新闻列表接口如下,


http://c.m.163.com/nc/article/headline/T1348647853363/30-20.html?from=toutiao&passport=&devId=OPdeGFsVSojY0ILFe6009pLR%2FMsg7TLJv5TjaQQ6Hpjxd%2BaWU4dx4OOCg2vE3noj&size=20&version=5.5.3&spever=false&net=wifi&lat=&lon=&ts=1456985878&sign=oDwq9mBweKUtUuiS%2FPvB015PyTDKHSxuyuVq2076XQB48ErR02zJ6%2FKXOnxX046I&encryption=1&canal=appstore

数据结构:

{
    "T1348647853363": [
        {
            "boardid": "news_shehui7_bbs",
            "clkNum": 0,
            "digest": "她觉得头痛,眼睛胀痛后以为是疲劳,未料是青光眼发作。",
            "docid": "BHK5A78O00011229",
            "downTimes": 0,
            "id": "BHK5A78O00011229",
            "img": "http://img3.cache.netease.com/3g/2016/3/8/201603080554302b80d.jpg",
            "imgsrc": "http://img3.cache.netease.com/3g/2016/3/8/201603080554302b80d.jpg",
            "imgType": 0,
            "interest": "A",
            "lmodify": "2016-03-08 05:51:32",
            "picCount": 0,
            "program": "HY",
            "prompt": "成功为您推荐10条新内容",
            "ptime": "2016-03-08 05:49:59",
            "recReason": "热门文章(养生)",
            "recType": 0,
            "replyCount": 1105,
            "replyid": "BHK5A78O00011229",
            "source": "现代快报",
            "template": "manual",
            "title": "女子连看18集韩剧患病险失明",
            "unlikeReason": [
                "养生/1",
                "标题党/6",
                "来源:现代快报/4",
                "内容重复/6"
            ],
            "upTimes": 0
        },
    ]
}

详情页面接口:

http://c.m.163.com/nc/article/BHK5A78O00011229/full.html

详情页面的接口是要通过新闻列表数据中的id,这个时候我们需要在点击新闻列表的时候跳转详情页面,并且把ID传过去。
这里面有几种做法,最简单的做法就是点击a标签的时候传递过去
以下代码是上篇文章写的:

//用来处理列表数据的函数
        function listDataAnalyze(data){
            
            var arrayObj = data.T1348647853363;
            for(var i = 0; i<arrayObj.length;i++){
                
                finalList = '<li class="mui-table-view-cell mui-media" id="list-cell"><a href="#javascript;"><img class="mui-media-object mui-pull-left" src='+arrayObj[i].img+'><div class="mui-media-body">'+arrayObj[i].title+'<p class="mui-ellipsis">'+arrayObj[i].digest+'</div></a></li>';
                $("#tableView-List").append(finalList);
                
            }
        }

先创建一个详情页面detail.html

创建详情页面

我们要对上面的这些代码进行稍微修改,在a标签中点击,并且把id传过去

//用来处理列表数据的函数
        function listDataAnalyze(data){
            
            var arrayObj = data.T1348647853363;
            for(var i = 0; i<arrayObj.length;i++){
                
                finalList = '<li class="mui-table-view-cell mui-media" id="list-cell"><a href="detail.html?'+arrayObj[i].id+'"><img class="mui-media-object mui-pull-left" src='+arrayObj[i].img+'><div class="mui-media-body">'+arrayObj[i].title+'<p class="mui-ellipsis">'+arrayObj[i].digest+'</div></a></li>';
                $("#tableView-List").append(finalList);
                
            }
        }

在detail.html详情页面中,首先要获取ID,然后进行网络请求
第一步:获取ID

 <script type="text/javascript" charset="UTF-8"> 
    
        mui.init();
        mui.plusReady(function(){
            var url_id = plus.webview.currentWebview().getURL().split('?')[1];
                
        })
      
    </script>

第二步:拼接详情页面接口

 <script type="text/javascript" charset="UTF-8"> 
    
        mui.init();
        mui.plusReady(function(){
            var url_id = plus.webview.currentWebview().getURL().split('?')[1];
            var url = 'http://c.m.163.com/nc/article/'+url_id+'/full.html';
            console.log(url);
        })
     
    </script>

第三步:网络请求,从网络获取数据并且解析

 <script type="text/javascript" charset="UTF-8"> 
    
        mui.init();
        mui.plusReady(function(){
            var url_id = plus.webview.currentWebview().getURL().split('?')[1];
            var url = 'http://c.m.163.com/nc/article/'+url_id+'/full.html';
            console.log(url);
            mui.ajax(url,{
                dataType:'json',
                type:'get',
                timeout:10000,
                success:function(data){
                    dataAnalyze(data,url_id);
                },
                error:function(){
                    console.log("返回数据失败");
                }
            })
        })
        //数据解析的函数
        function dataAnalyze(data,url_id){
            console.log(data[url_id]);
        }
    </script>

看详情页面的数据结构:

{
    "BHI2PG0K00031H2L": {
        "apps": [
        ],
        "boboList": [
        ],
        "body": "<!--IMG#0--><!--IMG#1--><p>  <strong>网易娱乐3月7日报道</strong>据“关爱八卦协会”近日爆料,许久未对公众露面的张艺谋现身北京某餐厅,探班其女儿张末新电影拍摄,而同在现场的还有该电影的女主角、及刚刚曝光新恋情的倪妮。</p><p>  网友当日爆料称,自己是在北京某餐厅打工,前段时间正巧遇见倪妮来餐厅取景,并惊喜看到张艺谋前来探班,听现场工作人员说该戏的导演正是张艺谋的女儿。爆料照片虽不清晰,但依然能分辨出确实是张艺谋和倪妮。</p>",
        "digest": "",
        "dkeys": "张艺谋",
        "docid": "BHI2PG0K00031H2L",
        "ec": "金舒_NK4322",
        "hasNext": false,
        "img": [
            {
                "alt": "张艺谋",
                "pixel": "550*412",
                "ref": "<!--IMG#0-->",
                "src": "http://img5.cache.netease.com/ent/2016/3/7/20160307102654078a5.jpg"
            },
            {
                "alt": "倪妮",
                "pixel": "550*733",
                "ref": "<!--IMG#1-->",
                "src": "http://img2.cache.netease.com/ent/2016/3/7/201603071026525bb4e.jpg"
            }
        ],
        "keyword_search": [
            {
                "word": "倪妮"
            },
            {
                "word": "张艺谋"
            },
            {
                "word": "探班"
            }
        ],
        "link": [
        ],
        "picnews": true,
        "ptime": "2016-03-07 10:27:25",
        "relative_sys": [
            {
                "href": "",
                "id": "BG17ENH4000300B1",
                "imgsrc": "http://img1.cache.netease.com/ent/2016/2/17/20160217110639e126e.png",
                "ptime": "2016-02-17 11:06:08",
                "source": "网易娱乐",
                "title": "倪妮霍建华演张艺谋女儿处女作 未见老谋子身影",
                "type": "doc"
            },
            {
                "href": "",
                "id": "BEO0QE2U9001QE2V",
                "imgsrc": "http://easyread.ph.126.net/kmj1_0qBmDqrvzaQrRHYiw==/7916499113153184879.jpg",
                "ptime": "2016-02-01 09:59:31",
                "source": "粉丝网",
                "title": "“谋女郎”首证传承 倪妮接演28岁未成年",
                "type": "doc"
            },
            {
                "href": "",
                "id": "BHH4MDM99001MDMA",
                "imgsrc": "http://easyread.ph.126.net/_8C5XqGQ0eGvK50mlulTuw==/7916603566757890979.jpg",
                "ptime": "2016-03-07 00:31:00",
                "source": "新民网",
                "title": "曝倪妮井柏然同居 两人曾合作电影《等风来》",
                "type": "doc"
            }
        ],
        "replyBoard": "ent2_bbs",
        "replyCount": 227,
        "source": "网易娱乐",
        "template": "normal1",
        "threadAgainst": 0,
        "threadVote": 1,
        "tid": "",
        "title": "张艺谋现身片场探班女儿新作",
        "topiclist": [
            {
                "alias": "尖峰娱论、八卦聚焦",
                "cid": "C1378977941637",
                "ename": "mingxing",
                "hasCover": false,
                "subnum": "超过1000万",
                "tid": "T1348648624173",
                "tname": "网易明星"
            },
            {
                "alias": "每日给你推荐好看的电影",
                "cid": "C1378977941637",
                "ename": "dianyingtuijian",
                "hasCover": false,
                "subnum": "57.4万",
                "tid": "T1401265158369",
                "tname": "网易电影"
            }
        ],
        "topiclist_news": [
            {
                "alias": "MOVIE",
                "cid": "C1348648351901",
                "ename": "dianying",
                "hasCover": false,
                "subnum": "258万",
                "tid": "T1348648650048",
                "tname": "影视"
            },
            {
                "alias": "Entertainment",
                "cid": "C1348648351901",
                "ename": "yule",
                "hasCover": false,
                "subnum": "超过1000万",
                "tid": "T1348648517839",
                "tname": "娱乐"
            }
        ],
        "users": [
        ],
        "voicecomment": "off",
        "votes": [
        ],
        "ydbaike": [
        ]
    }
}

为了方便大家查看代码,我这里面不会写复杂的代码布局,在这里就做简单的布局进行展示,在这里面要注意的就是数据中有一个字段body它里面的标签是后台直接写好返回过来的,所以说你只需要动态插入到对应的容器( <div class="mui-content" id="container">
</div>)里面就可以了。
HTML代码

<body>
    <header class="mui-bar mui-bar-nav">
        <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
        <span id="replyCount">0跟帖</span>
    </header>
    <div class="mui-content" id="container">
    </div>
    
</body>

在数据解析中动态添加的标签和内容

//数据解析
        function dataAnalyze(data,url_id){
            //跟帖数量
            console.log(data[url_id].replyCount);
            $("#replyCount").html(data[url_id].replyCount+"跟帖");
            //抬头
            $("#container").append('<h3>'+data[url_id].title+'</h3>');
            //新闻事件data[url_id].ptime
            $("#container").append('<span id="ptime">'+data[url_id].ptime+'</span>');
            //图片,判断是否有图片,有的话就添加
            if(data[url_id].img.length != 0)
            {
                var arr = data[url_id].img;
                for(var i = 0;i<arr.length;i++){
                    $("#container").append('<img src="'+data[url_id].img[i].src+'" alt="'+data[url_id].img[0].alt+'" />');
                }   
            }
            //主题内容
            $("#container").append(data[url_id].body);
        }

设置CSS样式

 <style type="text/css">
        #replyCount{
        background-color: red;
        color: white;
        border-radius: 15px;
        margin-top:10px;
        padding: 5px;
        float: right;
        margin-right: 10px;
        }
        .mui-content{
        top: 45px;
        bottom: 0px;
        }
        body,#container,.mui-bar{
            background-color: white;
        }
        
        #container p{
            padding: 0 10px;
            font-size: 14px;
        }
        #container img{
            width: 90%;
            display: block;
            margin: 15px auto;
        }
        #container h3{
            margin: 10px 0px 10px 10px;;

        }
        #ptime{
            margin: 10px 10px;
        }
    </style>

效果如下:

效果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 225,226评论 6 524
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,509评论 3 405
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 172,523评论 0 370
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 61,181评论 1 302
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,189评论 6 401
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,642评论 1 316
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,993评论 3 431
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,977评论 0 280
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,527评论 1 326
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,547评论 3 347
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,661评论 1 355
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,250评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,991评论 3 340
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,422评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,571评论 1 277
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,241评论 3 382
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,737评论 2 366

推荐阅读更多精彩内容