考虑到浏览器的兼容性,可使用三种语法获取页面高度
- 1、window.pageYOffset页面Y轴的偏移量
- 2、document.documentElement.scrollTop 文档的html元素的高度
- 3、document.body.scrollTop 在IE下,获取html的高度
//该语句判断是否需要进行fixed定位
let scrollTop = window.pageYOffset||document.documentElement。scrollTop|| document.body.scrollTop;
initHeight(){
this.isFixed = scrollTop > 152?true:false;
}
三种路由跳转方式
- 1
this.$router.push('/order/pay');
- 2
this.$router.push({
name:'order-pay',//name这里指路由的名称
query:{
orderNo//这里是传递的参数
}
})
- 3
this.$router.push({
path: "/order/pay", //path是路径
params: {
orderNo
}
});
第二种和第三种的区别是:
第二种使用的是路由的名称跳转;第三种使用的是路径跳转 query传参和params传参的区别是:query传参可以将参数添加到地址栏里面去
使用svg图片优点:
- 1、高清,不失真
- 2、不占用带宽,拉取时不是一个真实的图片地址栏,只是一串代码,没有真实的图片地址
- 3、svg代码量相对图片要小很多,至少不用拉请求
- 4、是前端性能优化的一部分
- 5、用svg替换一部分图片,减少请求数量
路由按需加载方案,两种:
在router.js文件中修改路由,
- 1、利用Promise语法实现路由按需加载方案,不用安装插件
- 2、利用import语法实现路由按需加载方案,需要安装@babel/plugin-syntax-dynamic-import插件, 执行命令行
npm i @babel/plugin-syntax-dynamic-import --save
npm i babel-plugin-component --save
{
path: '/product/:id',
name: 'product',
/*利用Promise语法实现路由按需加载方案,不用安装插件
component: resolve => require(['./pages/product.vue'],resolve),
*/
//利用import语法实现路由按需加载方案,需要安装babel/plugin-syntax-dynamic-import插件
component: () => import('./pages/product.vue')
}
element-ui
安装:
npm i element-ui --save
引入:
局部插件使用
import { Message } from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
全局插件的使用
Vue.use(Message)
Vue.prototype.$message = Message
滚动加载
安装:
npm i vue-infinite-scroll --save
导入:
import infiniteScroll from 'vue-infinite-scroll'
配置:
export default {
directives: {
infiniteScroll
}
}
使用:
<div class="scroll-more"
v-infinite-scroll="scrollMore" //回调函数
infinite-scroll-disabled="true" //由变量busy决定是否执行回调函数
infinite-scroll-distance="410" //页面滚动到离页尾多少像素时触发回调函数
v-if="false">
<img src="/imgs/loading-svg/loading-spinning-bubbles.svg" alt="" v-show="loading">
</div>
//回调函数示例
scrollMore(){
this.busy = true;
setTimeout(() => {
this.pageNum++;
this.getList();
}, 500);
},
// 专门给scrollMore使用
getList(){
this.loading = true;
this.axios.get('/orders',{
params:{
pageSize:10,
pageNum:this.pageNum
}
}).then((res)=>{
this.list = this.list.concat(res.list);
this.loading = false;
if(res.hasNextPage){
this.busy=false;
}else{
this.busy=true;
}
});
}
better-scroll 移动端页面滚动插件
此插件对语法有结构的要求
附官网链接:ustbhuangyi.github.io/better-scro…
安装:
npm i better-scroll --save
引入:
import Bscroll from 'better-scroll'
执行:
mounted(){ //DOM挂载完毕后执行
this.scroll = new Bscroll(this.$refs.wrapper)
}
城市列表搜索逻辑
父组件ajax --> 父子传值 --> 子组件接收 --> 遍历 --> 查找
示例:
data () {
return {
keyword: '',
list: [],
timer: null
}
}
watch: {
keyword () {
if (this.timer) {
clearTimeout(this.timer)
}
if (!this.keyword) {
this.list = []
return
}
this.timer = setTimeout(() => {
const result = []
for (let i in this.cities) {
this.cities[i].forEach((value) => {
if (value.spell.indexOf(this.keyword) > -1 || value.name.indexOf(this.keyword) > -1) {
result.push(value)
}
})
}
this.list = result
}, 100)
}
}
keep-alive
vue自带的抽象组件,用于把组件缓存进内存中,避免重复渲染 优点是不会生成DOM元素
App.vue -->
<keep-alive>
<router-view /> //包裹
</keep-alive>
ref和$refs
-
1、ref 加在普通的元素上,用this.ref.name 获取到的是dom元素
-
2、ref 加在子组件上,用this.ref.name 获取到的是组件实例,可以使用组件的所有方法。
示例:
<input type="text" ref="input1"/>
console.log(this.$refs.input1)
//结果:
<input type="text" />
图片的懒加载
v-lazyload,是性能优化的范畴
目的是:
提升首屏加载的速度,提升用户体验,减少带宽,滚动到相应位置才进行加载,避免首次加载过多图片,只加载可视窗口图片 npm lazyload官网,有使用语法
下载依赖
npm install vue-lazyload --save
导入
main.js import VueLazyLoad from 'vue-lazyload'
加载
Vue.use(VueLazyLoad,{
loading:'/imgs/loading-svg/loading-bars.svg' //加载时的图片
})
使用
v-lazy="变量名" || v-lazy="'string'"
v-lazy指令
- 1、 v-lazy指令懒加载 双引号中储存的是字符串,需要用单引号再次引起来
<img v-lazy="'/imgs/nav-img/nav-3-4.jpg'" alt />
- 2、v-lazy指令懒加载 双引号中储存的是变量名
<img v-lazy="item.img" alt />