微信小程序开发之实现心情记事本
作者:失散多年的哥哥 发布时间:2024-04-18 09:45:20
标签:小程序,心情,记事本
一、项目展示
心情记事本是一款可以记录当前心情和生活的记事本
用户可以选择当前的心情(开心、平淡、伤心)和表情
并结合自己想要描述的文字
就可以记录当前的心情了
为了更好的展现用户的心情
项目罗列了大量的精美表情
缩略图如下:
项目的展示图如下:
二、首页
首页主要由日历组件和自制的记录组件结合而成
主要代码如下:
<view class="container">
<view class="title">
<view class="left-arrow" bindtap="prev_month"> <image src="/asset/images/left-arrow.svg" class="arrow"></image> </view>
<picker mode="date" value="{{date}}" fields="month" start="{{start_date}}" end="{{end_date}}" bindchange="select_date">
<view class="date-picker"> {{now_date}} </view>
</picker>
<view class="right-arrow" bindtap="next_month"> <image src="/asset/images/right-arrow.svg" class="arrow"></image> </view>
</view>
<view class="divider-box">
<image src="/asset/images/divider.svg" class="divider"></image>
</view>
<view class="calender">
<view class="calender-header">
<image src="/asset/images/SUN.svg" class="week-item"></image>
<image src="/asset/images/MON.svg" class="week-item"></image>
<image src="/asset/images/TUE.svg" class="week-item"></image>
<image src="/asset/images/WED.svg" class="week-item"></image>
<image src="/asset/images/THU.svg" class="week-item"></image>
<image src="/asset/images/FRI.svg" class="week-item"></image>
<image src="/asset/images/SAT.svg" class="week-item"></image>
</view>
<view class="calender-body">
<block wx:for="{{ date_arr }}" wx:key="key">
<view class="date-item date-enabled-{{item.enabled}} date-today-{{item.today}} ">
<span>{{item.date}}</span>
<block wx:if="{{item.emotion_value}}">
<image src="/asset/images/circle-{{item.emotion_value}}.svg" class="circle"></image>
</block>
</view>
</block>
</view>
</view>
<view class="diary">
<view wx:for="{{ items }}" wx:key="{{key}}">
<view class="diary-item" key="{{key}}" bindtap="detail" data-key="{{ item.key }}">
<view class="diary-date">
<view class="date">{{ item.value['date']}}</view>
<view class="day">{{ item.value['week']}}</view>
</view>
<image src="/asset/images/virtical-divider.svg" class="virtical-divider"></image>
<view class="emoji">
<image src="/asset/emojis/{{ item.value['emoji_type']}}.svg" class="emoji-image"></image>
</view>
<image src="/asset/images/virtical-divider.svg" class="virtical-divider"></image>
<view class="text">{{ item.value['text'] }}</view>
<image class="more-arrow" src="/asset/images/more-arrow.svg"></image>
</view>
</view>
</view>
</view>
<image src="/asset/images/add-button.svg" class="add-button" bindtap="blank_modal"></image>
<view class="cover" wx:if="{{modal_visiable}}" bindtap="cancle"></view>
<view class="modal ripple bounceInDown" wx:if="{{modal_visiable}}">
<view class="create-box">
<image src="/asset/images/close-button.svg" class="close-button" bindtap="cancle"></image>
<image src="/asset/emojis/{{ emoji_indicator }}.svg" class="emoji-image"></image>
<view class="emoji-select-box">
<picker-view indicator-style="height: 50px;" value="{{ emoji_defaul_value }}" class="emoji-picker" bindchange="select_emoji">
<picker-view-column>
<view style="line-height: 50px; color: #797979">伤心的表情</view>
<view style="line-height: 50px; color: #797979">开心的表情</view>
<view style="line-height: 50px; color: #797979">平淡的表情</view>
</picker-view-column>
<picker-view-column>
<view wx:for="{{ emoji_list }}" wx:key="key">
<image src="/asset/emojis/{{ item }}.svg" style="height: 100%; width: 100rpx;"></image>
</view>
</picker-view-column>
</picker-view>
</view>
<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"/>
</block>
<block wx:else>
<textarea placeholder="写点什么,当然你也可以什么都不写" value="{{ text }}" bindinput="input" placeholder-style="color:#9B9B9B;font-size:26rpx;" class="text"/>
</block>
<view class="button-box">
<block wx:if="{{ delete_button_visiable}}">
<view class="delete-button" bindtap="delete" style="visibility: show">删除</view>
</block>
<block wx:else>
<view class="delete-button" bindtap="delete" style="visibility: hidden">删除</view>
</block>
<view class="submit-button" bindtap="save">保存</view>
</view>
</view>
</view>
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 < 0) {
year = year - 1
month = 11
} else {
month = month - 1
}
this.page_init(year, month)
},
next_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()
}
})
三、效果图
具体的效果展示如下
来源:https://blog.csdn.net/ws15168689087/article/details/128606228


猜你喜欢
- python中通过引用计数来回收垃圾对象,在某些环形数据结构(树,图……),存在对象间的循环引用,比如树的父节点引用子节点,子节点同时引用父
- 从一头雾水到模模糊糊,不明原理,暂时记录一下1.安装Qtcratersudo pacman -S qtcreater2.打开Qtcrater
- Mysql 查询缓存 查询缓存的作用就是当查询接收到一个和之前同样的查询,服务器将会从查询缓存种检索结果,而不是再次分析和执行上次的查询。这
- 问题描述:将python脚本设置成开机自启。环境:windows7 64位前段时间,一直想把文件打包成exe文件,然后设置成开机自启,虽然感
- 一、原理1.图片必须具有经纬度信息2.经纬度格式转换2.1 GPS点坐标的两种表示方式(误差还是有的)2.1.1 十进制换度分秒例:经纬度1
- SVM支持向量机是建立于统计学习理论上的一种分类算法,适合与处理具备高维特征的数据集。SVM算法的数学原理相对比较复杂,好在由于SVM算法的
- Goland 项目创建goland2020.3 及以上 IDE,默认创建的 go 项目 就是使用 gomod 管理!goland2020.3
- MySql中longtext字段的返回最近开发中用到了longtext这种字段。在mysql中该字段的最大长度为4G如下图所示开发中遇到的一
- 一、工具python3第三方类库requestspython3-pyqt5(GUI依赖,不用GUI可不装)ubuntu系列系统使用以下命令安
- 一、题目要求用原生Python实现knn分类算法。二、题目分析数据来源:鸢尾花数据集(见附录Iris.txt)数据集包含150个数据集,分为
- 本节重点让学生了安装上Python,配置好环境变量Python目前已支持所有主流操作系统,在Linux,Unix,Mac系统上自带Pytho
- 分页设计我们经常会见到,这里有30个分页设计,以供大家欣赏欣赏借鉴。
- 内容摘要合理使用渐变留白网格布局提高字体应用明确而有效的导航设计漂亮、有用的页脚介绍优秀设计和卓越设计之间的区别是比较小的。一般人可能无法解
- 我们在数据处理,往往不小心,pandas会“主动”加上行和列的名称,我现在就遇到了这个问题。这个是pandas中to_csv生成的数据各种拼
- Pandas库十分强大,但是对于切片操作iloc, loc和ix,很多人对此十分迷惑,因此本篇博客利用例子来说明这3者之一的区别和联系,尤其
- SQL触发器实例1 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一
- 一、MySQL进阶查询首先先创建两张表mysql -u root -pXXX #登陆数据库,XXX为密码crea
- PL/SQL是由Oracle公司对标准SQL进行扩展,专用于Oracle数据库中程序设计的专用语言,属第三代过程式程序设计语言。从Oracl
- 学习PHP就不得不提MySQL,虽然有phpMyadmin这样的工具可以图形化操作数据库,但我还是想借学习PHP的机会使用下命令行方式操作数
- Python字符串的format函数format()函数用来收集其后的位置参数和关键字段参数,并用他们的值填充字符串中的占位符。通常格式如下