欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

微信小程序实现简单评论功能

程序员文章站 2023-12-01 22:22:46
本文实例为大家分享了微信小程序实现评论功能的具体代码,供大家参考,具体内容如下 具体直接看代码 wxml:

本文实例为大家分享了微信小程序实现评论功能的具体代码,供大家参考,具体内容如下

具体直接看代码

wxml:

<view> 
<button bindtap='showtalks'>查看评论</button> 
</view>
 
 
<!-- 整个评论区 --> 
<view class='talks-layer' animation='{{talksanimationdata}}'>
<!-- 主要作用是点击后隐藏评论区 --> 
<view class='layer-white-space' bindtap='hidetalks'>
</view>
 
 
<!-- 评论区 --> 
<view class='talks' bindtouchstart='touchstart' bindtouchmove='touchmove'> 
<!-- 评论头部 --> 
<view class='talk-header'> 
<view class='talk-count'>{{talks.length}} 条评论</view> 
<image src='../../../images/close.png' class='talk-close' bindtap='hidetalks'></image> 
</view>
 
 
<!-- 评论体 --> 
<scroll-view class='talk-body' scroll-y="true" bindscrolltolower="onscrollload"> 
<view class='talk-item' wx:for="{{talks}}" wx:key="*this"> 
<view class='talk-item-left'>
<image class='talk-item-face' src='{{item.avatarurl}}'></image>
</view>
<view class='talk-item-right'> 
<view class='right-left'> 
<text class='talk-item-nickname'>{{item.nickname}}</text> 
<text class='talk-item-time'>{{item.talktime}}</text> 
</view> 
<text class='talk-item-content'>{{item.content}}</text>
 
 
</view> 
</view> 
</scroll-view>

 
<!-- 评论底部 --> 
<view class="cf-bg" catchtap="cemojicfbg" style="display:{{cfbg ? 'block' : 'none'}}"></view> 
<view class=" {{isshow ?'footer_boxmovein' : 'talk-footer'}}"> 
<view class='footer_box'> 
<view class="emoji iconfont icon-emoji" catchtap="emojishowhide"></view> 
<input class='talk-input' type='text' value='{{inputvalue}}' bindblur="bindinputblur" placeholder='有爱评论,说点儿好听的~'></input> 
<button class='fabu-input' bindtap='fabu'>发布</button> 
</view>
 
<view wx:if='{{isshow}}' class="emoji-box {{isshow ? 'emoji-move-in' : 'emoji-move-out'}} {{isload ? 'no-emoji-move' : ''}}"> 
<scroll-view scroll-y="true" bindscroll="emojiscroll" style="height:200px"> 
<block wx:for="{{emojis}}" wx:for-item="e" wx:key=""> 
<view class="emoji-cell">
<image class="touch-active" bindtap="emojichoose" src="http://soupu.oss-cn-shanghai.aliyuncs.com/emoji/{{e.emoji}}.png" data-emoji="{{e.char}}" data-oxf="{{e.emoji}}"></image> 
</view> 
</block>
 
</scroll-view> 
</view> 
</view> 
</view> 
</view>

.wxss

page { 
height: 100%; 
overflow: hidden;
 
}
 
 
 
/* 框架 */

.talks-layer { 
position: absolute; 
bottom: -100%; 
height: 0; 
width: 100%; 
overflow: hidden; 
/* background-color: blue; */
 
}
 

.layer-white-space { 
height: 100%; 
width: 100%; 
background-color: #ccc; 
opacity: 0.5; 
/* background-color: green; */
 
}
 
 
.talks { 
position: absolute; 
height: 900rpx; 
width: 100%; 
bottom: 0rpx; 
background-color: #2f2d2e; 
border-top-left-radius: 3%; 
border-top-right-radius: 3%;
/* background-color: red; */
 
}
 
 
.talk-header { 
width: 100%; 
height: 70rpx; 
padding-top: 30rpx; 
text-align: center; 
}
 
 
.talk-body { 
height: 700rpx; 
}
 
 
.talk-footer { 
position: absolute; 
bottom: 0rpx; 
width: 100%; 
height: 100rpx; 
background-color: #151515; 
display: flex; 
justify-content: space-between; 
align-items: center; 
padding: 0 30rpx; 
box-sizing: border-box;
 
}
 
.footer_boxmovein{
position: absolute; 
bottom: 400rpx; 
width: 100%; 
height: 100rpx; 
z-index:1000; 
background-color: #151515; 
display: flex;
justify-content: space-between; 
align-items: center; 
padding: 0 30rpx; 
box-sizing: border-box; 
transition:all 0.6s;
 
}
 
.footer_box { 
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
 
}
 
 
 
/* 顶部元素 */ 
.talk-count { 
font-size: 26rpx; 
height: 40rpx; 
color: #6b696a;
}

 
.talk-close {
position: absolute;
top: 30rpx; 
right: 40rpx; 
width: 40rpx; 
height: 40rpx;
 
}
 
 
/* 中部元素 */ 
.talk-item { 
display: flex; 
flex-direction: row; 
align-items: flex-start; 
width: 100%; 
color: white;
 
}
 
 
.talk-item-left { 
display: flex; 
flex-direction: row; 
margin: 20rpx 30rpx; 
}
 
 
.talk-item-face { 
width: 80rpx; 
height: 80rpx;
border-radius: 50%;
 
}
 
 
.talk-item-right { 
width: 100%; 
border-bottom: solid 1rpx #6a6869; 
margin-right: 30rpx; 
/* margin-bottom: 30rpx; */ 
padding-bottom: 20rpx;
 
}
 
 
.right-left { 
display: flex; 
justify-content: space-between; 
align-items: center; 
margin: 10px 0;
 
}
 
 
.talk-item-nickname { 
font-size: 28rpx; 
color: #aaa8a9; 
}
 
 
.talk-item-time { 
font-size: 24rpx; 
color: #6a6869;
 
}
 
 
.talk-item-content {
display: block; 
font-size: 30rpx;
margin-right: 30rpx; 
width: 92%; 
white-space: pre-line; 
word-break: break-all; 
word-wrap: break-word;;
 
}
 
 
 
/* 底部元素 */ 
.talk-input { 
width: 100%; 
font-size: 30rpx; 
padding: 20rpx 0; 
padding-left: 30rpx; 
/* box-sizing: border-box; */ 
color: white; 
border-top-left-radius: 5%;
border-top-right-radius: 5%;
 
}
 

.fabu-input { 
background: red; 
font-size: 26rpx; 
color: #fff;
width: 127rpx; 
height: 60rpx; 
line-height: 60rpx;
text-align: center; 
border-radius: 30rpx; 
padding: 0;
 
}
  
.emoji {
background-color: #fff;
width: 30px; 
height: 30px; 
text-align: center; 
padding-top: 2px;
box-sizing: border-box; 
font-size: 20px;
 
}
 
.emoji-box {
position: absolute; 
bottom:-390rpx; 
left:0rpx; 
height: 200px; 
padding: 5px 16rpx; 
box-sizing: border-box; 
background:#000;
 
} 
 
.emoji-cell { 
width: 9.09%; 
height: 33px; 
display: inline-block;
 
}
 
.emoji-cell image { 
width: 23px;
height: 23px; 
padding: 5px;
border-radius: 3px;
 
}
 
 
.emoji-move-in { 
-webkit-animation: emoji-move-in 0.3s forwards; 
animation: emoji-move-in 0.3s forwards;
 
}
 
.emoji-move-out { 
-webkit-animation: emoji-move-out 0.3s forwards; 
animation: emoji-move-out 0.3s forwards;
 
}
 
 
.no-emoji-move { 
-webkit-animation: none; 
animation: none;
}
 
 
@-webkit-keyframes emoji-move-in { 
0% {
margin-bottom: -200px; 
}
 
100% {
margin-bottom: 0;
 
}
 
}
 
 
@keyframes emoji-move-in { 
0% { 
margin-bottom: -200px;
 
}
 
 
100% { 
margin-bottom: 0; 
}
 
}
 
 
@-webkit-keyframes emoji-move-out { 
0% { 
margin-bottom: 0;
 
} 
100% { 
margin-bottom: -200px;
 
}
 
}
 
@keyframes emoji-move-out { 
0% { 
margin-bottom: 0;
 
} 
 
100% { 
margin-bottom: -200px;
 
}
 
}
 
@-webkit-keyframes pd-left-move { 
0% { 
padding-left: 5px;
 
}
 
100% { 
padding-left: 15px;
 
}
 
} 
 
@keyframes pd-left-move { 
0% { 
padding-left: 5px;
 
} 
 
100% { 
padding-left: 15px;
}
 
}
 
.cf-bg {
position: fixed; 
top: 0; 
left: 0; 
bottom: 0; 
right: 0; 
background-color: transparent; 
z-index: 99;
 
}

.js

page({
 data: {
 talks: [],
 touchstart: 0,
 inputvalue: '',
 inputbiaoqing: '',
 faces: ['https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1535727304160&di=0cc9d01a4ae2deca5634c3136d5c01f6&imgtype=0&src=http%3a%2f%2fimg5q.duitang.com%2fuploads%2fitem%2f201406%2f12%2f20140612202753_u4ng5.jpeg', 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1535727304159&di=da2c1c4e868ee95f3cd65ffc6e24a456&imgtype=0&src=http%3a%2f%2fimg4.duitang.com%2fuploads%2fitem%2f201505%2f01%2f20150501083603_yutqc.jpeg', 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1535727304156&di=7d46a1482a8e798a70d8d52320285b02&imgtype=0&src=http%3a%2f%2fup.enterdesk.com%2fedpic_source%2f7b%2ff9%2f01%2f7bf901db9091dff00a20d474c83afc45.jpg'],
 names: ['贝贝', '晶晶', '欢欢', '妮妮'],
 isshow: false, //控制emoji表情是否显示 
 isload: true, //解决初试加载时emoji动画执行一次
 cfbg: false,
 emojichar: "☺-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-✈-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????-????",
 //0x1f---
 emoji: [
  "60a", "60b", "60c", "60d", "60f",
  "61b", "61d", "61e", "61f",
  "62a", "62c", "62e",
  "602", "603", "605", "606", "608",
  "612", "613", "614", "615", "616", "618", "619", "620", "621", "623", "624", "625", "627", "629", "633", "635", "637",
  "63a", "63b", "63c", "63d", "63e", "63f",
  "64a", "64b", "64f", "681",
  "68a", "68b", "68c",
  "344", "345", "346", "347", "348", "349", "351", "352", "353",
  "414", "415", "416",
  "466", "467", "468", "469", "470", "471", "472", "473",
  "483", "484", "485", "486", "487", "490", "491", "493", "498", "6b4"
 ],
 emojis: [], //qq、微信原始表情
 alipayemoji: [], //支付宝表情
 },
 
 onload: function() {
 var em = {},
  that = this,
  emchar = that.data.emojichar.split("-");
 var emojis = []
 that.data.emoji.foreach(function(v, i) {
  em = {
  char: emchar[i],
  emoji: "0x1f" + v
  };
  emojis.push(em)
 });
 that.setdata({
  emojis: emojis
 })
 },
 //解决滑动穿透问题
 emojiscroll: function(e) {
 console.log(e)
 },
 //点击表情显示隐藏表情盒子
 emojishowhide: function() {
 this.setdata({
  isshow: !this.data.isshow,
  isload: false,
  cfbg: !this.data.false
 })
 },
 //表情选择
 emojichoose: function(e) {
 console.log(e)
 //当前输入内容和表情合并
 // let value = e.currenttarget.dataset.emoji;
 this.data.inputbiaoqing += e.currenttarget.dataset.emoji;
 console.log(this.data.inputbiaoqing)
 this.setdata({
  inputvalue: this.data.inputbiaoqing
 })
 },
 //点击emoji背景遮罩隐藏emoji盒子
 cemojicfbg: function() {
 console.log('womenlai')
 this.setdata({
  isshow: false,
  cfbg: false
 })
 },
 onready: function() {
 // 评论弹出层动画创建
 this.animation = wx.createanimation({
  duration: 400, // 整个动画过程花费的时间,单位为毫秒
  timingfunction: "ease", // 动画的类型
  delay: 0 // 动画延迟参数
 })
 },
 showtalks: function() {
 // 加载数据
 this.loadtalks();
 // 设置动画内容为:使用绝对定位显示区域,高度变为100%
 this.animation.bottom("0rpx").height("100%").step()
 this.setdata({
  talksanimationdata: this.animation.export()
 })
 },
 
 hidetalks: function() {
 // 设置动画内容为:使用绝对定位隐藏整个区域,高度变为0
 this.animation.bottom("-100%").height("0rpx").step()
 this.setdata({
  talks: [],
  talksanimationdata: this.animation.export()
 })
 },
 
 // 加载数据
 loadtalks: function() {
 // 随机产生一些评论
 wx.shownavigationbarloading();
 let that = this;
 let talks = [];
 let faces = ['https://ss0.bdstatic.com/94ojfd_baact8t7mm9gukt-xh_/timg?image&quality=100&size=b4000_4000&sec=1535701703&di=bfde939cc559b0f8edcbfd1adb6e667d&src=http://img5q.duitang.com/uploads/item/201505/15/20150515205520_iwf2u.jpeg',
  'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1535711703167&di=ce7a08b889137a70f7b4568e13df0e4d&imgtype=0&src=http%3a%2f%2fd.hiphotos.baidu.com%2fzhidao%2fpic%2fitem%2f6f061d950a7b02088811236964d9f2d3562cc85a.jpg',
  'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1535711703162&di=8ec21b75cb44de532f8be29300f075b0&imgtype=0&src=http%3a%2f%2fpic36.photophoto.cn%2f20150710%2f0005018347189196_b.jpg',
 ];
 let names = ['佳佳', '晶晶', '欢欢', '妮妮', '娜娜', '锅锅'];
 let contents = ['为什么你总是对我不理不睬呢', '干嘛老是不见你了', '我们都有字节的梦想', '你有什么资格不努力呢'];
 let talktime = '刚刚';
 console.log(talktime)
 talks = talks.concat(that.data.talks);
 
 // 随机产生10条评论
 for (var i = 0; i < 10; i++) {
  talks.push({
  avatarurl: faces[math.floor(math.random() * faces.length)],
  nickname: names[math.floor(math.random() * names.length)],
  content: contents[math.floor(math.random() * contents.length)],
  talktime: talktime
  });
 }
 this.setdata({
  talks: talks,
  talksanimationdata: that.animation.export()
 })
 wx.hidenavigationbarloading();
 },
 
 onscrollload: function() {
 // 加载新的数据
 this.loadtalks();
 },
 //下拉评论框隐藏
 touchstart: function(e) {
 let touchstart = e.touches[0].clienty;
 this.setdata({
  touchstart,
 })
 },
 touchmove: function(e) {
 // console.log(this.data.touchstart)
 let touchlength = e.touches[0].clienty - this.data.touchstart;
 console.log(touchlength - 100)
 if (touchlength > 100) {
  this.animation.bottom("-100%").height("0rpx").step()
  this.setdata({
  talks: [],
  talksanimationdata: this.animation.export(),
  })
 }
 },
 //输入框失去焦点时触发
 bindinputblur: function(e) {
 console.log(e)
 console.log(this.data.inputbiaoqing)
 this.data.inputvalue = e.detail.value + this.data.inputbiaoqing;
 },
 //点击发布,发布评论
 fabu: function() {
 let that = this;
 this.data.talks.unshift({
  avatarurl: this.data.faces[math.floor(math.random() * this.data.faces.length)],
  nickname: this.data.names[math.floor(math.random() * this.data.names.length)],
  content: this.data.inputvalue,
  talktime: '刚刚'
 })
 that.data.inputvalue = '';
 that.setdata({
  talks: that.data.talks,
  inputvalue: that.data.inputvalue,
  talksanimationdata: that.animation.export()
 })
 
 }
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。