zoukankan      html  css  js  c++  java
  • 如果你想开发一个应用(1-16)

    timg.jpg

    首页

    上一章我们已经完成了登录功能,根据上一章的设计,登录完成之后,将进入首页,我们看一下首页的原型图:

    再次强调,这个项目并不是正规的开发流程,可以说的难听些,就是想到哪做到哪,随便蔓延。

    1.png

    总体布局

    经过原型图,我们可以分析出首页的大概结构:

    1. 头部是一个包含三个item的tab,用于控制内容区域显示不同的组件
    2. 足部是疑似导航效果的三个按钮,分别对应开启新记录,开启新的图片记录,以及当前月的记录数目。

    剩下的就是内容主题部分。

    暂时只考虑日记这个tab节点的内容部分。它是一个月份列表内嵌套了一个本月的日记的列表,所以需要一个月份字段,并且由于日记是分组的,当前显示的组也需要记录,同时,还要知道页面内正在显示的月是哪一个月,也就是,在页面右下角记录条目要知道根据那个月份和组来进行计算。

    然后看记录的框框内都有什么内容:

    首先,是记录时间,包括星期,日期,时间,但这些可以用一个date对象代表,然后日记的标题,日记内容,发送日记时候的心情,天气,以及是否打了标记,这些为了前后端方便,均用int型来表示。

    所以最终经过分析最终的数据模型设计如下:

    indexTodos:[
    	{
    		month:0,              //月份
    		default:1,            //正在显示的月份
    		todos:[{
    			createTime:new Date(),   //记录时间
    			item:'',			     //标题
    			content:'',				 //内容
    			weather:0,				 //天气
    			mood:0,					 //心情
    			bookmark:0,				 //标记
    			groupid:0,				 //所属组
    		}]
    	}
    ]
    

    接下来我们完成首页,首先在Views文件夹内创建Index.vue文件,然后安装登录页一样,完成一个基本的Vue文件的结构:

    Index.vue:

    <style scoped>
    </style>
    <template>
    	<div id="main">
    		<!--白云背景图-->
    		<img src="../assets/bg.png" class="background">
    	</div>
    </template>
    <script>
    	export default {
    	}
    </script>
    

    接下来按照刚刚的分析,将其分为头--内容--足三层结构:

    <div id="main">
    	<img src="../assets/bg.png" class="background">
    	<div class="head">
    	</div>
    	<div id="contentPanel">
    	</div>
    	<div class="foot">
    	</div>
    </div>
    

    接下来,由于内容部分需要动态切换,所以我们先给他加上动画效果,在考虑其他:

    <div id="main">
    	<img src="../assets/bg.png" class="background">
    	<div class="head">
    	</div>
    	<div id="contentPanel">
    		<transition   name="custom-classes-transition"
    	    enter-active-class="animated bounceInLeft"
    	    leave-active-class="animated fadeOut"
    	    :duration="{ enter: 700, leave: 200 }">
    		</transition>
    	</div>
    	<div class="foot">
    	</div>
    </div>
    

    头部

    接下来头部比较简单,直接先duang的一些放入MuseUI的控件:

    <div class="head">
    	<mu-tabs class="tabtitle" :value="indexTab" lineClass="lineClass"  v-on:change="tabChange">
    	    <mu-tab value="tab1" :class="tab1Class" class="left-tab" title="日记" />
    	    <mu-tab value="tab2" :class="tab2Class" title="日历" />
    	    <mu-tab value="tab3" :class="tab3Class" class="right-tab" title="记录" />
    	</mu-tabs>
    </div>
    

    你可能已经注意到了,这里面多了好多class,还有一个change的事件,其中class是因为他的默认样式与我们需要的不符,所以需要对组件进行一些修改,再次对不懂less感到忏悔,这是class的代码:

    .tabtitle{
    	background: #fff;
    	padding-right: 30px;
    	padding-left: 30px;
    }
    .tabtitle .tab{
    	color: #5e35b1;
    	border: 2px solid #5e35b1;
    	border- 2px 0px;
    	padding: 2px;
    	margin-top: 20px;
    	margin-bottom: 20px;
    	min-height: 30px;
    	font-weight: bold;
    }
    .tabtitle .tab-active{
    	color: #fff;
    	background: #5e35b1;
    	border: 2px solid #5e35b1;
    	border- 2px 0px;
    	padding: 2px;
    	margin-top: 20px;
    	margin-bottom: 20px;
    	min-height: 30px;
    	font-weight: bold;
    }
    .tabtitle .left-tab{
    	border-radius: 10px 0px 0px 10px;
    	border: 2px solid #5e35b1;
    	margin:0px;
    	margin-left: 5px;
    }
    .tabtitle .right-tab{
    	border-radius: 0px 10px 10px 0px;
    	border: 2px solid #5e35b1;
    	margin-right: 5px;
    }
    .lineClass{
    	display: none;
    }
    

    注意tab项的左右样式不一致。

    然后是change事件,根据文档可知,change的事件会带一个参数,参数值为tab项的值:

    methods: {
    	tabChange:function(event){
    		//模拟hover伪类
    		this.indexTab = event
    		for (var i = 1;i<=3;i++){
    			this['tab' + i + 'Class'] = 'tab'
    		}
    		this[event + 'Class'] = 'tab-active'
    		switch (event) {
    			case 'tab1':
    			//记录操作
    			break
    			case 'tab2':
    			//日历操作
    			break
    			case 'tab3':
    			//我的操作
    			break
    		}
    	}
    }
    

    同样在节点内有多个值都是绑定的,比如class的类名,以及tabitem默认值的指向等,绑定的值同样定义在script内,具体绑定值如下:

    data () {
        return {
            indexTab:"tab1",
           	tab1Class:"tab-active",
           	tab2Class:"tab",
           	tab3Class:"tab",
        }
    },
    

    足部

    完成头部之后,接下来就开始弄足部,足部也很简单,同样使用MuseUIDD组件,这次我们使用Bottom Navigation,当然同样需要修改css和添加不同的事件,足部暂时的代码如下:

    <div class="foot">
    	<mu-bottom-nav class="bottom-nav"  shift v-on:change="navChange">
    	    <mu-bottom-nav-item value="edit" title="" class="navItemClass" iconClass="iconclass" activeClass="iconclass" icon="edit"/>
    	    <mu-bottom-nav-item value="photo" title=""  class="navItemClass" style="34%" iconClass="iconclass" activeClass="iconclass" icon="local_see"/>
    	    <div class="navItemClass"  >{{ itemnumber }}篇日记</div>
    	</mu-bottom-nav>
    </div>
    

    首先看到的应该就是第三个item,并没有使用mu-bottom-nav-item而是使用了一个普通的div,并绑定了一个itemnumber,将itemnumber添加到data内后的代码:

    data () {
        return {
            itemnumber:1,
            indexTab:"tab1",
           	tab1Class:"tab-active",
           	tab2Class:"tab",
           	tab3Class:"tab",
        }
    },
    

    然后,是对mu-bottom-nav样式的修改,这个因为都是静态的,比起头部来说就简单多了:

    .bottomNav{
    	position: absolute;
    	bottom: 0px;
    	background: #fff;
    	color: #757575;
    }
    .navItemClass{
    	33%;
    }
    .iconclass{
    	color: #757575;
    }
    

    然后就是这个组件的change事件,由于这个组件没有设置默认值,所以只要点击即触发change事件:

    navChange:function(event){
    	if(event=='edit'){
    		//新建日记
    	}else if(event=='photo'){
    		//拍照
    	}
    },
    

    当前效果

    经过书写后,当前的效果如下:

    2.png

    目前来看,基本符合电影截图中的样式,然后就是最最重要的内容页了,下一章将继续完善.

    谢谢观看

  • 相关阅读:
    UVa 1349 (二分图最小权完美匹配) Optimal Bus Route Design
    UVa 1658 (拆点法 最小费用流) Admiral
    UVa 11082 (网络流建模) Matrix Decompressing
    UVa 753 (二分图最大匹配) A Plug for UNIX
    UVa 1451 (数形结合 单调栈) Average
    UVa 1471 (LIS变形) Defense Lines
    UVa 11572 (滑动窗口) Unique Snowflakes
    UVa 1606 (极角排序) Amphiphilic Carbon Molecules
    UVa 11054 Wine trading in Gergovia
    UVa 140 (枚举排列) Bandwidth
  • 原文地址:https://www.cnblogs.com/jiangchao226/p/8244085.html
Copyright © 2011-2022 走看看