需求场景:

  • 非推荐商品详情页返回的时候弹出弹窗推荐商品,点击弹窗按钮可以直接访问推荐商品;
  • 只有直接进入商品详情页返回才会弹出推荐商品弹窗;
  • 每个用户访问只能弹一次(除非清除缓存)。

需求分析:

1. 判断是否直接进入商品详情页可以在商品详情页直接判断 history.length ,如果是则 history.length=2 ;

2. 每个用户只能弹一次可以保存一个标志值 hasBeenRecommended=true 到缓存中,有了这个标志值就不再弹出;

3. 返回的监控,还是要监听页面的popstate,如果要阻止原来的返回操作的话,就要给页面栈添加一个空栈:

history.pushState(null, null, document.URL);

实例代码:

1. vue框架内页面初始化时判断是否需要推荐弹窗:

......
//修改历史记录状态,需要放在商品数据初始化之后
if(history.length<=2 && !localStorage.getItem("hasBeenRecommended")) {
//获取推荐数据信息,页面返回标识修改及页面栈加入空栈操作在判断非当前页面之后再进行
this.getRecommendGoodInfo();
}
......

注:

本例需要调用后端接口动态配置,可以在获取商品详情数据之后进行,也可以在页面初始化时查询商品详情时异步进行,这个影响不大,尽量不要在返回监听的逻辑中处理,如果推荐商品数据需要调用后端接口的话,还是放在页面初始化时处理比较好。

2. 获取推荐商品详情信息:

        /**
* 获取推荐权益卡信息数据
*/
getRecommendGoodInfo: function() {
var self = this
self.$ajax({
method: 'post',
url: self.$utils.DOMIN + 'goods/getAdvert',
}).then((response) => {
var data = response.data.d
if(data && data.goodsId != self.$route.query.goodsId) {
//给页面添加空的页面栈,同时给推荐弹窗填充数据
history.pushState(null, null, document.URL);
//保存阻断返回的标志到缓存中
            localStorage.setItem('stopBack',true);
//填充弹窗元素数据源
self.recommendGoodInfo = data
}
}).catch(function(error) {
console.log(error);
});
}

注:给页面添加空的页面栈的同时保存一个标志值到缓存中,那么在返回的时候如果有这个值就弹出弹窗,同时将这个值进行重置或清除。

3. 返回监控,在vue框架外围处理:

    /**
* 返回监控,若缓存中返回标识为666,则弹出推荐权益卡弹窗,同时缓存中保存已经弹出推荐弹窗的标识
*/
window.addEventListener("popstate", () => {
if(localStorage.getItem("stopBack")) {
      //使用jquery或原生js的方式是弹窗显示
$(".showRecommendModal").fadeIn()
        localStorage.removeItem('stopBack')
localStorage.setItem("hasBeenRecommended", true)
}
})

注:监听浏览器的返回本身就会破坏掉vue的路由,所以这个操作只能在vue框架外围来进行。如此,弹窗的数据是在vue框架中填充的,弹窗的显示是在原生js的返回监控中处理的。

后记:

整体来说,感觉上边的这种方案还是比较好的,当然如果喜欢原生js的话,也可以在vue框架中将推荐商品数据保存到缓存中,然后在返回监控的逻辑中以操作DOM的方式将弹窗追加到html结构中去,不过个人是不喜欢操作DOM的。

Vue框架H5商城类项目商品详情点击返回弹出推荐商品弹窗的实现方案的更多相关文章

  1. 模拟app上商品详情点击图片放大并且可以切换大图

    主要使用swiper插件,这里使用各小技巧,就是用两个swiper容器,点击一个小图容器,去让大图容器展示出来 小图容器 <div class="q_banner"> ...

  2. 第04项目:淘淘商城(SpringMVC+Spring+Mybatis)【第九天】(商品详情页面实现)

    https://pan.baidu.com/s/1bptYGAb#list/path=%2F&parentPath=%2Fsharelink389619878-229862621083040 ...

  3. Day13_商品详情及静态化

    学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 0.学习 ...

  4. 云计算:Ubuntu下Vue+Springboot前后端分离项目部署(多节点)

    一.机器准备 首先准备三台机器: 我是一台WINDOWS系统主机,在WINDOWS里的 VMware 中安装两台Ubuntu系统虚拟机 如果你的虚拟机只有 CentOS,可以参考这篇文章:https: ...

  5. Android跳转淘宝、京东APP商品详情页

    import Android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; imp ...

  6. 18 Flutter仿京东商城项目 商品详情顶部tab切换 顶部下拉菜单 底部浮动导航

    ProductContent.dart import 'package:flutter/material.dart'; import '../services/ScreenAdaper.dart'; ...

  7. 19 Flutter仿京东商城项目 商品详情 底部浮动导航布局 商品页面布局

    效果: widget/JdButton.dart import 'package:flutter/material.dart'; import '../services/ScreenAdaper.da ...

  8. SSH网上商城---商品详情页的制作

    在前面的博文中,小编分别简单的介绍了邮件的发送以及邮件的激活,逛淘宝的小伙伴都有这样的体会,比如在搜索框中输入连衣裙这个商品的时候,会出现多种多样各种款式的连衣裙,连衣裙的信息包括价格,多少人购买,商 ...

  9. vue 实现一个商城项目

    在学习了 vue 之后,决定做一个小练习,仿写了一个有关购物商城的小项目.下面就对项目做一个简单的介绍. 项目源码: github 项目的目录结构 -assets 与项目有关的静态资源,包括 css, ...

随机推荐

  1. C++11如何减少内存拷贝次数

    C++11中出现了很多迷人的特性.例如智能指针实现高效的内存管理,std::bind和std::function函数封装器,以及lambda实现的函数对象语法糖,都是使我着迷的地方. 而C++11最大 ...

  2. SpringAOP 注解方式

    Spring-service-mvc.xml <context:component-scan base-package="com.restful.controller,com.rest ...

  3. 全志A33 lichee lvds屏幕配置

    开发平台 * 芯灵思SinlinxA33开发板 淘宝店铺: https://sinlinx.taobao.com/ 嵌入式linux 开发板交流 QQ:641395230 芯灵思SinlinxA33开 ...

  4. pxe+Kickstart自动装机补充知识点

    1.vmlinuzvmlinuz是可引导的.压缩的内核.“vm”代表“Virtual Memory”.Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制.Linux能够使用硬盘 ...

  5. etcd和redis的比较和日常使用场景

    转自https://blog.csdn.net/weixin_41571449/article/details/79429511 个人观点:etcd的红火来源于kurbernetes用etcd做服务发 ...

  6. MyTomcat(手写服务器)

    Tomcat 是非常流行的 Web Server,它还是一个满足 Servlet 规范的容器.那么想一想,Tomcat 和我们的 Web 应用是什么关系? 从感性上来说,我们一般需要把 Web 应用打 ...

  7. android 2.3.4 编译中出错和解决办法

    需要安装的一些库,有如下一些: sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl zlib ...

  8. 层次softmax函数(hierarchical softmax)

    一.h-softmax 在面对label众多的分类问题时,fastText设计了一种hierarchical softmax函数.使其具有以下优势: (1)适合大型数据+高效的训练速度:能够训练模型“ ...

  9. cookie的中文乱码问题【URL编码解码】

    先搞明白为什么会乱码,为什么要转码: 在tomcat 8 之前,cookie中不能直接存储中文数据.需要将中文数据转码,一般采用URL编码(%E3).在tomcat 8 之后,cookie支持中文数据 ...

  10. thinkphp5 与 endroid 二维码生成

    windows compser安装endroid/qrcode,自己安装好composer工具; 1. 项目目录 文件 composer.json require 里添加 "endroid/ ...