[前端] vue+js实现微信上传图片选择功能

1858 0
王子 2022-10-21 15:35:08 | 显示全部楼层 |阅读模式
本文实例为大家分享了vue+js实现微信上传图片选择的具体代码,供大家参考,具体内容如下
需求:实现微信发送图片或发朋友圈选择图片功能 可实现选后点击后 选择图片标记值自减或自增
最终效果:


思路:
1、给原始数组中增加一个用于判断是否选中的状态默认为false和选中序号值 默认为空
2、定义一个选中初始值 作为计算选中值
  1. data() {
  2.   return {
  3.    initial:0, //设置选中初始值 作为最终选择几个依据
  4.    imgList:[ //初始数据
  5.     {url:'',state:false,serial:'',},
  6.     {url:'',state:false,serial:'',},
  7.     {url:'',state:false,serial:'',},
  8.     {url:'',state:false,serial:'',},
  9.     {url:'',state:false,serial:'',},
  10.    ]
  11.   };
  12. },
复制代码
3、点击选中/取消时 让对应的数据自增或自减
逻辑
1.判断所点击的项的选中状态
开始未选中 — 切换选中状态 – 默认初始值自增1 — 赋值给当前项
  1. if(!item.state){ //开始未选中
  2.     //点击选中,改变当前项的选中状态 设置为true
  3.     item.state = true
  4.     // 选中初始值 +1
  5.     this.initial++
  6.     // 当前项赋值=设置初始值
  7.     item.serial = this.initial
  8.    }```
复制代码
.选中下点击取消(状态值为true时点击)
更改选中状态 — 设置一个空值 用于接受最终几个值选中 用于更改选中初始值 — 跑循环去自减 — 判断 当前点击的选中值 和 数组中所有选中值做对比 — 数组中的选中值 大于 当前选中值 数组中大于的值自减1 – 判断数组选中状态用于统计-- 有选中则 设置控制自+1 – 给选中初始值 赋值 – 当前选中值清空
  1. else { //选中下点击取消(状态值为true时点击)
  2.     // 改变当前项选中状态为false
  3.     item.state = false
  4.     // 设置一个空值 用于接受最终几个值选中 用于更改选中初始值
  5.     let xuanzhong = 0
  6.     // 跑循环去自减
  7.     this.imgList.forEach((items,index) => {
  8.      // items = 循环所需要的每一项
  9.      if(items.serial>item.serial){ //判断 当前点击的选中值 和 数组中所有选中值做对比
  10.       // 数组中的选中值 大于 当前选中值 数组中大于的值自减1
  11.       items.serial--
  12.      }
  13.      if(items.state){//判断数组选中状态用于统计
  14.       // 有选中则 设置控制自+1
  15.       xuanzhong ++
  16.      }
  17.     })
  18.     // 给选中初始值 赋值
  19.     this.initial=xuanzhong
  20.     // 当前选中值清空
  21.     item.serial = ''
  22.    }
复制代码
完整代码
  1. <template>
  2. <div class="app">
  3.   <div class="bgView">
  4.    <div class="bottomView">
  5.     <div class="ceshitt">
  6.      <div class="imgDiv" v-for="(item,index) in imgList" :key="index">
  7.       <img class="bgImg" src="../../assets/img/BGImg1.png" alt="">
  8.       <div :class="['selectBox',item.state ? 'selectClass' :'']" @click="selectClick(item,index)">
  9.        <p v-if="item.state">{{item.serial}}</p>
  10.       </div>
  11.      </div>
  12.     </div>
  13.    </div>
  14.   </div>
  15. </div>
  16. </template>
  17. <script>
  18. export default {
  19. data() {
  20.   return {
  21.    initial:0, //设置选中初始值 作为最终选择几个依据
  22.    imgList:[ //初始数据
  23.     {url:'',state:false,serial:'',},
  24.     {url:'',state:false,serial:'',},
  25.     {url:'',state:false,serial:'',},
  26.     {url:'',state:false,serial:'',},
  27.     {url:'',state:false,serial:'',},
  28.    ]
  29.   };
  30. },
  31. components: {},
  32. created() {
  33. },
  34. mounted() {
  35. },
  36. methods: {
  37.   selectClick(item,val){
  38.    // item = 点击事件带过来整条参数
  39.    // val = 所点击的下标
  40.    // 逻辑 1、在原始数组中对象中增加2个值 --- 选中状态 默认false 选中值 默认'',
  41.    // 判断所点击的项的选中状态
  42.    if(!item.state){ //开始未选中
  43.     //点击选中,改变当前项的选中状态 设置为true
  44.     item.state = true
  45.     // 选中初始值 +1
  46.     this.initial++
  47.     // 当前项赋值=设置初始值
  48.     item.serial = this.initial
  49.    }else { //选中下点击取消(状态值为true时点击)
  50.     // 改变当前项选中状态为false
  51.     item.state = false
  52.     // 设置一个空值 用于接受最终几个值选中 用于更改选中初始值
  53.     let xuanzhong = 0
  54.     // 跑循环去自减
  55.     this.imgList.forEach((items,index) => {
  56.      // items = 循环所需要的每一项
  57.      if(items.serial>item.serial){ //判断 当前点击的选中值 和 数组中所有选中值做对比
  58.       // 数组中的选中值 大于 当前选中值 数组中大于的值自减1
  59.       items.serial--
  60.      }
  61.      if(items.state){//判断数组选中状态用于统计
  62.       // 有选中则 设置控制自+1
  63.       xuanzhong ++
  64.      }
  65.     })
  66.     // 给选中初始值 赋值
  67.     this.initial=xuanzhong
  68.     // 当前选中值清空
  69.     item.serial = ''
  70.    }
  71.   },
  72. },
  73. };
  74. </script>
  75. <style scoped>
  76. .ceshitt{
  77. display: flex;
  78. width: 100%;
  79. height: 220px;
  80. flex-wrap: wrap;
  81. /* justify-content: space-between; */
  82. }
  83. .imgDiv{
  84. width: 30%;
  85. position: relative;
  86. margin-right: 10px;
  87. }
  88. .bgImg{
  89. position: absolute;
  90. height: 100px;
  91. width: 100%;
  92. }
  93. .selectBox{
  94. width: 15px;
  95. height: 15px;
  96. line-height: 15px;
  97. border-radius: 50%;
  98. text-align: center;
  99. position: absolute;
  100. top: 8px;
  101. right: 8px;
  102. z-index: 100;
  103. color:#FFF ;
  104. border: 1px solid cyan;
  105. }
  106. .selectClass{
  107. background-color:#4cc25b ;
  108. }
  109. </style>
复制代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持中国红客联盟。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行