JS实现页面进入和返回定位到具体位置

 更新时间:2016年12月08日 14:49:23   作者:小蚊  
其实浏览器也自带了返回的功能,也就是说,自带了返回定位的功能,返回定位到具体位置有两种方法,下面通过场景分析给大家详细讲解,需要的的朋友参考下

其实浏览器也自带了返回的功能,也就是说,自带了返回定位的功能。正常的跳转,返回确实可以定位,但是有些特殊场景就不适用了。例如,某些元素是在某种情况下才加上的,又或者多级定位。

目前,我知道的返回定位到具体位置有两种方法:

①利用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实现页面进入和返回定位到具体位置,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 纯js和css实现渐变色包括静态渐变和动态渐变

    纯js和css实现渐变色包括静态渐变和动态渐变

    用javascript实现一下所谓的动态渐变,考虑动态原因就不上图了,我来简单介绍下思路
    2014-05-05
  • 基于JavaScript实现表单密码的隐藏和显示出来

    基于JavaScript实现表单密码的隐藏和显示出来

    为了网站的安全性,很多朋友都把密码设的比较复杂,但是如何密码不能明显示,不知道输的是对是错,为了安全起见可以把密码显示的,那么基于js代码如何实现的呢?下面通过本文给大家介绍JavaScript实现表单密码的隐藏和显示,需要的朋友参考下
    2016-03-03
  • 前端必会的图片懒加载(三种方式)

    前端必会的图片懒加载(三种方式)

    在我们访问一个图片展示比较多的网页时,加载速度慢很多时候正是因为图片多导致,本文主要介绍了前端必会的图片懒加载(三种方式),具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • javascript使用shift+click实现选择和反选checkbox的方法

    javascript使用shift+click实现选择和反选checkbox的方法

    这篇文章主要介绍了javascript使用shift+click实现选择和反选checkbox的方法,涉及javascript针对键盘按键的判断及checkbox的操作技巧,需要的朋友可以参考下
    2015-05-05
  • 分享JS表单验证源码(带错误提示及密码等级)

    分享JS表单验证源码(带错误提示及密码等级)

    这篇文章主要介绍了JS表单验证源码(带错误提示及密码等级),代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • 利用Javascript开发一个二维周视图日历

    利用Javascript开发一个二维周视图日历

    这篇文章主要给大家介绍了关于利用Javascript如何开发一个二维周视图日历的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-12-12
  • js前端实现图片懒加载(lazyload)的两种方式

    js前端实现图片懒加载(lazyload)的两种方式

    本篇文章主要介绍了js前端实现图片懒加载(lazyload)的两种方式 ,使用图片懒加载可以提高网页运行速度,有兴趣的可以了解一下。
    2017-04-04
  • JavaScript获得url查询参数的方法

    JavaScript获得url查询参数的方法

    这篇文章主要介绍了JavaScript获得url查询参数的方法,可实现针对URL中参数分析的功能,需要的朋友可以参考下
    2015-07-07
  • javaScript 利用闭包模拟对象的私有属性

    javaScript 利用闭包模拟对象的私有属性

    JavaScript缺少块级作用域,没有private修饰符,但它具有函数作用域。作用域的好处是内部函数可以访问它们的外部函数的参数和变量(除了this和argument
    2011-12-12
  • JS实现放大、缩小及拖拽图片的方法【可兼容IE、火狐】

    JS实现放大、缩小及拖拽图片的方法【可兼容IE、火狐】

    这篇文章主要介绍了JS实现放大、缩小及拖拽图片的方法,可兼容IE及火狐等浏览器,通过javascript自定义函数实现针对图片的放大、缩小及拖拽等功能,涉及javascript动态操作页面元素的相关技巧,需要的朋友可以参考下
    2016-08-08

最新评论