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 Array扩展实现代码
Oct 14 Javascript
Javascript 圆角div的实现代码
Oct 15 Javascript
读jQuery之二(两种扩展)
Jun 11 Javascript
Javascript new Date().valueOf()的作用与时间戳由来详解
Apr 24 Javascript
JS实现带关闭功能的阿里妈妈网站顶部滑出banner工具条代码
Sep 17 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
Apr 01 Javascript
有关文件上传 非ajax提交 得到后台数据问题
Oct 12 Javascript
原生js实现淘宝购物车功能
Jun 23 Javascript
Javascript实现从小到大的数组转换成二叉搜索树
Jun 13 Javascript
vue-router 权限控制的示例代码
Sep 21 Javascript
Node.js创建HTTP文件服务器的使用示例
May 11 Javascript
微信小程序的授权实现过程解析
Aug 02 Javascript
解析利用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之Smarty模板使用方法示例详解
2014/07/08 PHP
WordPress中对访客评论功能的一些优化方法
2015/11/24 PHP
Yii实现复选框批量操作实例代码
2017/03/15 PHP
网页上的Javascript编辑器和代码格式化
2010/04/25 Javascript
js获取图片大小的函数代码
2011/09/20 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
2013/04/11 Javascript
extjs render 用法介绍
2013/09/11 Javascript
JavaScript的事件绑定(方便不支持js的时候)
2013/10/01 Javascript
JS读取XML文件示例代码
2013/11/15 Javascript
解决json日期格式问题的3种方法
2014/02/02 Javascript
jquery原理以及学习技巧介绍
2015/11/11 Javascript
基于JS实现省市联动效果代码分享
2016/06/06 Javascript
使用webpack-dev-server处理跨域请求的方法
2018/04/18 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
2019/02/18 jQuery
LayUi使用switch开关,动态的去控制它是否被启用的方法
2019/09/21 Javascript
[01:11:27]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Optic
2018/04/03 DOTA
Python算法输出1-9数组形成的结果为100的所有运算式
2017/11/03 Python
Python对象中__del__方法起作用的条件详解
2018/11/01 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
2019/04/18 Python
Django Sitemap 站点地图的实现方法
2019/04/29 Python
python 多进程共享全局变量之Manager()详解
2019/08/15 Python
pytorch1.0中torch.nn.Conv2d用法详解
2020/01/10 Python
python实现提取str字符串/json中多级目录下的某个值
2020/02/27 Python
Python使用graphviz画流程图过程解析
2020/03/31 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
2020/03/31 Python
Python闭包装饰器使用方法汇总
2020/06/29 Python
如何利用python检测图片是否包含二维码
2020/10/15 Python
Python更改pip镜像源的方法示例
2020/12/01 Python
如何将整数int转换成字串String
2014/03/21 面试题
2014年大学学生会工作总结
2014/12/02 职场文书
党支部鉴定意见
2015/06/02 职场文书
尼克胡哲观后感
2015/06/08 职场文书
2016年9月份红领巾广播稿
2015/12/21 职场文书
如何有效防止sql注入的方法
2021/05/25 SQL Server
zabbix自定义监控nginx状态实现过程
2021/11/01 Servers