查看: 1243|回复: 0

微信原生小程序设置头像昵称示例代码

[复制链接]

748

主题

39

回帖

3907

积分

管理员

总舵主

积分
3907
QQ
发表于 2024-2-1 13:44:04 | 显示全部楼层 |阅读模式
1、wxml

  1. <!--index.wxml-->
  2. <scroll-view class="scrollarea" scroll-y type="list">
  3.   <view class="container">
  4.     <view class="userinfo">
  5.       <block wx:if="{{canIUseNicknameComp && !hasUserInfo}}">
  6.         <button class="avatar-wrapper" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar">
  7.           <image class="avatar" src="{{userInfo.avatarUrl}}"></image>
  8.         </button>
  9.         <view class="nickname-wrapper">
  10.           <text class="nickname-label">昵称</text>
  11.           <input type="nickname" class="nickname-input" placeholder="请输入昵称" bind:change="onInputChange" />
  12.         </view>
  13.       </block>
  14.       <block wx:elif="{{!hasUserInfo}}">
  15.         <button wx:if="{{canIUseGetUserProfile}}" bindtap="getUserProfile"> 获取头像昵称 </button>
  16.         <view wx:else> 请使用2.10.4及以上版本基础库 </view>
  17.       </block>
  18.       <block wx:else>
  19.         <image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image>
  20.         <text class="userinfo-nickname">{{userInfo.nickName}}</text>
  21.       </block>
  22.     </view>
  23.     <view class="usermotto">
  24.       <text class="user-motto">{{motto}}</text>
  25.     </view>
  26.   </view>
  27. </scroll-view>
复制代码
2、wxss
  1. /**index.wxss**/
  2. page {
  3.   height: 100vh;
  4.   display: flex;
  5.   flex-direction: column;
  6. }
  7. .scrollarea {
  8.   flex: 1;
  9.   overflow-y: hidden;
  10. }

  11. .userinfo {
  12.   display: flex;
  13.   flex-direction: column;
  14.   align-items: center;
  15.   color: #aaa;
  16.   width: 80%;
  17. }

  18. .userinfo-avatar {
  19.   overflow: hidden;
  20.   width: 128rpx;
  21.   height: 128rpx;
  22.   margin: 20rpx;
  23.   border-radius: 50%;
  24. }

  25. .usermotto {
  26.   margin-top: 200px;
  27. }

  28. .avatar-wrapper {
  29.   padding: 0;
  30.   width: 56px !important;
  31.   border-radius: 8px;
  32.   margin-top: 40px;
  33.   margin-bottom: 40px;
  34. }

  35. .avatar {
  36.   display: block;
  37.   width: 56px;
  38.   height: 56px;
  39. }

  40. .nickname-wrapper {
  41.   display: flex;
  42.   width: 100%;
  43.   padding: 16px;
  44.   box-sizing: border-box;
  45.   border-top: .5px solid rgba(0, 0, 0, 0.1);
  46.   border-bottom: .5px solid rgba(0, 0, 0, 0.1);
  47.   color: black;
  48. }

  49. .nickname-label {
  50.   width: 105px;
  51. }

  52. .nickname-input {
  53.   flex: 1;
  54. }
复制代码
3、js
  1. // index.js
  2. const defaultAvatarUrl = 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0'

  3. Page({
  4.   data: {
  5.     motto: 'Hello World',
  6.     userInfo: {
  7.       avatarUrl: defaultAvatarUrl,
  8.       nickName: '',
  9.     },
  10.     hasUserInfo: false,
  11.     canIUseGetUserProfile: wx.canIUse('getUserProfile'),
  12.     canIUseNicknameComp: wx.canIUse('input.type.nickname'),
  13.   },
  14.   bindViewTap() {
  15.     wx.navigateTo({
  16.       url: '../logs/logs'
  17.     })
  18.   },
  19.   onChooseAvatar(e) {
  20.     const { avatarUrl } = e.detail
  21.     const { nickName } = this.data.userInfo
  22.     this.setData({
  23.       "userInfo.avatarUrl": avatarUrl,
  24.       hasUserInfo: nickName && avatarUrl && avatarUrl !== defaultAvatarUrl,
  25.     })
  26.   },
  27.   onInputChange(e) {
  28.     const nickName = e.detail.value
  29.     const { avatarUrl } = this.data.userInfo
  30.     this.setData({
  31.       "userInfo.nickName": nickName,
  32.       hasUserInfo: nickName && avatarUrl && avatarUrl !== defaultAvatarUrl,
  33.     })
  34.   },
  35.   getUserProfile(e) {
  36.     // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认,开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
  37.     wx.getUserProfile({
  38.       desc: '展示用户信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
  39.       success: (res) => {
  40.         console.log(res)
  41.         this.setData({
  42.           userInfo: res.userInfo,
  43.           hasUserInfo: true
  44.         })
  45.       }
  46.     })
  47.   },
  48. })
复制代码



道不同,不相为谋!理想要有,万一实现了呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:2513533699@qq.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|鲁ICP备19000917号|鲁公网安备37078302000320号

在本版发帖
关注公众号
QQ客服返回顶部