微信小程序项目实例——心情记事本
文章目录
- 微信小程序项目实例——心情记事本
- 一、项目展示
- 二、首页
- 三、效果图
- 文末
项目代码见文字底部,点赞关注有惊喜
一、项目展示
心情记事本是一款可以记录当前心情和生活的记事本
用户可以选择当前的心情(开心、平淡、伤心)和表情
并结合自己想要描述的文字
就可以记录当前的心情了
为了更好的展现用户的心情
项目罗列了大量的精美表情
缩略图如下:
项目的展示图如下:
二、首页
首页主要由日历组件和自制的记录组件结合而成
主要代码如下:
<picker mode="date" value="{{date}}" fields="month" start="{{start_date}}" end="{{end_date}}" bindchange="select_date"> {{now_date}} <block wx:for="{{ date_arr }}" wx:key="key"> <view class="date-item date-enabled-{{item.enabled}} date-today-{{item.today}} "> {{item.date}} <block wx:if="{{item.emotion_value}}"> <image src="/asset/images/circle-{{item.emotion_value}}.svg" class="circle"> <view wx:for="{{ items }}" wx:key="{{key}}"> <view class="diary-item" key="{{key}}" bindtap="detail" data-key="{{ item.key }}"> {{ item.value['date']}} {{ item.value['week']}} <image src="/asset/emojis/{{ item.value['emoji_type']}}.svg" class="emoji-image"> {{ item.value['text'] }} <view class="cover" wx:if="{{modal_visiable}}" bindtap="cancle"><view class="modal ripple bounceInDown" wx:if="{{modal_visiable}}"> <image src="/asset/emojis/{{ emoji_indicator }}.svg" class="emoji-image"> <picker-view indicator-style="height: 50px;" value="{{ emoji_defaul_value }}" class="emoji-picker" bindchange="select_emoji"> 伤心的表情 开心的表情 平淡的表情 <view wx:for="{{ emoji_list }}" wx:key="key"> <image src="/asset/emojis/{{ item }}.svg"> <block wx:if="{{ is_newbee }}"> <textarea placeholder="选择表达今天心情的emoji, 或者在此写点文字, enjoy ~ ~" value="{{ text }}" bindinput="input" placeholder-style="color:#9B9B9B;font-size:26rpx;line-height:46rpx" class="text"/> <textarea placeholder="写点什么,当然你也可以什么都不写" value="{{ text }}" bindinput="input" placeholder-style="color:#9B9B9B;font-size:26rpx;" class="text"/> <block wx:if="{{ delete_button_visiable}}"> 删除 删除 保存
let app = getApp()let util = require('../../utils/util.js')let date_formater = require('../../utils/date_formater.js')let storage = require('../../utils/data_storage.js')Page({ data: { 'date_arr': [], 'now_date': '2017-04-11', 'start_date': '2015-04-11', 'end_date': '2019-04-11', 'date': '', 'year': 0, 'month': 0, 'items': [], 'modal_visiable': false, 'emoji_list': [], 'emoji_indicator': 'face-with-stuck-out-tongue-and-winking-eye', 'emoji_defaul_value': [1, 1], 'text': '', 'item_key': '', //当前条目的key 'delete_button_visiable': false ,//modal中的删除按钮是否可见 'is_newbee': false // 是不是第一次使用 }, // 初始化页面数据 page_init: function(year, month) { console.log(year + '-' + month + ' data had initialized') let data = util.get_date(year, month) let emojis = util.get_emojis() this.setData({ 'date_arr': data, 'now_date': date_formater.format_month(month) + ' ' +year, 'date': year + '-' + date_formater.add_date_prefix(month + 1) + '-01', 'year': year, 'month': month, 'start_date': year - 2 + '-' + date_formater.add_date_prefix(month + 1) + '-01', 'end_date': year + 2 + '-' + date_formater.add_date_prefix(month + 1) + '-01', 'items': storage.all(year, month), 'emoji_list': emojis['positive'], }) }, onLoad: function() { let date = new Date() let year = date.getFullYear() let month = date.getMonth() let emojis = util.get_emojis() this.page_init(year, month) // let is_newbee = util.is_newbee() let is_newbee = false if(is_newbee) { this.blank_modal() } this.setData({ 'is_newbee': is_newbee }) }, select_date: function(e) { let date_str = e.detail.value let date_arr = date_str.split('-') let year = parseInt(date_arr[0]) let month = parseInt(date_arr[1]) - 1 this.page_init(year, month) }, prev_month: function() { let year = this.data.year let month = this.data.month if (month - 1 11) { year = year + 1 month = 0 } else { month = month + 1 } this.page_init(year, month) }, modal: function() { this.setData({ 'modal_visiable': true, 'delete_button_visiable': true }) }, blank_modal: function() { this.setData({ 'modal_visiable': true, 'emoji_indicator': 'face-with-stuck-out-tongue-and-winking-eye', 'emoji_defaul_value': [1, 1], 'text': '', 'delete_button_visiable': false }) }, select_emoji: function(e) { var val = e.detail.value let emoji_type = val[0] let emoji_index = val[1] let emojis = util.get_emojis() var emoji_list = [] if(emoji_type == 0) { emoji_list = emojis['negative'] } if(emoji_type == 1) { emoji_list = emojis['positive'] } if(emoji_type == 2){ emoji_list = emojis['neutral'] } this.setData({ 'emoji_list': emoji_list, 'emoji_indicator': emoji_list[emoji_index] }) }, input : function(e) { this.setData({ 'text': e.detail['value'] }) // console.log(this.data.text) }, save: function(){ let date = new Date() let year = date.getFullYear() let month = date.getMonth() let day = date.getDate() let key = year + '-' + date_formater.add_date_prefix(month + 1)+'-' + date_formater.add_date_prefix(day) storage.add(key, this.data.emoji_indicator, 0, 0, 0, this.data.text) this.page_init(year, month) this.cancle() }, delete: function() { storage.del(this.data.item_key) this.page_init(this.data.year, this.data.month) this.cancle() }, cancle: function() { this.setData({ 'modal_visiable': false }) }, detail: function(e) { let key = e.currentTarget.dataset.key let item = storage.get(key) let emoji_defaul_value = util.get_emoji_pos(item['emoji_type']) this.setData({ 'text': item['text'], 'emoji_indicator': item['emoji_type'], 'emoji_defaul_value' : emoji_defaul_value, 'item_key': key }) this.modal() }})
三、效果图
具体的效果展示如下
文末
具体的介绍就到这里了
有兴趣的同学可以继续研究
代码放到下面链接里了
点击下载 小程序