Vue框架H5商城类项目商品详情点击返回弹出推荐商品弹窗的实现方案
需求场景:
- 非推荐商品详情页返回的时候弹出弹窗推荐商品,点击弹窗按钮可以直接访问推荐商品;
- 只有直接进入商品详情页返回才会弹出推荐商品弹窗;
- 每个用户访问只能弹一次(除非清除缓存)。
需求分析:
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商城类项目商品详情点击返回弹出推荐商品弹窗的实现方案的更多相关文章
- 模拟app上商品详情点击图片放大并且可以切换大图
主要使用swiper插件,这里使用各小技巧,就是用两个swiper容器,点击一个小图容器,去让大图容器展示出来 小图容器 <div class="q_banner"> ...
- 第04项目:淘淘商城(SpringMVC+Spring+Mybatis)【第九天】(商品详情页面实现)
https://pan.baidu.com/s/1bptYGAb#list/path=%2F&parentPath=%2Fsharelink389619878-229862621083040 ...
- Day13_商品详情及静态化
学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 0.学习 ...
- 云计算:Ubuntu下Vue+Springboot前后端分离项目部署(多节点)
一.机器准备 首先准备三台机器: 我是一台WINDOWS系统主机,在WINDOWS里的 VMware 中安装两台Ubuntu系统虚拟机 如果你的虚拟机只有 CentOS,可以参考这篇文章:https: ...
- Android跳转淘宝、京东APP商品详情页
import Android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; imp ...
- 18 Flutter仿京东商城项目 商品详情顶部tab切换 顶部下拉菜单 底部浮动导航
ProductContent.dart import 'package:flutter/material.dart'; import '../services/ScreenAdaper.dart'; ...
- 19 Flutter仿京东商城项目 商品详情 底部浮动导航布局 商品页面布局
效果: widget/JdButton.dart import 'package:flutter/material.dart'; import '../services/ScreenAdaper.da ...
- SSH网上商城---商品详情页的制作
在前面的博文中,小编分别简单的介绍了邮件的发送以及邮件的激活,逛淘宝的小伙伴都有这样的体会,比如在搜索框中输入连衣裙这个商品的时候,会出现多种多样各种款式的连衣裙,连衣裙的信息包括价格,多少人购买,商 ...
- vue 实现一个商城项目
在学习了 vue 之后,决定做一个小练习,仿写了一个有关购物商城的小项目.下面就对项目做一个简单的介绍. 项目源码: github 项目的目录结构 -assets 与项目有关的静态资源,包括 css, ...
随机推荐
- 【python接口自动化框架-unittest】如何传参数到下一个case
1.前提 平时我们用unittest的时候,都知道每个test_ 都是相互独立的,但是很多现实情况是,我们下一个接口参数,可能会用到上一个接口返回的json字段,那么,我们怎么去实现呢 2.实例 1. ...
- alert大法看执行流程(一次采坑)
页面的dom元素加载完了,给元素一次性添加事件. 收获:事件都是一次性给添加好的,不是点击一次,................................................... ...
- 为什么浏览器User-agent总是有Mozilla字样
你是否好奇标识浏览器身份的User-Agent,为什么每个浏览器都有Mozilla字样?Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 ( ...
- Property referenced in indexed property path is neither an array nor a List nor a Map
记一次传参请求报错,没有解决 Invalid property 'distributeCars[0][ackStatus]' of bean class [com.api6.plate.prototy ...
- bvlc_reference_caffenet网络权值可视化
一.网络结构 models/bvlc_reference_caffenet/deploy.prototxt 二.显示conv1的网络权值 clear; clc; close all; addpath( ...
- 阅读 Device Driver Programmer Guide 笔记
阅读 Device Driver Programmer Guide 笔记 xilinx驱动命名规则 以X开头 源文件命名规则 以x打头 底层头文件与高级头文件 重点来了,关于指针的使用 其中 XDev ...
- python3学习笔记七(字典)
参照http://www.runoob.com/python3/python3-dictionary.html 字典 字典是另一种可变容器模型,且可以存储任意类型对象. dict1 = {key1:v ...
- jenkins 找插件下载的方法
登陆jenkins官网 https://jenkins.io/ 搜索需要的插件,点击 注意这步,要点击右上角Archives 下载对应的 hpi包 然后把下载的hpi文件,放到 jenkins 插件管 ...
- 读取Excel的部分问题
1.office分很多版本,导致Excel连接字符串不同. 2.是否有标题头的问题(在连接字符串中设置) 3.Excel本身删除分数据删除和表格结构删除.普通delete只能删除数据, 还是能读取到表 ...
- 读写txt
FileStream fileStr = new FileStream("shaftCofig.txt", FileMode.OpenOrCreate); StreamReader ...