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 相关文章推荐
javascript中常用编程知识
Apr 08 Javascript
基于mouseout和mouseover等类似事件的冒泡问题解决方法
Nov 18 Javascript
js实现同一页面可多次调用的图片幻灯切换效果
Feb 28 Javascript
对于jQuery性能的一些优化建议
Aug 13 Javascript
js和C# 时间日期格式转换的简单实例
May 28 Javascript
关于TypeScript中import JSON的正确姿势详解
Jul 25 Javascript
基于vue的换肤功能的示例代码
Oct 10 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
Nov 09 Javascript
vue.js 嵌套循环、if判断、动态删除的实例
Mar 07 Javascript
Django+Vue跨域环境配置详解
Jul 06 Javascript
javascript实现5秒倒计时并跳转功能
Jun 20 Javascript
Vue实现点击当前行变色
Dec 14 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
业余方法DIY电子管FM收音机
2021/03/02 无线电
php Static关键字实用方法
2010/06/04 PHP
PHP中echo和print的区别
2014/08/28 PHP
PHP实现通过中文字符比率来判断垃圾评论的方法
2014/10/20 PHP
JS获取IUSR_机器名和IWAM_机器名帐号的密码
2006/12/06 Javascript
js资料prototype 属性
2007/03/13 Javascript
JavaScript中的Screen屏幕对象
2008/01/16 Javascript
详解Vue路由开启keep-alive时的注意点
2017/06/20 Javascript
实例分析JS与Node.js中的事件循环
2017/12/12 Javascript
vue如何通过id从列表页跳转到对应的详情页
2018/05/01 Javascript
如何去除富文本中的html标签及vue、react、微信小程序中的过滤器
2018/11/21 Javascript
js常见遍历操作小结
2019/06/06 Javascript
js的Object.assign用法示例分析
2020/03/05 Javascript
python根据经纬度计算距离示例
2014/02/16 Python
在dataframe两列日期相减并且得到具体的月数实例
2018/07/03 Python
在PyCharm下使用 ipython 交互式编程的方法
2019/01/17 Python
Django集成搜索引擎Elasticserach的方法示例
2019/06/04 Python
python提取照片坐标信息的实例代码
2019/08/14 Python
Python for循环及基础用法详解
2019/11/08 Python
jupyter notebook oepncv 显示一张图像的实现
2020/04/24 Python
Django def clean()函数对表单中的数据进行验证操作
2020/07/09 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
2020/12/07 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
2021/01/05 Python
python制作抽奖程序代码详解
2021/01/15 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
业务员的岗位职责
2014/03/15 职场文书
马智宇婚礼主持词
2014/03/22 职场文书
个人求职信范文
2014/05/24 职场文书
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
雷锋观后感
2015/06/10 职场文书
外出培训学习心得体会
2016/01/18 职场文书
HashMap实现保存两个key相同的数据
2021/06/30 Java/Android
梳理总结Python开发中需要摒弃的18个坏习惯
2022/01/22 Python
关于EntityWrapper的in用法
2022/03/22 Java/Android
Win10 Anaconda安装python-pcl
2022/04/29 Servers
Java服务调用RestTemplate与HttpClient的使用详解
2022/06/21 Java/Android