vue通过 vue.mixin(混合)实现 任意页面记录滚动条位置(路由router.query参数一致) 并跳转到上次的位置
2017-11-16 17:28
1571 查看
main.js 中编写全局混合事件,会在子组件前出发对应事件,此功能需要以下几个条件:
1.滚动页面必须为 keep-alive:true,
通过meta.keppAlive去动态加载需要缓存的组件,以后只需要在路由index.js里把false改成true
/*
* 核心代码
*/
Vue.mixin({
data(){
return {
prev_Scroll_Top:0,
prev_Page_Param:null,
cur_Page_Param:null,
scrollBox:"",
scrollContent:"",
}
},
methods:{
_jmpScroll(){
if(this.prev_Scroll_Top){
console.log("needJmp");
var self = this;
$(self.scrollBox).scrollTop(self.prev_Scroll_Top + 30);
}
},
_calcParams(){
var curparams = null;
var fullPath = this.$route.fullPath;
var ind = fullPath.indexOf("?");
if(ind>-1){
curparams = fullPath.substr(ind+1,fullPath.length);
}
this.cur_Page_Param = curparams;
if((this.prev_Page_Param == this.cur_Page_Param) && this.cur_Page_Param){
this._jmpScroll();
}else{
this.prev_Scroll_Top=0;
}
this.prev_Page_Param = this.cur_Page_Param;
this.cur_Page_Param = null;
},
_divBindScroll(){
var self = this;
$(self.scrollBox).scroll(function(){
var BoxoffsetHeight = Math.abs($(self.scrollContent).offset().top);
console.log(BoxoffsetHeight);
self.prev_Scroll_Top = BoxoffsetHeight;
});
}
},
activated(){
this._calcParams();
this._divBindScroll();
}
})
var vm = new Vue({
el: '#app',
router,
store,
template: '<App/>',
components: {
App
}
})
注:子组件data中需要加入
8b38
以上两个对应的滚动盒子和内容。scrollBox: scrollContent:,例如:
切换页面时,判断是否跳转滚动位置,是根据query的参数,所以如果你没有参数,此情况不适用。
1.滚动页面必须为 keep-alive:true,
通过meta.keppAlive去动态加载需要缓存的组件,以后只需要在路由index.js里把false改成true
/*
* 核心代码
*/
Vue.mixin({
data(){
return {
prev_Scroll_Top:0,
prev_Page_Param:null,
cur_Page_Param:null,
scrollBox:"",
scrollContent:"",
}
},
methods:{
_jmpScroll(){
if(this.prev_Scroll_Top){
console.log("needJmp");
var self = this;
$(self.scrollBox).scrollTop(self.prev_Scroll_Top + 30);
}
},
_calcParams(){
var curparams = null;
var fullPath = this.$route.fullPath;
var ind = fullPath.indexOf("?");
if(ind>-1){
curparams = fullPath.substr(ind+1,fullPath.length);
}
this.cur_Page_Param = curparams;
if((this.prev_Page_Param == this.cur_Page_Param) && this.cur_Page_Param){
this._jmpScroll();
}else{
this.prev_Scroll_Top=0;
}
this.prev_Page_Param = this.cur_Page_Param;
this.cur_Page_Param = null;
},
_divBindScroll(){
var self = this;
$(self.scrollBox).scroll(function(){
var BoxoffsetHeight = Math.abs($(self.scrollContent).offset().top);
console.log(BoxoffsetHeight);
self.prev_Scroll_Top = BoxoffsetHeight;
});
}
},
activated(){
this._calcParams();
this._divBindScroll();
}
})
var vm = new Vue({
el: '#app',
router,
store,
template: '<App/>',
components: {
App
}
})
注:子组件data中需要加入
8b38
以上两个对应的滚动盒子和内容。scrollBox: scrollContent:,例如:
切换页面时,判断是否跳转滚动位置,是根据query的参数,所以如果你没有参数,此情况不适用。
相关文章推荐
- Vue-router路由判断页面未登录跳转到登录页面的实例
- js 实现刷新页面后回到记录时滚动条的位置
- Vue.js实战之利用vue-router实现跳转页面
- vue-router实现几级页面跳转及传参
- js 实现刷新页面后回到记录时滚动条的位置
- js实现刷新页面后回到记录时滚动条的位置【两种方案可选】
- vue-router实现单页面路由原理
- 解决element-ui中el-menu组件作为vue-router模式在刷新页面后default-active属性与当前路由页面不一致问题的方法
- Vue.js实战之利用vue-router实现跳转页面
- vue通过路由实现页面刷新的方法
- JS如何实现点击页面内任意的链接均加参数跳转?
- 使用react-router-dom优雅的实现页面(路由)跳转, 而且保持当前页面状态
- 通过position属性实现文本在页面中的任意位置
- Vue-router路由判断页面未登录跳转到登录页面
- JS如何实现点击页面内任意的链接均加参数跳转
- 页面的div中有滚动条,js实现刷新页面后回到记录时滚动条的位置
- Vue实现前台页面组件化路由跳转
- vue-router登录校验后跳转到之前指定页面如何实现
- Vue中的 this.$router.push() 参数获取 (通过路由传参)
- vue-router实现登录和跳转到指定页面,vue-router 传参