vue随机头像与昵称

拼搏现实的明天。 2023-01-08 02:19 665阅读 0赞

一、随机头像

1.组件

identicon.js(哈希头像生成器)
在这里插入图片描述
在这里插入图片描述

Github 给无头像用户生成 5x5 像素的 Identicons 头像。这一生成过程使用了用户ID的哈希值,然后根据哈希值每一位的奇偶值来决定对应位置上的像素的开关。这样生成 的图像,配上由哈希值决定的颜色,保证可生成大量独一无二的图像。

当给定相同的哈希值时,它将产生相同的形状和颜色。支持PNG和SVG输出格式。

GitHub地址:https://github.com/stewartlord/identicon.js

2.使用
  1. npm install identicon.js --save
  2. "blueimp-md5": "^2.18.0",
  3. "identicon.js": "^2.3.3",
  • 通过提供哈希字符串和大小来生成Identicon。

    import md5 from ‘blueimp-md5’
    import Identicon from ‘identicon.js’

    // create a base64 encoded PNG
    let hash=md5(Math.random());
    var data = new Identicon(‘d3b07384d113edec49eaa6238ad5ff00’, 420).toString();

    // write to a data URI
    document.write(‘‘);

  • 自定义其他属性,通过提供十六进制字符串和options对象生成Identicon

    // set up options
    var hash = “c157a79031e1c40f85931829bc5fc552”; // 15+ hex chars
    var options = {

    1. foreground: [0, 0, 0, 255], // rgba black
    2. background: [255, 255, 255, 255], // rgba white
    3. margin: 0.2, // 20% margin
    4. size: 420, // 420px square
    5. format: 'svg' // use SVG instead of PNG
    6. };

    // create a base64 encoded SVG
    var data = new Identicon(hash, options).toString();

    // write to a data URI
    document.write(‘‘);

二、随机昵称

实现思路:
  • 随机生成中文范围内的Unicode码
  • 将Unicode码转换成中文
  • 根据长度循环产生拼接
实现过程
1.随机生成 中文范围内的Unicode码

定义一个获取指定范围随机数的方法 (Unicode中文范围:4e00,9fa5)20902字
其中,array.js为unicode16进制码数组集合

  1. import a from "./array.js";
  2. // 获取指定范围内的随机数
  3. function randomAccess() {
  4. return a[Math.floor(Math.random() * a.length)];
  5. }
2.将Unicode码转换成中文

将获取到的Unicode转换成中文,在页面上的Unicode显示方式是\u4e00

unescape解码函数的工作原理:通过找到形式为 %xx 和 %uxxxx 的字符序列(x 表示十六进制的数字),用 Unicode 字符 \u00xx 和 \uxxxx 替换这样的字符序列进行解码。

  1. // 解码 9524 \u9524 %u9524 锤
  2. function decodeUnicode(str) {
  3. //Unicode显示方式是\u4e00
  4. str = "\\u" + str;
  5. str = str.replace(/\\/g, "%");
  6. //转换中文
  7. str = unescape(str);
  8. //将其他受影响的转换回原来
  9. str = str.replace(/%/g, "\\");
  10. return str;
  11. }
  12. replace替换规则了解一下:
  13. .replace(/\//g, '')的作用是把所有的 / 替换为空,说明:
  14. .replace(参数1,参数2)的作用是把 参数1 替换为 参数2,这里参数1为/\//g,参数2为空。意思就是把符合这个表达式的字符串替换为空。
  15. 下面说下这表达式:/\//g
  16. 格式为:/ pattern /[switch]
  17. pattern就是要替换的字符串
  18. [switch]有三个常用值:
  19. g:代表全局匹配
  20. i:代表忽略大小写
  21. gi:代表全局匹配+忽略大小写
  22. [switch]为空的话只匹配第一个符合表达式的值
  23. 所以 /\//g 就是指 所有的 \/,而 \/ 就比较好理解了,就是 / 前面加个转义符号
2.完整的转换
  1. //获取16进制编码
  2. let unicodeNum=randomAccess().toString(16);
  3. //解码为中文
  4. let name=decodeUnicode(unicodeNum);

示例

  1. <template>
  2. <div style="background-color: #eeeeee">
  3. <img @click="getRandomheader" style="border-radius: 50%" :src="imgageUrl" width="100px;" height="100px;">
  4. <span style="position: relative;bottom: 45px;margin-left: 10px" v-text="nickname"></span>
  5. <button @click="getRandomheader">切换头像</button>
  6. <button @click="getRandomNickName">切换昵称</button>
  7. </div>
  8. </template>
  9. <script>
  10. import md5 from 'blueimp-md5'
  11. import Identicon from 'identicon.js'
  12. import {getRandomName} from '../utils/getRandomName.js'
  13. export default {
  14. data() {
  15. return {
  16. imgageUrl:'',
  17. nickname:''
  18. };
  19. },
  20. mounted() {
  21. this.getRandomheader()
  22. this.getRandomNickName()
  23. },
  24. methods: {
  25. getRandomheader() {
  26. let hash=md5(Math.random());
  27. let data=new Identicon(hash,420).toString();
  28. this.imgageUrl="data:image/png;base64,"+data
  29. // let options = {
  30. // foreground: [0, 0, 0, 255], // rgba black
  31. // background: [255, 255, 255, 255], // rgba white
  32. // margin: 0.2, // 20% margin
  33. // size: 100, // 420px square
  34. // format: 'svg' // use SVG instead of PNG
  35. // };
  36. // let data = new Identicon(hash, options).toString();
  37. // this.imgageUrl="data:image/svg+xml;base64,"+data
  38. },
  39. getRandomNickName() {
  40. let name=getRandomName(Math.floor(Math.random() * 3+2))
  41. this.nickname=name
  42. },
  43. },
  44. };
  45. </script>
  46. <style scoped>
  47. </style>

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,665人围观)

还没有评论,来说两句吧...

相关阅读