JS实现页面进入和返回定位到具体位置


Posted in Javascript onDecember 08, 2016

其实浏览器也自带了返回的功能,也就是说,自带了返回定位的功能。正常的跳转,返回确实可以定位,但是有些特殊场景就不适用了。例如,某些元素是在某种情况下才加上的,又或者多级定位。

目前,我知道的返回定位到具体位置有两种方法:

①利用id定位,在跳转的时候带上某个模块的id,返回的时候定位到该处。

②利用距离顶部的距离,在跳转的时候带上当前位置滚动过的距离,返回的时候定位到该处。

一般应用场景:

定位到某一个模块的时候,有二级定位的时候利用方法①.

定位到具体位置的时候,定位到某一个模块的时候,利用方法②。

有二级定位的时候具体实现方法:

1.常见的场景就是有一个tab模块,tab模块下面有相应的内容,进入的时候需要定位到某个tab的某个位置。

场景如图:

2..初始化页面的时候,需要给每个模块指定一个唯一的id。打开页面的时候,如果url带着位置参数则解释参数定位,如果没有,默认为第一个。代码逻辑如下:

function() initPos{//定位,主要是初始化第几个tab
var hashs = location.hash.slice(1).split('&');
hashs = hashs.map(function(hash){
return decodeURIComponent(hash)
})
if(parseInt(hashs[0])>=0&&parseInt(hashs[0])<100){
navHash = parseInt(hashs[0]) 第几个tab
contentHash = hashs[1] tab下的具体模块id
}
}
var $root=$('ul');
if(navHash && $root.find('li')[navHash].length){
$root.find('li')[navHash].addClass('cur'); 
}else{
$root.find('li')[0].addClass('cur');
}
loadTabContent(tabIndex,initContent);//加载对应tab下面的内容

注意,如果tab下的内容是后来加载的,可能会出现,解析到url后。在页面上,由于加载时间的关系,没有找到对应的tab下面具体模块的id。这时候会定位不成功。所以还需要在加载好数据之后,再保证一下。

保证逻辑:

if(contentHash){
var _contentHash = contentHash;
window.onload = function(){
setTimeout(function(){
location.hash = _contentHash;
},0)
} 
contentHash = '';
}

利用距离顶部的距离定位的具体实现方法:

1.页面有跳转的地址,不是直接link过去。要带着当前位置滚动过距离跳转。

$('[data-link]').on('click',function(event) { //阻止默认跳转行为,阻止冒泡<br> event.preventDefault();
event.stopPropagation();
savePage();
window.location.href=$(this).attr('data-link');
});
function savePage(){ //操作浏览器的历史记录
history.replaceState('', document.title, location.href.replace(location.hash, "") + "#nowTop=" + $(window).scrollTop());
}

两种实现方式的原理和实现都非常简单。不过要思路清晰才行,不然很容易出错。

以上所述是小编给大家介绍的JS实现页面进入和返回定位到具体位置,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js动画(animate)简单引擎代码示例
Dec 04 Javascript
JS防止用户多次提交的简单代码
Aug 01 Javascript
前台js调用后台方法示例
Dec 02 Javascript
简介JavaScript中Boolean.toSource()方法的使用
Jun 05 Javascript
详解vue.js之绑定class和style的示例代码
Aug 24 Javascript
Javascript网页抢红包外挂实现分享
Jan 11 Javascript
Vue2 模板template的四种写法总结
Feb 23 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
May 18 Javascript
使用jquery的cookie实现登录页记住用户名和密码的方法
Mar 13 jQuery
微信小程序实现二维码签到考勤系统
Jan 16 Javascript
JavaScript异步操作的几种常见处理方法实例总结
May 11 Javascript
vue项目实现分页效果
Mar 24 Vue.js
解析利用javascript如何判断一个数为素数
Dec 08 #Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
Dec 08 #Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
Dec 08 #Javascript
jQuery实现鼠标滑过图片移动特效
Dec 08 #Javascript
浅谈JavaScript的闭包函数
Dec 08 #Javascript
node.js Sequelize实现单实例字段或批量自增、自减
Dec 08 #Javascript
Vue.JS入门教程之自定义指令
Dec 08 #Javascript
You might like
PHP生成静态页面详解
2006/12/05 PHP
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
2013/06/13 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
2014/01/14 PHP
PHP文件操作实例总结
2016/09/27 PHP
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
2009/11/27 Javascript
使用jQuery+HttpHandler+xml模拟一个三级联动的例子
2011/08/09 Javascript
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
2013/07/09 Javascript
关于Javascript 对象(object)的prototype
2014/05/09 Javascript
JavaScript中constructor()方法的使用简介
2015/06/05 Javascript
JavaScript使用DeviceOne开发实战(二) 生成调试安装包
2015/12/01 Javascript
深入理解javascript的getTime()方法
2017/02/16 Javascript
jquery单击文字或图片内容放大并居中显示
2017/06/23 jQuery
vue.js全局API之nextTick全面解析
2017/07/07 Javascript
使用Vue.js开发微信小程序开源框架mpvue解析
2018/03/20 Javascript
解决layui中table异步数据请求不支持自定义返回数据格式的问题
2018/08/19 Javascript
swiper在vue项目中loop循环轮播失效的解决方法
2018/09/15 Javascript
微信小程序实现3D轮播图效果(非swiper组件)
2019/09/21 Javascript
JS前端广告拦截实现原理解析
2020/02/17 Javascript
vue实现的多页面项目如何优化打包的步骤详解
2020/07/19 Javascript
介绍Python的Django框架中的QuerySets
2015/04/20 Python
Python部署web开发程序的几种方法
2017/05/05 Python
Python实现备份MySQL数据库的方法示例
2018/01/11 Python
python递归实现快速排序
2018/08/18 Python
Pycharm中import torch报错的快速解决方法
2020/03/05 Python
Python pandas 列转行操作详解(类似hive中explode方法)
2020/05/18 Python
师范大学音乐表演专业求职信
2013/10/23 职场文书
学生打架检讨书大全
2014/01/23 职场文书
小学教师师德演讲稿
2014/05/06 职场文书
应急处置方案
2014/06/16 职场文书
模具设计与制造专业求职信
2014/07/19 职场文书
辩论赛新闻稿
2015/07/17 职场文书
2016社区平安家庭事迹材料
2016/02/26 职场文书
学校2016年圣诞节活动总结
2016/03/31 职场文书
送给客户微信问候语!
2019/07/04 职场文书
Redis性能监控的实现
2021/07/09 Redis