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 相关文章推荐
js arguments,jcallee caller用法总结
Nov 30 Javascript
javascript比较两个日期相差天数的方法
Jul 24 Javascript
javascript自定义in_array()函数实现方法
Aug 03 Javascript
js实现仿Discuz文本框弹出层效果
Aug 13 Javascript
js实现点击文本框显示日期选择器特效代码分享
May 21 Javascript
jQuery在线选座位插件seat-charts特效代码分享
Aug 27 Javascript
javascript中checkbox使用方法实例演示
Nov 19 Javascript
使用BootStrap实现标签切换原理解析
Mar 14 Javascript
浅析为什么a=&quot;abc&quot; 不等于 a=new String(&quot;abc&quot;)
Oct 25 Javascript
详解Webpack抽离第三方类库以及common解决方案
Mar 30 Javascript
Vue自定义组件双向绑定实现原理及方法详解
Sep 03 Javascript
详解vue3中组件的非兼容变更
Mar 03 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
php curl选项列表(超详细)
2013/07/01 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
2014/11/19 PHP
浅谈PHP中类和对象的相关函数
2017/04/26 PHP
laravel 数据验证规则详解
2019/10/23 PHP
php实现图片压缩处理
2020/09/09 PHP
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
2012/02/27 Javascript
javascript 处理null及null值示例
2014/06/09 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
JS实现简单的键盘打字的效果
2015/04/24 Javascript
10个很棒的jQuery代码片段
2015/09/24 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
2015/09/30 Javascript
全面解析bootstrap格子布局
2016/05/22 Javascript
微信小程序 获取微信OpenId详解及实例代码
2016/10/31 Javascript
基于jQuery制作小图标上下滑动特效
2017/01/18 Javascript
react实现pure render时bind(this)隐患需注意!
2017/03/09 Javascript
JavaScript中 DOM操作方法小结
2017/04/25 Javascript
解决ie img标签内存泄漏的问题
2017/10/13 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
2019/07/10 jQuery
Python的Tornado框架异步编程入门实例
2015/04/24 Python
Django实现自定义404,500页面教程
2017/03/26 Python
Python面向对象类编写细节分析【类,方法,继承,超类,接口等】
2019/01/05 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
Python for循环通过序列索引迭代过程解析
2020/02/07 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
2020/03/30 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
2020/04/14 Python
彻底搞懂python 迭代器和生成器
2020/09/07 Python
Python:__eq__和__str__函数的使用示例
2020/09/26 Python
Python自动化办公Excel模块openpyxl原理及用法解析
2020/11/05 Python
HTML5 Canvas——用路径描画线条实例介绍
2013/06/09 HTML / CSS
Farfetch巴西官网:奢侈品牌时尚购物平台
2020/10/19 全球购物
软件测试工程师笔试题带答案
2015/03/27 面试题
什么是继承
2013/12/07 面试题
我爱读书演讲稿
2014/05/07 职场文书
工作骂脏话检讨书
2014/10/05 职场文书
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis
UNION CREATIVE《Re:从零开始的异世界生活》雷姆手办
2022/03/20 日漫