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 相关文章推荐
jquery动画3.创建一个带遮罩效果的图片走廊
Aug 24 Javascript
在Javascript中 声明时用&quot;var&quot;与不用&quot;var&quot;的区别
Apr 15 Javascript
AngularJS基础 ng-open 指令简单实例
Aug 02 Javascript
详解Vue-基本标签和自定义控件
Mar 24 Javascript
JS组件系列之JS组件封装过程详解
Apr 28 Javascript
JavaScript基础之this详解
Jun 04 Javascript
XMLHttpRequest对象_Ajax异步请求重点(推荐)
Sep 28 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
Dec 23 Javascript
解决Vue 浏览器后退无法触发beforeRouteLeave的问题
Dec 24 Javascript
vue.js层叠轮播效果的实例代码
Nov 08 Javascript
JavaScript获取当前url路径过程解析
Dec 27 Javascript
快速解决element的autofocus失效问题
Sep 08 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新手上路(十)
2006/10/09 PHP
CakePHP去除默认显示的标题及图标的方法
2008/10/22 PHP
Codeigniter+PHPExcel实现导出数据到Excel文件
2014/06/12 PHP
PHP使用mkdir创建多级目录的方法
2015/12/22 PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
2016/03/01 PHP
php正则表达式基本知识与应用详解【经典教程】
2017/04/17 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
2020/05/26 PHP
增强的 JavaScript 的 trim 函数的代码
2007/08/13 Javascript
SharePoint 客户端对象模型 (一) ECMA Script
2011/05/22 Javascript
AngularJS模块管理问题的非常规处理方法
2015/04/29 Javascript
js+html5绘制图片到canvas的方法
2015/06/05 Javascript
浅谈JavaScript正则表达式-非捕获性分组
2017/03/08 Javascript
老生常谈javascript中逻辑运算符&amp;&amp;和||的返回值问题
2017/04/13 Javascript
angular内置provider之$compileProvider详解
2017/09/27 Javascript
JS 实现百度搜索功能
2018/02/01 Javascript
实例分析编写vue组件方法
2019/02/12 Javascript
JS实现手写 forEach算法示例
2020/04/29 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
2020/11/05 Javascript
Python单例模式实例分析
2015/01/14 Python
使用Python中的cookielib模拟登录网站
2015/04/09 Python
Python使用urllib2模块实现断点续传下载的方法
2015/06/17 Python
Python中str is not callable问题详解及解决办法
2017/02/10 Python
使用Python处理BAM的方法
2018/09/28 Python
获取Pytorch中间某一层权重或者特征的例子
2019/08/17 Python
PyQt5的QWebEngineView使用示例
2020/10/20 Python
做一个能自适应高度的textarea的示例代码
2019/09/06 HTML / CSS
巴黎卡诗加拿大官网:Kérastase加拿大
2018/11/12 全球购物
Blue Nile中国官网:全球知名的钻石和珠宝网络零售商
2020/03/22 全球购物
什么是托管函数?托管函数有什么用?
2014/06/15 面试题
英语系本科生个人求职信
2013/09/21 职场文书
小学教师自我鉴定范文
2014/03/20 职场文书
大学社团活动总结
2014/04/26 职场文书
工作收入证明范本
2015/06/12 职场文书
学习心理学心得体会
2016/01/22 职场文书
《社戏》教学反思
2016/02/22 职场文书
Mysql如何实现不存在则插入,存在则更新
2022/03/25 MySQL