20:vue-router进阶:滚动行为
20.1 介绍:使用前端路由,当切换到新路由时,想要页面滚到顶部,或者是保持原先的滚动位置,就像重新加载页面那样。
20.2 配置:配置在路由配置文件中,与路由配置信息属性routes平级
export default new VueRouter({
routes,
// 路由跳转时,使滚动条在顶部(滚动行为)
scrollBehavior(to, from, savedPosition) {
return { y: 0 }
}
})
export default new VueRouter({
routes,
// 路由跳转时,使滚动条距离顶部300px(滚动行为)
scrollBehavior(to, from, savedPosition) {
return { y: 300 }
}
})
21:放大镜实现(vue中)
template
<template>
<div class="spec-preview">
<img :src="url ? url : skuDefaultImg" />
<div
ref="eventRef"
class="event"
@mousemove="mousemove"
@mouseout="mouseout"
></div>
<div class="big" ref="bigRef">
<img ref="bigImgRef" :src="url ? url : skuDefaultImg" />
</div>
<div class="mask" ref="maskRef"></div>
</div>
</template>
script:主要在methods中
<script>
export default {
name: "Zoom",
props: ["skuDefaultImg"],
data() {
return {
url: "",
};
},
mounted() {
// 更改默认图片
this.$bus.$on("changeImg", (url) => {
this.url = url;
});
},
methods: {
mousemove(e) {
const big = this.$refs.bigRef;
const mask = this.$refs.maskRef;
const event = this.$refs.eventRef;
const bigImg = this.$refs.bigImgRef;
big.style.display = "block";
mask.style.display = "block";
// 获取小图片左、上对应值
let left = e.offsetX - mask.offsetWidth / 2;
let top = e.offsetY - mask.offsetHeight / 2;
// 防止越界
if (left < 0) left = 0;
if (top < 0) top = 0;
if (left > event.offsetWidth - mask.offsetWidth)
left = event.offsetWidth - mask.offsetWidth;
if (top > event.offsetHeight - mask.offsetHeight)
top = event.offsetHeight - mask.offsetHeight;
// 改变位置
mask.style.left = left + "px";
mask.style.top = top + "px";
// 移动大图片
bigImg.style.left = -2 * left + "px";
bigImg.style.top = -2 * top + "px";
},
mouseout() {
this.$refs.bigRef.style.display = "none";
this.$refs.maskRef.style.display = "none";
},
},
};
</script>
css
<style lang="less">
.spec-preview {
position: relative;
width: 400px;
height: 400px;
border: 1px solid #ccc;
img {
width: 100%;
height: 100%;
}
.event {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
z-index: 998;
}
.mask {
width: 50%;
height: 50%;
background-color: rgba(0, 255, 0, 0.3);
position: absolute;
left: 0;
top: 0;
display: none;
}
.big {
width: 100%;
height: 100%;
position: absolute;
top: -1px;
left: 100%;
border: 1px solid #aaa;
overflow: hidden;
z-index: 998;
display: none;
background: white;
img {
width: 200%;
max-width: 200%;
height: 200%;
position: absolute;
left: 0;
top: 0;
}
}
}
</style>