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 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(7)
Dec 23 Javascript
基于jQuery的ajax功能实现web service的json转化
Aug 29 Javascript
JavaScript Event学习第七章 事件属性
Feb 07 Javascript
jQuery javaScript捕获回车事件(示例代码)
Nov 07 Javascript
jQuery拖拽 &amp; 弹出层 介绍与示例
Dec 27 Javascript
js换图片效果可进行定时操作
Jun 09 Javascript
微信JS接口汇总及使用详解
Jan 09 Javascript
关于延迟加载JavaScript
May 05 Javascript
举例讲解Node.js中的Writable对象
Jul 29 Javascript
详解Node.js 命令行程序开发教程
Jun 07 Javascript
AngularJS实现的简单拖拽功能示例
Jan 02 Javascript
vue学习笔记之给组件绑定原生事件操作示例
Feb 27 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 静态变量的初始化
2009/11/15 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
2014/06/12 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
2016/11/09 PHP
利用PHP生成CSV文件简单示例
2016/12/21 PHP
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
JavaScript 数组循环引起的思考
2010/01/01 Javascript
eclipse导入jquery包后报错的解决方法
2014/02/17 Javascript
javascript的propertyIsEnumerable()方法使用介绍
2014/04/09 Javascript
javascript去除空格方法小结
2015/05/21 Javascript
JavaScript实现获取某个元素相邻兄弟节点的prev与next方法
2016/01/25 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
JavaScript继承学习笔记【新手必看】
2016/05/10 Javascript
JavaScript自学笔记(必看篇)
2016/06/23 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
浅谈vue路径优化之resolve
2017/10/13 Javascript
Thinkjs3新手入门之如何使用静态资源目录
2017/12/06 Javascript
浅谈es6 javascript的map数据结构
2017/12/14 Javascript
JavaScript闭包与作用域链实例分析
2019/01/21 Javascript
javascript中undefined的本质解析
2019/07/31 Javascript
JavaScript实现移动小精灵的案例代码
2020/12/12 Javascript
跟老齐学Python之??碌某?? target=
2014/09/12 Python
进一步理解Python中的函数编程
2015/04/13 Python
用Python的Django框架来制作一个RSS阅读器
2015/07/22 Python
tensorflow实现softma识别MNIST
2018/03/12 Python
Python实现的建造者模式示例
2018/08/06 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
QML实现钟表效果
2020/06/02 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
5款实用的python 工具推荐
2020/10/13 Python
CSS3 三维变形实现立体方块特效源码
2016/12/15 HTML / CSS
英国和国际包裹递送:ParcelCompare
2019/08/26 全球购物
关于中国梦的演讲稿
2014/04/23 职场文书
幼儿园辞职书
2015/02/26 职场文书
2019年自助餐厅创业计划书模板
2019/08/22 职场文书
python实现批量移动文件
2021/04/05 Python
Mysql多层子查询示例代码(收藏夹案例)
2022/03/31 MySQL