关于从下一页返回不要回到当前页的解决办法

描述一下业务场景:

当前页面是A页面,在A页面里面请求接口,根据接口的返回值去判断要跳转的页面,这样,在判断完状态值的时候跳到B页面,这是在B页面返回就会出现跳不出B页面的问题,因为B页面返回A页面的时候,又去判断A页面的返回状态,又跳回B页面,如此反复。。。。

 在解决问题之前,先简单说一下我的解答思路:

1、我天真的以为,js会有那种API,可以删除掉A页面在 history的url,这样,在B页面返回自然返回不到A页面;

这个思路无疑是最简单的,不过真的是too young too simple,没有这种API

2、我也尝试了各种的pushState、replaceState的方法,不过绕来绕去也没有能解决问题,不过你可以尝试一下,我总是觉得冥冥之中可以解决。

pushState(其中的state、title建议不要为空)

window.history.pushState(state, title, url);

我们可以通过pushState现改变URL而不刷新页面

var state = ( {

url: ~href, title: ~title, ~additionalKEY: ~additionalVALUE

} );

window.history.pushState(state, ~title, ~href);

replaceState 同理

window.history.replaceState( state, ~title, ~href);

pushState、replaceState 的区别

    pushState()可以创建历史,可以配合popstate事件,而replaceState()则是替换掉当前的URL,不会产生历史。

3、就是现在解决问题的方法,大概思路是,在跳转B页面之前将A页面的url换成要跳转的B,这样当跳转到B页面的时候,history发现已经有了B路径,就不会去保存相同的路径。

现在来看一下Demo

A.html,在跳转之前,将当前页面的路径换成要跳转的页面路径,在跳到B页面之后,B页面的后退按钮是不可用的,因为他之前没有历史记录

<a href="B.html"  
onclick="javascript:location.replace(this.href);
 event.returnValue=false;
 ">这是A页面,跳到B页面</a>

B.html,B页面同理跳到C页面,C页面同样不可以点击后退

<a href="C.html" 
onclick="javascript:location.replace(this.href);
 event.returnValue=false; 
">这是B页面,跳到C页面</a>

C.html,

<a href="A.html" >这是C页面,回到A页面</a>

此时,C页面并没有替换url,当跳到A.html时,A可以点击回退,好,我们继续

A.html继续点击跳到B.html,这时B.html返回就回到了C.html,很好理解,就是历史栈中只保存了当前的B.html和C.html。

这样是不是就完美的解决了我们的问题。

当然这是demo,不过返回工程里面,我们需要匹配当前的路径,并要替换成我们想要跳转的路由。

      // 再次挑战
      againInvitingClick () {
        let href = window.location.href;
        var replaceHref = href.replace('#/','#/selectGoods')
        location.replace(replaceHref);
        event.returnValue=false;

        this.$router.push({name:'selectGoods',query:{token:this.param_token}});
      },

这样,即使url路径后面有参数也没有关系。

快去试试吧~

 

 

 

 

 

转载于:https://my.oschina.net/wsxiao/blog/1615331

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你可以在最后一页的下一页按钮上添加一个 “回到一页” 的跳转链接,将链接指向轮播图开始的第一页。这样,当用户在最后一页点击下一页时,就可以回到一页了。当然,在实际开发中,你还可以使用 JavaScript 在前端实现此功能。 ### 回答2: 在HTML5的轮播图中,通常使用JavaScript来控制轮播的功能。要实现在最后一页点击下一页回到一页,可以通过以下方法来实现: 1. 首先,在HTML文件中创建一个包含所有轮播项的容器,可以使用<ul>标签,并为容器添加一个唯一的ID,例如"carouselContainer"。 2. 使用JavaScript来控制轮播功能。创建一个JavaScript函数,例如"nextSlide()",用于切换到下一张轮播图。 3. 在函数中,首先获取轮播容器的引用,可以使用document.getElementById()方法通过容器的ID获取到容器的引用。 4. 获取轮播容器中的所有轮播项,可以使用querySelectorAll()方法结合CSS选择器选择所有的轮播项。例如,可以使用"#carouselContainer li"选择所有在容器内的轮播项。 5. 获取当前显示的轮播项的索引,可以使用indexOf()方法获取当前显示轮播项的索引。比如,可以通过给当前轮播项添加一个特定的类名,比如"active",然后通过querySelector()方法结合类名选择器来获取到当前轮播项的索引。 6. 判断当前轮播项是否为最后一张轮播图,可以通过比较当前轮播项的索引与轮播项的总数来判断。如果是最后一张轮播图,将当前轮播项的类名设置为非激活状态,然后将第一张轮播图的类名设置为激活状态,可以使用classList.add()和classList.remove()方法来添加或移除类名。 7. 如果不是最后一张轮播图,则将当前轮播项的类名设置为非激活状态,然后将下一张轮播图的类名设置为激活状态。 8. 最后,将轮播项的显示逻辑写入页面加载完成的事件监听中,确保在页面加载完成后才执行轮播功能。 通过上述步骤,可以实现在最后一页点击下一页时,回到一页的效果。 ### 回答3: 要回到一页,需要在最后一页点击下一页时,将当前页的索引值重置为0,即回到一页的位置。 实现方法如下: 1. 在HTML中创建轮播图容器,设置样式和宽度。 2. 在HTML中创建轮播图的图片和控制按钮。 3. 在CSS中设置轮播图容器的样式,例如设为相对定位,并隐藏溢出部分。 4. 在JavaScript中获取轮播图容器和轮播图的图片和控制按钮。 5. 给轮播图的控制按钮添加点击事件监听器。 6. 根据点击的控制按钮,切换轮播图的显示。 7. 当点击最后一页(即索引值为轮播图图片数量减1)的下一页时,将当前页的索引值重置为0,即回到一页的位置。 8. 根据当前页的索引值,设置轮播图的样式,显示对应的图片。 示例代码如下: HTML: ```html <div id="slider" class="slider-container"> <img src="image1.jpg" alt="Image 1"> <img src="image2.jpg" alt="Image 2"> <img src="image3.jpg" alt="Image 3"> <button class="prev-btn">上一页</button> <button class="next-btn">下一页</button> </div> ``` CSS: ```css .slider-container { position: relative; width: 100%; overflow: hidden; } .slider-container img { width: 100%; display: none; } .slider-container img.active { display: block; } ``` JavaScript: ```javascript const sliderContainer = document.getElementById("slider"); const images = sliderContainer.getElementsByTagName("img"); const prevButton = sliderContainer.querySelector(".prev-btn"); const nextButton = sliderContainer.querySelector(".next-btn"); let currentIndex = 0; prevButton.addEventListener("click", previousSlide); nextButton.addEventListener("click", nextSlide); function previousSlide() { currentIndex = (currentIndex - 1 + images.length) % images.length; showSlide(); } function nextSlide() { if (currentIndex === images.length - 1) { currentIndex = 0; } else { currentIndex++; } showSlide(); } function showSlide() { for (let i = 0; i < images.length; i++) { if (i === currentIndex) { images[i].classList.add("active"); } else { images[i].classList.remove("active"); } } } ``` 以上代码实现了一个简单的HTML5轮播图,并在最后一页点击下一页时,将当前页的索引值重置为0,使轮播图回到一页的位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值