项目总结:vue(3),2024年最新【2024前端最新学习路线

(6)添加点击事件实现弹层显示

1)添加click事件showDetail()

2)在此处可以实现API调用,定义headerDetailComp是一个组件,并且使用驼峰形式引入组件,传入props,创建之后通过组件调用show()方法控制显示。同理使用hide()方法控制浮层关闭。

methods: {

showDetail() {

this.headerDetailComp = this.headerDetailComp || this.$createHeaderDetail({

$props: {

seller: ‘seller’

}

})

this.headerDetailComp.show()

}

},

3)控制显示:在head-detail组件中添加v-show=”visible”,并通过show方法修改visible的true 和 false。为了简化之后的操作,使用mixin抽离出来

const EVENT_SHOW = ‘show’

const EVENT_HIDE = ‘hide’

export default {

data() {

return {

visible: false

}

},

methods: {

show() {

this.visible = true

this.$emit(EVENT_SHOW)

},

hide() {

this.visible = false

this.$emit(EVENT_HIDE)

}

}

}

(7)过渡动画显示浮层

在head-tail中使用transition,定义name=”fade”,然后写动画

&.fade-enter-active, &.fade-leave-active

transition: all 0.5s

&.fade-enter, &.fade-leave-active

opacity: 0

background: $color-background

三、星级评分组件

============

1. 概括


显示是由三组图片组成(全星,半星,空),使用props接收size和score两个参数。计算属性依赖size实现三种大小的样式展现,通过计算score在数组中放入响应的星星状态,使用v-for遍历数组显示评分。

2. 实现


效果:使用图片素材 全星(on) 半星(half) 空(off) 拼接评分效果

(1)组件传值

使用span绑定starType;v-for遍历itemClasses数组,使用计算属性显示。

Props接收两个参数:size大小(有三种类型24 36 48)score分数

props: {

size: {

type: Number

},

score: {

type: Number

}

},

(2)数组实现评分

定义常量length ,cls_on, cls_half, cls_off分别记录评星长度,和星级

定义result数组,通过props中的score拿到分数,计算四舍五入之后的评分,得到hasDecimal是否有半星,integer有多少个全星。

做循环,将全星cls_on放入数组result,如果有半星就放入半星。再循环补上空星。

itemClasses() {

const result = []

const score = Math.floor(this.score * 2) / 2

const hasDecimal = score % 1 !== 0

const integer = Math.floor(score)

for (let i = 0; i < integer; i++) {

result.push(CLS_ON)

}

if (hasDecimal) {

result.push(CLS_HALF)

}

while (result.length < LENGTH) {

result.push(CLS_OFF)

}

return result

}

}

(3)动态添加样式

使用computed计算属性计算starType()需要依赖size, 返回‘star’ + this.size,因此可以添加不同的样式star-24 star-36 star-48

.star

display: flex

align-items: center

justify-content: center

.star-item

background-repeat: no-repeat

&.star-48

.star-item

width: 20px

height: 20px

margin-right: 22px

background-size: 20px 20px

&:last-child

margin-right: 0

&.on

bg-image(‘star48_on’)

&.half

bg-image(‘star48_half’)

&.off

bg-image(‘star48_off’)

&.star-36

.star-item

width: 15px

height: 15px

margin-right: 6px

background-size: 15px 15px

&:last-child

margin-right: 0

&.on

bg-image(‘star36_on’)

&.half

bg-image(‘star36_half’)

&.off

bg-image(‘star36_off’)

&.star-24

.star-item

width: 10px

height: 10px

margin-right: 3px

background-size: 10px 10px

&:last-child

margin-right: 0

&.on

bg-image(‘star24_on’)

&.half

bg-image(‘star24_half’)

&.off

bg-image(‘star24_off’)

(4)组件的使用

引入组件并注册,即可使用。并且组件接收两个参数score type

四、tab组件

===========

1.  概括


tab组件使用cube-ui提供的tab-bar来实现页面切换。为了实现点击tab做页面切换,写入change事件(cube-ui的slide的)在slide页面切换时触发,并且派发当前页面的索引值,从而实现页面切换。为了优化体验,希望tab滑动时下划线可以跟着页面实现流畅滚动,可以根据tab占比和slide占比相同实时计算tab滚动位置。

由于开始tab标签是写死的,个数也是固定的,因此希望这个tab可以接收一个数组,包含tab个数,tab名称,对应的组件,而tab只是用来维护这些内容,因此v-for遍历,使用动态提供组件。并在app.vue中添加默认的tab数组。

2. 布局


使用cube-ui的tab-bar组件实现页面切换,组件放在app.vue下面

3. 实现


(1)部分

:showSlider是否显示下划线;

v-model当前选择的tab;在后面设置了一个计算属性。通常计算属性就是一个get,但是这里添加了一个set,当点击tab-bar某一项时,会修改label,set主要用于计算当前的index值(index就是一个当前页面的索引,而index也会作为的:initial-index=”index”传入,当点击某一项时,index会发生改变,会触发set(),然后根据当前tab值找到索引,从而实现点击切换。)

computed: {

selectedLabel: {

get() {

return this.tabs[this.index].label

},

set(newVal) {

this.index = this.tabs.findIndex((value) => {

return value.label === newVal

})

}

}

}

:data=”tab”是一个数组,包含label(比如:seller goods ratings)

(2)部分

:loop设置为false,不需要轮播; 显示索引为index

<cube-tab-bar

:showSlider=true

:useTransition=false

v-model=“selectedLabel”

:data=“tabs”

ref=“tabBar”

class=“border-bottom-1px”>

(3)上下滚动联动

思考:slide滚动到某一页,希望可以派发一个事件,根据事件判断滑动到某一页然后做切换。cube-ui对于slide组件提供了一个change事件,他会在slide页面切换时触发,并且派发当前页面的索引值。

做法:给cube-slide 监听一个change事件onchange(),并编写方法,参数current当前索引,拿到索引,把它赋值给index。当index变化,selectedLabel就会重新计算,从而实现切换。

onChange(current) {

this.index = current

const component = this.$refs.component[current]

component.fetch && component.fetch()

},

(4)下划线相对滚动

思考:知道slide实时滚动的位置,因此下划线的滚动比例应该和slide页面的比例相同。

<cube-slide

:loop=false

:auto-play=false

:show-dots=false

:initial-index=“index”

ref=“slide”

@change=“onChange”

@scroll=“onScroll”

:options=“slideOptions”>

1)首先,需要实时知道slide滚动的位置,使用cube-ui中的onscroll(res)事件,它会派发两个事件,其中对cube-slide配置(option会传入两个参数listenscroll probetype)这样就可以实时拿到坐标.

slideOptions: {

listenScroll: true,

probeType: 3,

directionLockThreshold: 0 // 不会斜着滚动

}

2)写onscroll()方法

其中cube-ui提供了一个setSliderTransform的API,可以改变slide的位置。

首先拿到slide宽度,和整个slide组件的宽度,计算比例,计算下划线滚动的位置。从而可以实时滚动。

onScroll(pos) {

const tabBarWidth = this. r e f s . t a b B a r . refs.tabBar. refs.tabBar.el.clientWidth

const slideWidth = this.$refs.slide.slide.scrollerWidth

const transform = -pos.x / slideWidth * tabBarWidth

this.$refs.tabBar.setSliderTransform(transform)

}

3)但是效果不自然,这是因为默认的transform是当我们点击时,本身有一个缓动,因此需要关闭默认缓动。:useTransition=false

(5)tab组件抽象和封装

问题:由于开始tab标签是写死的,个数也是固定的,因此希望这个tab可以接收一个数组,包含tab个数,tab名称,对应的组件,而tab只是用来维护这些内容。

思考:tab组件需要label。Tab通过props传入tab数组。并且组件是通过tab传入,不写死组件,v-for遍历,使用动态提供组件。

在app.vue中添加计算属性

computed: {

tabs() {

return [

{

label: ‘商品’,

component: Goods,

data: {

seller: this.seller

}

},

{

label: ‘评价’,

component: Ratings,

data: {

seller: this.seller

}

},

{

label: ‘商家’,

component: Seller,

data: {

seller: this.seller

}

}

]

}

},

(6)组件使用

(7)扩展props从而可以设置初始页面

<tab :tabs=“tabs” :initialIndex=1>

props: {

tabs: {

type: Array,

default() {

return []

}

},

initialIndex: {

type: Number,

default: 0

}

},

(8)样式

Vue css如果希望scoped样式的一个选择器作用的更深,可以使用>>>操作

.tab

.cube-tab

padding: 10px 0

display: flex

flex-direction: column

height: 100%

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

总结一下

面试前要精心做好准备,简历上写的知识点和原理都需要准备好,项目上多想想难点和亮点,这是面试时能和别人不一样的地方。

还有就是表现出自己的谦虚好学,以及对于未来持续进阶的规划,企业招人更偏爱稳定的人。

万事开头难,但是程序员这一条路坚持几年后发展空间还是非常大的,一切重在坚持。

为了帮助大家更好更高效的准备面试,特别整理了《前端工程师面试手册》电子稿文件。

前端面试题汇总

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-NX3GCZwS-1712804708615)]

总结一下

面试前要精心做好准备,简历上写的知识点和原理都需要准备好,项目上多想想难点和亮点,这是面试时能和别人不一样的地方。

还有就是表现出自己的谦虚好学,以及对于未来持续进阶的规划,企业招人更偏爱稳定的人。

万事开头难,但是程序员这一条路坚持几年后发展空间还是非常大的,一切重在坚持。

为了帮助大家更好更高效的准备面试,特别整理了《前端工程师面试手册》电子稿文件。

前端面试题汇总

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-hPuPtjcL-1712804708615)]

  • 22
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值