2024年uniapp实现动态标记效果详细步骤【前端开发】,BAT常见的20道前端面试题详解

web浏览器中的javascript

window对象

  • 计时器

  • 浏览器定位和导航

  • 浏览历史

  • 浏览器和屏幕信息

  • 对话框

  • 错误处理

  • 作为window对象属性的文档元素

首先放一下效果图:


I.场景的引入及难点分析


这个效果的场景有很多的实际意义,比如说制作一个实时的点赞、收藏或关注某个人、商品等等功能的时候,需要一个实时的前端反馈效果。

这个效果看似非常简单,但是有两个难点

🌀第一个点在于实现:事先没有定义的、需要从后端实时获取的内容选中。这是什么意思呢?比如说上面gif图中的这些人物的信息,每一行都是从后端发起请求获取后渲染到前端的,而不是我们实现就定义好的内容,因此实现选中它们中的某一行,是需要一些特殊方法的。

🌀第二个点在于实现将已经被用户标记的内容在下一次获取后刷新它的状态为已标记。这是什么意思呢?比如说上面gif图中的这些人物对象,有一些已被该用户添加为关心,那么当用户下一次进入该页面时,这些已经被添加关心的对象需要以“红心”状态显现出来。这个点的难度还不算大,只需要在每一次获取后端的内容后对标记对象进行状态更新即可。


II.动态标记效果实现思路和步骤


首先,整体的思路是利用动态类名对不同的元素进行选择。下面对具体的步骤进行介绍:

1️⃣搭建该效果的基础前端组件:

{{item.name}}

<span @click = “addSpecialList(item.uid,index)” :class=“currentFontIconClass” >

简单介绍一下上面的部分:“content”类的view组件是每一行元素的父容器,可以看到使用了v-for循环遍历从后端获取的数据并渲染。上面的部分除了动态类名外,其他的地方与普通的渲染没有任何区别。


2️⃣动态类名数组的妙用:

第二步就是该效果的实现核心:首先**,动态类名这个小技巧大家一定都听说过,用一个变量替代普通的静态字符串类名。这里把动态类名进行了进一步的加工:使用动态类名数组**。

那为什么需要用到动态类名数组?思考一个棘手的问题:如果从后端获取了一系列的数据,并通过v-for渲染到前端,当用户点击了某一行的元素,我们怎么能选中这一行呢?这项看起来很easy的功能,但分析后发现其实并不容易,究其原因是因为每一行的元素都是v-for直接进行渲染的,我们如果判定用户的点击事件,那么得到的结果就是无论用户点击了哪一行元素,返回的事件都是同一个,这将会造成一个现象:用户点击了心形图标进行“标记”,之后所有的心形图标都变成了红色的bug

那么这里给出一种实现的思路:动态类名数组。什么意思呢?就是在最初渲染的时候,把类名部分用一个类名数组动态赋值,这个类名数组提前定义好它的元素,并且确保每一个元素都是不同的、且有规律可循的,例如下面这样:

currentFontIconColorClass : [“un0”,“un1”,“un2”,“un3”,“un4”,“un5”,

“un6”,“un7”,“un8”,“un9”,“un10”,“un11”,“un12”,“un13”,“un14”,“un15”,

“un16”,“un17”,“un18”,“un19”,“un20”,“un21”,“un22”,“un23”,“un24”,“un25”,

“un26”,“un27”,“un28”,“un29”,“un30”,“un31”,“un32”,“un33”,“un34”,“un35”,

“un36”,“un37”,“un38”,“un39”,“un40”,“un41”,“un42”,“un43”,“un44”,“un45”,

“un46”,“un47”,“un48”,“un49”]

}

✅每一个元素都不同,是为了实现唯一选中,这也是我们的基本需求。

✅有规律可循,是为了后面我们通过用户的点击事件,能够通过一些逻辑判断哪一个元素被点击

此时回看第一步给出的代码块,发现原来这个span标签被赋值了一个动态类名数组:

<span @click = “addSpecialList(item.uid,index)” :class=“currentFontIconClass” >


3️⃣实现点击元素选中:

紧接上一步最后,我们已经把span标签进行了动态类名数组处理。接下来,介绍怎么完整实现点击选中:

首先,给父span标签的子标签span添加一个点击事件,至于为什么有一个子span标签,是因为子span标签是实际上是用来显示心形图标的标签。这个点击事件的对象毫无疑问就是心形图标,其中传参要特别注意把index作为参数传入,这是我们在点击事件函数中获取唯一元素的必要参数。(第一个参数是原项目的特殊参数,这里不需要care它,重点关注index参数)

接下来,我们对点击函数进行处理:

addSpecialList(e,f){

this.uid = e;

if(this.currentFontIconColorClass[f] == “un” + f.toString()){

uni.request({

url:‘https://xxxx’,

method:‘GET’,

data:{username : this.username, uid: this.uid},

header: {

‘content-type’: ‘application/x-www-form-urlencoded’ //表明后端接收的是(表单)字符串类型,例如’id=1231454&sex=男’

},

success: (res) => {

if(res.data.status == “200”){

uni.showToast({

title: “已添加特别关心”

})

}

}

})

this.currentFontIconColorClass[f] = “Specilized”;

Vue 面试题

1.Vue 双向绑定原理
2.描述下 vue 从初始化页面–修改数据–刷新页面 UI 的过程?
3.你是如何理解 Vue 的响应式系统的?
4.虚拟 DOM 实现原理
5.既然 Vue 通过数据劫持可以精准探测数据变化,为什么还需要虚拟 DOM 进行 diff 检测差异?
6.Vue 中 key 值的作用?
7.Vue 的生命周期
8.Vue 组件间通信有哪些方式?
9.watch、methods 和 computed 的区别?
10.vue 中怎么重置 data?
11.组件中写 name 选项有什么作用?
12.vue-router 有哪些钩子函数?
13.route 和 router 的区别是什么?
14.说一下 Vue 和 React 的认识,做一个简单的对比
15.Vue 的 nextTick 的原理是什么?
16.Vuex 有哪几种属性?
17.vue 首屏加载优化
18.Vue 3.0 有没有过了解?
19.vue-cli 替我们做了哪些工作?

如果你觉得对你有帮助,可以戳这里获取:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

和 React 的认识,做一个简单的对比
15.Vue 的 nextTick 的原理是什么?
16.Vuex 有哪几种属性?
17.vue 首屏加载优化
18.Vue 3.0 有没有过了解?
19.vue-cli 替我们做了哪些工作?
[外链图片转存中…(img-pqGveTHg-1714819219825)]

如果你觉得对你有帮助,可以戳这里获取:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值