Vue3+TypeScript学习之旅---联想壁纸库
博客原文地址https://www.yunmobai.cn/blog/14项目演示网站演示:https://bizhi.yunmobai.cn/网站源码:https://gitee.com/baymaxsjj/by-vue-wallpaper网站后端:本项目后端接口来自于联想电脑管家->软件商店->壁纸。推荐下载联想电脑管家,本项目只用于个人学习。完成功能:首页轮播,分类,我的壁纸,壁
项目演示
网站演示:https://gitee.com/baymaxsjj
网站源码:https://gitee.com/baymaxsjj/by-vue-wallpaper
网站后端:本项目后端接口来自于联想电脑管家->软件商店->壁纸。推荐下载联想电脑管家,本项目只用于个人学习。
完成功能:首页轮播,分类,我的壁纸,壁纸展示,滚动加载,全屏展示,加入我的喜欢。
完成进度:95%。基本实现与官方基本功能。
对比展示:第一行本项目,第二行来自官方
本项目是用来学习Vue3和TypeScript知识所编写的项目
项目介绍
Vue:3.0.0-0,Swiper: 6.3.1,TypeScript": 3.9.3,VueX、VueRouter:4.0.0-0。
本项目的是学习Vue3,和TypeScript,使用Vuex对数据进行管理,部分使用了TypeScript,主要是我对这还不太熟,刚接触感觉挺费事,要定义数据类型,不然就报错,所以我只在VueX使用了其语法
Swiper
Swiper是一个非常好的滚动图插件,其中有各自样式的滚动图。这也是我第一次接触到,Vue现在已经出了3.0,而Swiper6也提供了Vue 的组件,所以本项目采用的是Swiper组件方式写的首页轮播图。详情 参考swiper/vue
swiper/vue提供2 个组件SwiperSwiperSlide
基本使用
<swiper
v-if="list.length>0"
:watchSlidesProgress="true"
slidesPerView="auto"
:centeredSlides="true"
:loop="true"
:loopedSlides="5"
:autoplay="true"
navigation
:pagination="{ clickable: true }"
@progress="progress"
@setTransition="setTransition"
class="iconfont"
>
<swiper-slide v-for="item of list" :key="item.id">
<router-link :to="'/class/'+item.targetContent">
<img :src="item.imgUrl" width="644"/>
</router-link>
</swiper-slide>
</swiper>
参数介绍:
详情参考swiper中文网
//
:watchSlidesProgress="true"
//设置slider容器能够同时显示的slides数量
slidesPerView="auto"
//居中显示
:centeredSlides="true"
//循环显示
:loop="true"
//在loop模式下使用slidesPerview:'auto',还需使用该参数设置所要用到的loop个数(一般设置大于可视slide个数2个即可)。
:loopedSlides="5"
//自动播放
:autoplay="true"
//前进后退按钮
navigation
//分页器导航
:pagination="{ clickable: true }"
//回调函数,当Swiper的progress被改变时执行,对切换动画设置
@progress="progress"
//回调函数,每当设置Swiper开始过渡动画时执行
@setTransition="setTransition"
事件:
progress(swiper,progress){
//遍历所有slides轮播图
for (let i = 0; i < swiper.slides.length; i++) {
//获取到轮播
var slide = swiper.slides.eq(i);
var slideProgress = swiper.slides[i].progress;
let modify = 1;
if (Math.abs(slideProgress) > 1) {
modify = (Math.abs(slideProgress) - 1) * 0.3 + 1;
}
let translate = slideProgress * modify * 260 + 'px';
let scale = 1 - Math.abs(slideProgress) / 5;
let zIndex = 999 - Math.abs(Math.round(10 * slideProgress));
slide.transform('translateX(' + translate + ') scale(' + scale + ')');
slide.css('zIndex', zIndex);
slide.css('opacity', 1);
if (Math.abs(slideProgress) > 2) {
slide.css('opacity', 0);
}
}
},
setTransition(swiper,transition) {
for (var i = 0; i < swiper.slides.length; i++) {
var slide = swiper.slides.eq(i)
slide.transition(transition);
}
}
滚动加载
// 文档实际高度(包括不可见内容的高度)
let scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight
// 文档可见内容的高度
let clientHeight = window.innerHeight || Math.min(document.documentElement.clientHeight, document.body.clientHeight)
// 文档内容顶部(垂直滚动时顶部的内容会被隐藏)到它的视口可见内容(实际可以看见的内容顶部)的距离
let scrollTop = document.documentElement.scrollTop || document.body.scrollTop
// 判断垂直滚动条是否滚动到最底部: scrollHeight - scrollTop === clientHeight
if(this.list.count>(parseInt(this.list.skip)+parseInt(this.list.limit))){
if (scrollHeight - scrollTop <= clientHeight+150&&this.loading) {
// // 获取数据
this.loading=false
// console.log(this.list.skip)
let url=this.url.replace('skip=0','skip='+(parseInt(this.list.skip)+parseInt(this.list.limit)))
axios.get(`/apis/${url}`).then(res=>{
this.loading=true
this.$store.commit('addColumns',res.data.data)
// store.commit('setLove',index)
}).catch(e=>{
})
}
}
Bug
其实这个Bug很怪,就是开发是没问题,然后编译之后,轮播图部分功能丢失,主要是前进后退消失,什么毛病,连样式都不一样,我服了,希望有大神指点指点
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)