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 相关文章推荐
单独使用CKFinder选择图片的方法
Aug 21 Javascript
jquery实现手风琴效果实例代码
Nov 15 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
Sep 15 Javascript
jquery实现横向图片轮播特效代码分享
Nov 19 Javascript
JavaScript模版引擎的基本实现方法浅析
Feb 15 Javascript
node.js中module.exports与exports用法上的区别
Sep 02 Javascript
AngularJS服务service用法总结
Dec 13 Javascript
图片懒加载imgLazyLoading.js使用详解
Sep 15 Javascript
vue2.5.2使用http请求获取静态json数据的实例代码
Feb 27 Javascript
jQuery 操作 HTML 元素和属性的方法
Nov 12 jQuery
JS使用Dijkstra算法求解最短路径
Jan 17 Javascript
javaScript实现一个队列的方法
Jul 14 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
收音机术语解释
2021/03/01 无线电
一次编写,随处运行
2006/10/09 PHP
php错误、异常处理机制(补充)
2012/05/07 PHP
php中静态类与静态变量用法的区别分析
2015/01/15 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
JAVASCRIPT对象及属性
2007/02/13 Javascript
高性能web开发 如何加载JS,JS应该放在什么位置?
2010/05/14 Javascript
jquery多浏览器捕捉回车事件代码
2010/06/22 Javascript
JavaScript 原型学习总结
2010/10/29 Javascript
js判断屏幕分辨率的代码
2013/07/16 Javascript
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
jQuery实现类似老虎机滚动抽奖效果
2015/08/06 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
bootstrap datepicker限定可选时间范围实现方法
2016/09/28 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
2016/12/08 Javascript
微信小程序 本地图片按照屏幕尺寸处理
2017/08/04 Javascript
nodejs中用npm初始化来创建package.json的实例讲解
2018/10/10 NodeJs
详解js 创建对象的几种方法
2019/03/08 Javascript
Python实现的双色球生成功能示例
2017/12/18 Python
django认证系统实现自定义权限管理的方法
2018/07/16 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
Python基础之字符串常见操作经典实例详解
2020/02/26 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
斯洛伐克家具和时尚装饰品购物网站:Butlers.sk
2019/09/08 全球购物
Armor Lux法国官方网站:水手服装、成衣和内衣
2020/05/26 全球购物
Myprotein亚太地区:欧洲第一在线运动营养品牌
2020/12/20 全球购物
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
小学教师培训感言
2014/02/11 职场文书
珍惜水资源建议书
2014/03/12 职场文书
超越自我演讲稿
2014/05/21 职场文书
2014年采购部工作总结
2014/11/20 职场文书
《槐乡的孩子》教学反思
2016/02/20 职场文书
Nginx+Tomcat实现负载均衡、动静分离的原理解析
2021/03/31 Servers
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
2021/06/22 Python
python_tkinter弹出对话框创建
2022/03/20 Python