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在Chrome下获取图片的长宽问题解决
Mar 20 Javascript
你必须知道的Javascript知识点之&quot;深入理解作用域链&quot;的介绍
Apr 23 Javascript
5个可以帮你理解JavaScript核心闭包和作用域的小例子
Oct 08 Javascript
对比分析json及XML
Nov 28 Javascript
Javascript中3个需要注意的运算符
Apr 02 Javascript
JavaScript性能优化总结之加载与执行
Aug 11 Javascript
打造自己的jQuery插件入门教程
Sep 23 Javascript
解决bootstrap下拉菜单点击立即隐藏bug的方法
Jun 13 Javascript
微信小程序录音与播放录音功能
Dec 25 Javascript
微信小程序调用摄像头隐藏式拍照功能
Aug 22 Javascript
Vue匿名插槽与作用域插槽的合并和覆盖行为
Apr 22 Javascript
微信小程序getLocation 需要在app.json中声明permission字段
Mar 03 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对表单提交特殊字符的过滤和处理方法汇总
2014/02/18 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
php json_encode()函数返回json数据实例代码
2014/10/10 PHP
php版银联支付接口开发简明教程
2016/10/14 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
2018/10/17 PHP
javascript判断iphone/android手机横竖屏模式的函数
2011/12/20 Javascript
一个封装js代码-----展开收起效果示例
2013/07/03 Javascript
Jquery Uploadify上传带进度条的简单实例
2014/02/12 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
浅析JavaScript 调试方法和技巧
2015/10/22 Javascript
js微信分享API
2020/10/11 Javascript
可输入文字查找ajax下拉框控件 ComBox的实现方法
2016/10/25 Javascript
bootstrap制作jsp页面(根据值让table显示选中)
2017/01/05 Javascript
详解node如何让一个端口同时支持https与http
2017/07/04 Javascript
深入了解javascript 数组的sort方法
2018/06/01 Javascript
Vue中computed、methods与watch的区别总结
2019/04/10 Javascript
JS脚本实现定时到网站上签到/签退功能
2020/04/22 Javascript
uni-app微信小程序登录授权的实现
2020/05/22 Javascript
js实现网页随机验证码
2020/10/19 Javascript
Python中字典和JSON互转操作实例
2015/01/19 Python
使用Python多线程爬虫爬取电影天堂资源
2016/09/23 Python
Python程序员面试题 你必须提前准备!(答案及解析)
2018/01/23 Python
对pycharm 修改程序运行所需内存详解
2018/12/03 Python
一文秒懂python读写csv xml json文件各种骚操作
2019/07/04 Python
python从zip中删除指定后缀文件(推荐)
2019/12/05 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
2020/12/08 Python
详解CSS3中强大的filter(滤镜)属性
2017/06/29 HTML / CSS
英国皇室御用百货:福南梅森(Fortnum & Mason)
2017/12/03 全球购物
银行毕业实习自我鉴定
2013/09/19 职场文书
工商学院毕业生自荐信
2013/11/12 职场文书
30年同学聚会邀请函
2014/01/25 职场文书
计划生育证明格式及范本
2014/10/09 职场文书
高中生逃课检讨书
2014/10/10 职场文书
2015年除四害工作总结
2015/07/23 职场文书
协议书格式模板
2016/03/24 职场文书