开始

聊天页面底部的输入框和发送按钮。
image.png
不会实现发送图片的逻辑,只会够建出来样式。主要是因为课程量太大。后期有专门的即时通讯的课程来讲这块。包括群聊 个人聊天等。发送图片和表情等。
image.png

image.png

  1. <!-- 输入框 -->
  2. <view class="user-chat-bottom">
  3. <input type="text" placeholder="文明发言" />
  4. <view class="icon iconfont icon-fabu"></view>
  5. </view>

flex布局
image.png

  1. <!-- 输入框 -->
  2. <view class="user-chat-bottom u-f-ac">
  3. <input type="text" placeholder="文明发言" />
  4. <view class="icon iconfont icon-fabu"></view>
  5. </view>

css样式

固定定位
image.png
白色背景
image.png
加一个上边框
image.png
为了看的明显一点,给文本框加一个红色的边框
image.png

  1. .user-chat-bottom input{
  2. border: 1upx solid red;
  3. }

image.png

image.png
这里改成左右20upx
image.png

image.png

按钮给个固定的宽度
image.png
水平垂直方向居中。
image.png
占满剩余空间,然后距离右边20
image.png

  1. .user-chat-bottom{
  2. position: fixed;
  3. bottom: 0;
  4. left: 0;
  5. right: 0;
  6. height: 100upx;
  7. padding: 0 20upx;
  8. border-bottom: 1upx solid;
  9. }

image.png

给input一点内边距+圆角
image.png

  1. .user-chat-bottom>input{
  2. border: 1upx solid red;
  3. flex: 1;
  4. margin-right: 20upx;
  5. padding: 10upx;
  6. border-radius: 10upx;
  7. }

按钮大一点。
image.png

  1. .user-chat-bottom>view{
  2. width: 80upx;
  3. background: yellow;
  4. font-size: 35upx;
  5. }

image.png
image.png

  1. .user-chat-bottom{
  2. position: fixed;
  3. bottom: 0;
  4. left: 0;
  5. right: 0;
  6. height: 120upx;
  7. padding: 0 20upx;
  8. border-bottom: 1upx solid;
  9. }

图标给50
image.png

  1. .user-chat-bottom>view{
  2. width: 80upx;
  3. background: yellow;
  4. font-size: 50upx;
  5. }

左右20
image.png

  1. .user-chat-bottom>input{
  2. border: 1upx solid red;
  3. flex: 1;
  4. margin-right: 20upx;
  5. padding: 10upx 20upx;
  6. border-radius: 10upx;
  7. }

image.png
把边框都去掉
image.png

image.png

吸取背景色
image.png
加上背景色
image.png

  1. .user-chat-bottom>input{
  2. /* border: 1upx solid red; */
  3. flex: 1;
  4. margin-right: 20upx;
  5. padding: 10upx 20upx;
  6. border-radius: 10upx;
  7. background: #F7F7F7;
  8. }

image.png

发送按钮,改的小一点
image.png
上边线是灰色
image.png

  1. border-bottom: 1upx solid #EEEEEE;

投屏有色差,真机上看着可以
image.png

image.png

文本框绑定数据

image.png

  1. text:""

image.png

  1. <input type="text" placeholder="文明发言" v-model="text" />

发送事件
image.png

  1. @tap="submit"

image.png

  1. methods: {
  2. submit(){
  3. console.log(this.text);
  4. }
  5. }

封装组件

image.png

image.png
剪切到组件内
image.png

  1. <view class="user-chat-bottom u-f-ac">
  2. <input type="text" placeholder="文明发言" v-model="text" />
  3. <view class="icon iconfont icon-fabu u-f-ajc" @tap="submit"></view>
  4. </view>

样式也复制进来。
image.png

  1. <style scoped>
  2. .user-chat-bottom {
  3. position: fixed;
  4. bottom: 0;
  5. left: 0;
  6. right: 0;
  7. height: 120upx;
  8. padding: 0 20upx;
  9. border-bottom: 1upx solid #EEEEEE;
  10. }
  11. .user-chat-bottom>input {
  12. /* border: 1upx solid red; */
  13. flex: 1;
  14. margin-right: 20upx;
  15. padding: 10upx 20upx;
  16. border-radius: 10upx;
  17. background: #F7F7F7;
  18. }
  19. .user-chat-bottom>view {
  20. width: 80upx;
  21. /* background: yellow; */
  22. font-size: 45upx;
  23. }
  24. </style>

image.png

  1. <script>
  2. export default {
  3. data() {
  4. return {
  5. text:""
  6. }
  7. },
  8. methods: {
  9. submit(){
  10. this.$emit('submit',this.text);
  11. }
  12. }
  13. }
  14. </script>

image.png

引入组件

image.png

  1. import userChatBottom from '@/components/user-chat/user-chat-bottom.vue';
  2. components:{
  3. userChatBottom
  4. },

image.png

  1. <user-chat-bottom @submit="submit"></user-chat-bottom>

image.png

  1. submit(data){
  2. console.log(data);
  3. }

image.png

image.png
发送完消息 清空聊天框
image.png

image.png

  1. submit(){
  2. // 发送消息逻辑
  3. this.$emit('submit',this.text);
  4. this.text=""
  5. }

本节代码

user-chat-bottom组件

  1. <template>
  2. <view class="user-chat-bottom u-f-ac">
  3. <input type="text" placeholder="文明发言" v-model="text" />
  4. <view class="icon iconfont icon-fabu u-f-ajc" @tap="submit"></view>
  5. </view>
  6. </template>
  7. <script>
  8. export default {
  9. data() {
  10. return {
  11. text:""
  12. }
  13. },
  14. methods: {
  15. submit(){
  16. // 发送消息逻辑
  17. this.$emit('submit',this.text);
  18. this.text=""
  19. }
  20. }
  21. }
  22. </script>
  23. <style scoped>
  24. .user-chat-bottom {
  25. position: fixed;
  26. bottom: 0;
  27. left: 0;
  28. right: 0;
  29. height: 120upx;
  30. padding: 0 20upx;
  31. border-bottom: 1upx solid #EEEEEE;
  32. }
  33. .user-chat-bottom>input {
  34. /* border: 1upx solid red; */
  35. flex: 1;
  36. margin-right: 20upx;
  37. padding: 10upx 20upx;
  38. border-radius: 10upx;
  39. background: #F7F7F7;
  40. }
  41. .user-chat-bottom>view {
  42. width: 80upx;
  43. /* background: yellow; */
  44. font-size: 45upx;
  45. }
  46. </style>

user-chat页面

  1. <template>
  2. <view>
  3. <!-- 输入框 -->
  4. <user-chat-bottom @submit="submit"></user-chat-bottom>
  5. </view>
  6. </template>
  7. <script>
  8. import userChatBottom from '@/components/user-chat/user-chat-bottom.vue';
  9. export default {
  10. components:{
  11. userChatBottom
  12. },
  13. data() {
  14. return {
  15. text:""
  16. }
  17. },
  18. methods: {
  19. submit(data){
  20. console.log(data);
  21. }
  22. }
  23. }
  24. </script>
  25. <style>
  26. </style>

结束