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中获取数据库中的值的方法
Jul 14 Javascript
js编码、解码函数介绍及其使用示例
Sep 05 Javascript
前端必备神器 Snap.svg 弹动效果
Nov 10 Javascript
vue.js 嵌套循环、if判断、动态删除的实例
Mar 07 Javascript
js实现文件上传功能 后台使用MultipartFile
Sep 08 Javascript
微信二次分享报错invalid signature问题及解决方法
Apr 01 Javascript
Vue项目路由刷新的实现代码
Apr 17 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
May 30 Javascript
layui表格数据复选框回显设置方法
Sep 13 Javascript
Vue+abp微信扫码登录的实现代码示例
Jan 06 Javascript
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
Feb 15 Javascript
如何用JavaScipt测网速
May 09 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
PHILIPS L4X25T电路分析和打理
2021/03/02 无线电
php实现aes加密类分享
2014/02/16 PHP
PHP关键特性之命名空间实例详解
2017/05/06 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
php json转换相关知识(小结)
2018/12/21 PHP
PHP封装请求类实例分析【基于Yii框架】
2019/10/17 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
json简单介绍
2008/06/10 Javascript
js 获取计算后的样式写法及注意事项
2013/02/25 Javascript
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
js插件方式打开pdf文件(浏览器pdf插件分享)
2013/12/20 Javascript
jQuery+ajax实现文章点赞功能的方法
2015/12/31 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
完美解决input[type=number]无法显示非数字字符的问题
2017/02/28 Javascript
基于vue.js的分页插件详解
2017/11/27 Javascript
详解使用React制作一个模态框
2019/03/14 Javascript
关于vue-cli 3配置打包优化要点(推荐)
2019/04/22 Javascript
详解vue 命名视图
2019/08/14 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
2019/09/12 Javascript
Python中使用copy模块实现列表(list)拷贝
2015/04/14 Python
Python 多线程抓取图片效率对比
2016/02/27 Python
Python使用ntplib库同步校准当地时间的方法
2016/07/02 Python
Python实现输出程序执行进度百分比的方法
2017/09/16 Python
Python 反转字符串(reverse)的方法小结
2018/02/20 Python
python字符串string的内置方法实例详解
2018/05/14 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
解决python虚拟环境切换无效的问题
2020/04/30 Python
python字典按照value排序方法
2020/12/28 Python
员工拓展培训方案
2014/02/15 职场文书
学校联谊协议书
2014/09/16 职场文书
2014年师德师风自我剖析材料
2014/09/27 职场文书
追悼会答谢词
2015/01/05 职场文书
学生检讨书怎么写
2015/05/07 职场文书
音乐剧猫观后感
2015/06/04 职场文书
信用卡收入证明范本
2015/06/12 职场文书
SQL Server数据库备份和恢复数据库的全过程
2022/06/14 SQL Server