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

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

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

①利用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) { //阻止默认跳转行为,阻止冒泡
       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());
 }
//跳转后的判断
      if ($(‘wrap).height() > nowTop) {
             scrollTo(0, nowTop);
     }

两种实现方式的原理和实现都非常简单。不过要思路清晰才行,不然很容易出错。

时间: 2024-10-14 10:44:37

JS实现页面进入、返回定位到具体位置的相关文章

JS 侧栏导航点击定位页面内容位置及滚动条滚动改变导航元素对应状态

近来,小码哥应公司需求方要求,要在未来一个专题页面中加入一个效果:即,侧栏导航点击实现页面内容部分运动到相应位置,以及随着body滚动条滚动使导航按钮效果和页面相应内容对应上的一个效果.起初小码哥做的时候,只实现了点击导航按钮让页面相应的内容定位到和按钮相应的地方(在此可以查看小码哥先前写的关于锚点的文章):而随滚动条实现按钮和内容相对应的效果没有做出来,由于项目专题的时限问题,小码哥借鉴了网上一个案例,将其套在自己的页面就够里,实现了想要的效果. 废话不多说了,直接上码吧,,,,,,,,,,,

JS 用window.open()函数,父级页面如何取到子级页面的返回值?

父窗口:<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script src="../js/jquery-1.7.2.min.js" type="text/javascript"></script> <script type=&quo

【2017-06-29】在登录页面自动返回上次请求页面、Js获取table中的行数与列数

一.在登录页面自动返回上次请求页面 Request.UrlReferrer比如 if (Request.UrlReferrer != null) { //如果能获取来路地址 Response.Redirect(Request.UrlReferrer.ToString());} else { //没有来路地址 Response.Redirect("index.aspx"); 二.Js获取table中的行数与列数 var table =document.getElementById(&qu

JS请求服务器,并返回信息,请求过程中不需要跳转页面

js请求服务器,并返回信息,请求过程中不需要跳转页面 这个可以通过jQuery框架轻松实现,jQuery中包含多种ajax的请求方式,详细可以参考下对应 的API. 你上面定义的按钮类型是submit,如果是在form当中,将会自动提交当前form表单,建议,如果可能的话将其修改为button类型. 下面给出通过jQuery的$.post方式,异步获取服务器的JSON数据. 功能代码: <script type="text/javascript"> $(function()

打开页面div滚动条定位(别用锚点)

来啦!客官久等了!!!!! 上代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>打开页面div滚动条定位</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <s

Jsp页面跳转和js控制页面跳转的几种方法

Jsp 页面跳转的几种方法 1. RequestDispatcher.forward() 在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet或者是JSP到另外的一个Servlet.JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在 b.jsp都可以获得,参数自动传递. 但forward()无法重定向至有frame的jsp文件,可以重定向至有

JS弹出框、对话框、提示框,JS关闭窗口、关闭页面和JS控制页面跳转

一.JS弹出框.对话框.提示框 //====================== JS最常用三种弹出对话框 ======================== //1弹出对话框并输出一段提示信息 function ale() { //弹出一个对话框 alert("提示信息!"); } //2弹出一个询问框,有确定和取消按钮 function firm() { //利用对话框返回的值 (true 或者 false) if (confirm("你确定提交吗?")) { a

js调试系列: 源码定位与调试[基础篇]

js调试系列目录: - 如果看了1, 2两篇,你对控制台应该有一个初步了解了,今天我们来个简单的调试.昨天留的三个课后练习,差不多就是今天要讲的内容.我们先来处理第一个问题:1. 查看文章下方 推荐 这个功能所调用的函数源码其实非常简单,点放大镜选中那个推荐即可.这个  votePost(cb_entryId,'Digg')  就是推荐按钮所调用的函数了,是不是非常简单. 第二个问题,定位到函数所在文件位置.其实也是非常简单的,当然,不熟悉控制台的朋友也许不知道怎么看.我在控制台输入 voteP

【高德地图API】从零开始学高德JS API(七)——定位方式大揭秘

摘要:关于定位,分为GPS定位和网络定位2种.GPS定位,精度较高,可达到10米,但室内不可用,且超级费电.网络定位,分为wifi定位和基站定位,都是通过获取wifi或者基站信息,然后查询对应的wifi或者基站位置数据库,得到的定位地点.定位数据库可以不断完善不断补充,所以,越定位越准确.本文详细描述了,如果使用高德JS API来实现位置定位.城市定位的方法,包含了IP定位,浏览器定位,检索定位等多种网络定位方法.当然,如果您的手机有GPS功能,那么使用浏览器定位的时候,会自动获取GPS信息,使