• Vue电商项目--详情页面完成


    放大镜操作上

    1. <script>
    2. var mySwiper = new Swiper ('.swiper', {
    3. direction: 'vertical', // 垂直切换选项
    4. loop: true, // 循环模式选项
    5. // 如果需要分页器
    6. pagination: {
    7. el: '.swiper-pagination',
    8. },
    9. // 如果需要前进后退按钮
    10. navigation: {
    11. nextEl: '.swiper-button-next',
    12. prevEl: '.swiper-button-prev',
    13. },
    14. // 如果需要滚动条
    15. scrollbar: {
    16. el: '.swiper-scrollbar',
    17. },
    18. })
    19. </script>

     首先搞这个轮播图的,先把轮播图初始化。就是把官网的复制下来,删除一些,我们不需要的内容

    但是存在bug,它默认只存在一个

    看官网解决问题slidesPerView_Swiper参数选项 

    1. // 设置图片的个数
    2. slidesPerView:3,
    3. // 每次切换一个图片
    4. slidesPerGroup:1

    现在实现了一个点击添加active样式的效果。除了这个我们还需要添加:通知兄弟组件,当前索引是几,然后上面展示相应的图片

     然后接收它

    放大镜结束

    为什么我们点击的永远是第一张呢?这是因为.skuImageList[0]写死了索引,它只能为第一张,我们应该定义的变量来保存索引,保障这是活的索引

    ok,这样就成功了。此时我们需要考虑一下这个放大镜是如何实现的 

    就是鼠标移入,然后让这个蒙版跟着鼠标移动

    e.offsetX-mask.offsetWidth/2就是这个打钩的距离

    这样就能动了,但是没有约束范围

    但是还有bug,那就是大图并没有发生变化,我们需要采用同样的方式设置大图

     

    1. handler(e){
    2. let mask=this.$refs.mask
    3. let big=this.$refs.big
    4. let left =e.offsetX-mask.offsetWidth/2
    5. let top=e.offsetY-mask.offsetHeight/2
    6. // 约束范围
    7. if(left<=0) left=0;
    8. if(left>=mask.offsetWidth) left=mask.offsetWidth
    9. if(top<=0) top=0;
    10. if(top>=mask.offsetWidth) top=mask.offsetHeight
    11. // 修改mask的left|top的值
    12. mask.style.left=left+'px'
    13. mask.style.top=top+'px'
    14. big.style.left=-2*left+'px'
    15. big.style.top=-2*top+'px'
    16. }

    购买产品个数的操作

    完成了这一块点击按钮++,--效果

      

    1. changeSkuNum(e){
    2. let value=e.target.value*1
    3. // 如果用户输入进来的非法,出现nan或者小于1
    4. if(isNaN(value)||value<1){
    5. this.skuNum=1
    6. }else{
    7. // 不能出现小数
    8. this.skuNum=parseInt(value)
    9. }
    10. }

    加入购物车

    就是要告诉服务器,谁加入到服务器,向服务器发请求。然后进行路由跳转

    添加到购物车(对已有物品进行数量改动)接口说明

    请求地址

    /api/cart/addToCart/{ skuId }/{ skuNum }

    请求方式

    POST

    参数类型

    参数名称

    类型

    是否必选

    描述

    skuID

    string

    Y

    商品ID

    skuNum

    string

    Y

    商品数量

    正数代表增加

    负数代表减少

    返回示例

    成功:

    {

        "code": 200,

        "message": "成功",

        "data": null,

        "ok": true

    }

     先写接口

    export const reqAddOrUpdateShopCart=(skuId,skuNum)=>requests({url:`/api/cart/addToCart/${skuId}/${skuNum }`,method:'post'})

     先绑定加入购物车的函数

    1.发请求--将产品加入数据库(通知服务器)

    2.服务器存储成功--进行路由跳转传递参数

    3.失败,给用户进行提示

    首先,我们需要先拿到我们数据,然后在配送数据

    然后发现了错误,404,查看一下应该是服务器接口的问题,果然加了/api导致错误 

     

     这样成功发起请求了

     这里要注意服务器写入数据成功,并没有返回其他的数据,只返回code=200,表示这次操作成功

    因为服务器没有返回其余数据,因此咋们不需要三连环存储数据

    加入购物车成功与失败的判断

    就是原先我们配发了一个action,也拿到了服务器的请求。但我们还要加入购物车成功与失败的判断,成功进行路由的跳转,失败就提示信息

    它返回的是一个 是Promise对象,那就有失败和成功的回调。因为上面的代码就是调用仓库的addOrUpdateShopCart,这个方法加上asyn,返回的一定是一个Promise对象

     注意的一点就是我们要使用try……catch……监听异常 

    加入购物车操作

    先复制写好的成功后跳转的路由的组件。然后注册路由

       

    路由传递参数结合会话存储

    就是在路由跳转的时候还需要将产品的信息带给下一级的路由组件

    一些简单的数据skuNum,通过query形式给路由组件传递过去

    产品信息的数据【比较简单:skuInfo】通过会话存储(不持久化,会话结束数据在消失)

    本地存储|会话存储:一般存储的是字符串

     存储到会话中 

     然后计算属性加工一下,渲染到页面上就可以了 

    购物车静态组件与修改

    之前完成了跳转到购物车页面,但我们现在点击要回去

     当然要把id给带回去,然后完成点击去购物车结算 >模块

     先捞组件,然后配置路由

     修改静态组件        

     

     搞定 

  • 相关阅读:
    小程序AI智能名片商城系统直连:打造用户与企业无缝对接的新时代!
    Mac PHP7.4安装
    Wordpress自定义小工具logo调用设置(可视化)
    NLP | XLNet :用于语言理解的广义自回归预训练 论文详解
    图论16-拓扑排序
    基于elasticjob的入门maven项目搭建
    MQ - 17 集群篇_(性能)分布式存储系统的编程技巧
    16【数据库的范式】
    【Python | 入门】 五分钟速通语法
    【shell】条件语句
  • 原文地址:https://blog.csdn.net/weixin_64612659/article/details/130912011