广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >原生js实现购物车逻辑和功能
  • 185
分享到

原生js实现购物车逻辑和功能

2024-04-02 19:04:59 185人浏览 薄情痞子
摘要

本文实例为大家分享了js实现购物车逻辑和功能的具体代码,供大家参考,具体内容如下 1、购物车的主体内容布局尽量用表格的布局模式 2、判断用户是否登录 代码如下,可以根据自己头部的布局

本文实例为大家分享了js实现购物车逻辑和功能的具体代码,供大家参考,具体内容如下

1、购物车的主体内容布局尽量用表格的布局模式

2、判断用户是否登录

代码如下,可以根据自己头部的布局来具体修改


// 判断用户是否登录
var username = getCookie("username");
//如果登录成功就执行这段代码
if(username){
    var vip = $(`<a href='javascript:;'>欢迎<b>${username}</b>来到天猫超市</a>`)
    var loginout = $(`<a href='javascript:;' class="loginout">退出</a>`)
    $(".hLeft").empty()
    $(".hLeft").append(vip)
    $(".hLeft").append(loginout)
    $(".hLeft>a").CSS({
        "color":"#666",
        "lineHeight":"32px",
        "marginLeft":"10px"
    })
    $(".hLeft>a>b").css({
        "color":"red",
        "fontWeight":"800",
    })
    $(".loginout").click(function(){
        removeCookie("username")
        $(".hLeft").empty()
        $(".hLeft").html(` <a href="home.html" >天猫首页</a>
        <a href="javascript:;" >喵,欢迎来到天猫</a>
        <a href="login.html" >请登录</a>
        <a href="reGISter-test.html" >免费注册</a>`)
    })
}else{
    alert("请先登录");
    location.assign("./login.html");
}

3、判断从详情页是否有数据传过来

在这里我数据是保存到本地存储里面的,你可以根据自己存储的地方来获取数据
代码如下:


// 接收详情页传过来的数据
// 先判断本地存储中有没有商品
var data = localStorage.getItem("cart");
if(!data){
    $(".page-con").empty();
    var str = "";
    str +=`<h2>购物车空空如也!!!</h2>
    <p>请快点移步到列表页选择商品把<p><a href="./list.html" >进入列表页</a>
    `
    $(".page-con").html(str);
    $(".page-con").css({width:"900px",margin:"40px auto 0"});
    $(".page-con h2").css({fontSize:"50px",color:"blue",lineHeight:"80px"})
    $(".page-con p").css({fontSize:"20px",lineHeight:"26px"});
    $(".page-con a").css({width:"100px",height:"40px",background:"skyblue",marginTop:"20px",display:"block"})
}else{
    // 再判断是否有当前用户的购物车是数据
    // 将数据转成数组类型
    data = JSON.parse(data);
    // 查看数据是否存在
    for(var j=0;j<data.length;j++){}
    var res = data.some(v=>{
        return v.username == username;
    })
    if(!res){
        $(".page-con").empty();
        var str = "";
        str +=`<h2>购物车空空如也!!!</h2>
        <p>请快点移步到列表页选择商品把<p><a href="./list.html" >进入列表页</a>
        `
        $(".page-con").html(str);
        $(".page-con").css({width:"900px",margin:"40px auto 0"});
        $(".page-con h2").css({fontSize:"50px",color:"blue",lineHeight:"80px"})
        $(".page-con p").css({fontSize:"20px",lineHeight:"26px"});
        $(".page-con a").css({width:"100px",height:"40px",background:"skyblue",marginTop:"20px",display:"block"})
    }else{
        // 有数据 且有自己的数据
        // 先把自己的数据找出来
        var arr = data.filter(v=>v.username == username);
        // 遍历获取的数据 
        // 在数组中没有想要的商品数据,需要从数据库中获取一下 通过id在数据库中查找数据
        var ids = arr.map(v=>v.Goodsid);
        
        ids = ids.join(",")

4,查询有详情页传送过来的数据时 ,我们可以通过传过来的id到数据库中查找我们想要的数据

发送ajax到数据库中查找商品的信息


$.ajax({
            url:"./server/cart.PHP",
            dataType:"json",
            data:{ids:ids},
            type:"get",
            success:res=>{
                var str = '';
                for(var i=0;i<res.length;i++){
                    // 根据res[i] 每一条商品,从arr中找出number数量
                    var number = arr.find(v=>v.goodsid==res[i].id).number;
                    
                    str +=`
                        <div class="pageMtop">
                            <input type="checkbox" name="onetop"><i></i><span>店铺:${res[i].name}</span><em></em>
                        </div>
                        <div class="pageMcontent">
                            <h3><img src="images/cat10.png">8.6 0点开享,每满300减30</h3>
                            <ul>
                                <li>
                                    <input type="checkbox" name="one">
                                </li>
                                <li>
                                    <a href="#" >
                                        <img src="${res[i].imgpath}">
                                    </a>
                                </li>
                                <li>
                                    <p>
                                        <a href="#" >${res[i].introduce}</a>
                                    </p>
                                    <img src="images/cat03.png" alt="">
                                    <a href="javascript:;" ><img src="images/cat04.png" alt=""></a>
                                </li>
                                <li>
                                    <p>尺码:M</p>
                                    <p>主要颜色:6685白色+6691雾霾蓝(M码预售8月8号发出</p>
                                    <a href="#" >修改</a>
                                </li>
                                <li>
                                    <span>${res[i].price}</span>
                                </li>
                                <li class="data-name" data-id = "${res[i].id}">
                                <input type="button" class="reduce" value="-">
                                <input class="numberone"  type="number" name="number" data-stock="${res[i].stock}" value="${number}">
                                <input type="button" class="add" value="+">
                                </li>
                                <li class="subtotal">
                                    ${res[i].price*number}
                                </li>
                                <li>
                                    <p>移入文件夹</p>
                                    <p class="btn">删除</p>
                                    <p>宝贝</p>
                                </li>
                            </ul>
                        </div>
                    `
                }
                $(".page-middle").html(str)
                 //在这里添加全选功能
                // 在这里写的话 代码嵌套太深 - 将功能写在外面,然后在这边调用函数
                //调用全选的功能
                selectAll()
                //调用单选功能
                selectone()
                // 计算总价和总数量
                priceAndNumberAll()
                // 数量加减
                addAndReduce()
                // 点击删除键
                removebtn()
            }
        })
    }

在这里商品列的布局和内容渲染我们需要动态加载,然后添加到放主体内容的大盒子里

5、实现购物车页面的功能

因功能代码比较多,都放在ajax中会显得冗余,我们把每个功能封装成函数,在ajax完成后的回调函数中直接调用

6、全选功能

代码如下:


// 全选功能
function selectAll(){
    // 给上下两个全选都绑定事件
    $("[name='topAll']")[0].onclick = $("[name='footAll']")[0].onclick = function(){
        // 设置单选的状态
        $("[name='one']").prop("checked",$(this).prop("checked"))
        $("[name='onetop']").prop("checked",$(this).prop("checked"))
        // 给两个复选框添加全选
        $("[name='topAll']").prop("checked",$(this).prop("checked"))
        $("[name='footAll']").prop("checked",$(this).prop("checked"))
        priceAndNumberAll()
    }
}

7、单选功能

代码如下:


// 单选功能
function selectone(){
    $("[name='one']").click(function(){
        // 判断是否所有的都选中
        //$("[name='one']")是一个伪数组,不能调用数组方法 先把它转成数组
        $("[name='onetop']").prop("checked",$(this).prop("checked"))
        var arr = Array.prototype.slice.call($("[name='one']"))
        // 调用every方法 如果有一个没选中就返回false
        var res = arr.every(v=>$(v).prop("checked"));
        if(res){
            $("[name='topAll']").prop("checked","checked");
            $("[name='onetop']").prop("checked","checked");
            $("[name='footAll']").prop("checked","checked");
        }else{
            $("[name='topAll']").prop("checked",false);
            $("[name='footAll']").prop("checked",false)
        }
        priceAndNumberAll()
    })
}

8、计算数量的总计和价格的总价

代码如下:


// 计算总价和总数量
function priceAndNumberAll(){
    // 根据选中的框来计算
    // 选择被选中的那个数量number
    var allNumInput = $("[name='one']:checked").parent().siblings(".data-name").find("[name='number']")
    var allNum = 0;
    allNumInput.each(function(k,v){
        allNum += v.value-0;
    })
    $(".allnumber").text(allNum);
    var allPriceEle = $("[name=one]:checked").parent().siblings(".subtotal")
    var allPrice = 0;
    allPriceEle.each(function(k,v){
        allPrice += allPriceEle.text()-0;
    })
    $(".allprice").text(allPrice);
}

9、点击加减按钮让数量和金额进行加减

代码如下:


// 点击加减让数量进行加减
function addAndReduce(){
    // 点击加的按钮 
    $(".add").click(function(){
        // 先获取input框里面的数值
        var num = $(this).prev().val()-0;
        // 每点击一次就让input里面的值++
        num ++
        // 数据是不能无线加的 要进行判断 如果加到最大值 就不让他加了
        if(num>=$(this).prev().attr("data-stock")-0){
            num=$(this).prev().attr("data-stock")-0
            $(this).prop("disabled",true);
            $(this).addClass("bgadd");
            $(this).prev().prev().prop("disabled",false);
        }else{
            $(this).prop("disabled",false);
            $(this).prev().prev().removeClass("bgreduce");
        }
        $(this).prev().val(num)
        // 计算小计里面的价格
        // 找到放单价的那个标签和值
        var price = $(this).parent().prev().find("span").text()-0;
        // 重新计算小计
        var subtotal = price*num;
        // 计算好小计之后放到存放那个td中
        $(this).parent().next().text(subtotal);
        // 重新设置本地存储
        // 获取本地存储的数据
        var data = localStorage.getItem("cart");
        // 转换成数组
        data = JSON.parse(data);
        // 遍历数组 查找数组中满足条件的数据
        var obj = data.find(v=>v.username==username && v.goodsid==$(this).parent().attr("data-id"));
        obj.number = num;
        localStorage.setItem("cart",JSON.stringify(data))
        priceAndNumberAll()
    })
    $(".reduce").click(function(){
        // 先获取input框里面的数值
        var num = $(this).next().val()-0;
        // 每点击一次就让input里面的值++
        num --
        // 数据是不能无线加的 要进行判断 如果加到最大值 就不让他加了
        if(num<1){
            num=1;
            $(this).prop("disabled",true);
            $(this).addClass("bgreduce");
            $(this).next().next().prop("disabled",false)
        }else{
            $(this).prop("disabled",false);
            $(this).next().next().removeClass("bgadd");
        }
        $(this).next().val(num)
        
        var price = $(this).parent().prev().find("span").text()-0;
        // 重新计算小计
        var subtotal = price*num;
        // 计算好小计之后放到存放那个td中
        $(this).parent().next().text(subtotal);
        // 将数据重新存储到本地存储
        var data =  localStorage.getItem("cart");
        data = JSON.parse(data);
        // 查找满足添加的数据
        var obj = data.find(v=>{
            return v.username==username&&v.goodsid==$(this).parent().attr("data-id");
        })
        obj.number = num;
        localStorage.setItem("cart",JSON.stringify(data));
        priceAndNumberAll()
    })
}

10、点击删除按钮功能

代码如下:


// 点击删除的函数
function removebtn(){
    // 点击事件
    $(".btn").click(function(){
        // 提示是否要删除
        if(!confirm("你确定要删除吗")){
            return false;
        }
        // 将本地存储的这条数据删除
        var data = localStorage.getItem("cart");
        data = JSON.parse(data);
        var index = data.findIndex(function(v){
            v.username==username&&v.goodsid==$(this).parent().siblings(".data-name").attr("data-id")
        });
        data.splice(index,1);
        localStorage.setItem("cart",JSON.stringify(data))
        var tr = $(this).parent().parent();
        tr.remove()
        if(!data.filter(v=>v.username==username).length){
            // 如果数据没了就不显示表格
            $(".page-middle").empty();
            // 让页面显示自定义的内容
            var str = "";
            str += `<h2>购物车空空如也!!!</h2>
        <p>请快点移步到列表页选择商品把<p><a href="./list.html" >进入列表页</a>
        `
        $(".page-middle").html(str);
        $(".page-middle").css({width:"1200px",margin:"40px auto 0"});
        $(".page-middle h2").css({fontSize:"50px",lineHeight:"80px",color:"blue"})
        }

    })
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: 原生js实现购物车逻辑和功能

本文链接: https://www.lsjlt.com/news/136323.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 原生js实现购物车逻辑和功能
    本文实例为大家分享了js实现购物车逻辑和功能的具体代码,供大家参考,具体内容如下 1、购物车的主体内容布局尽量用表格的布局模式 2、判断用户是否登录 代码如下,可以根据自己头部的布局...
    99+
    2022-11-12
  • 原生js怎么实现购物车功能
    本篇内容介绍了“原生js怎么实现购物车功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!* 实现购物车商品数量的加减,注意数量最少为1,数量...
    99+
    2023-06-30
  • Flutter实现购物车功能(代码+逻辑)
    目录一、初始化时判断是否为登录状态二、分析点击全选和非全选状态三、改变单个物品check四、点击数量增加和减少按钮改变当前显示number值五、长按删除数据一、初始化时判断是否为登录...
    99+
    2022-11-13
  • 原生js+cookie如何实现购物车功能
    这篇文章主要介绍原生js+cookie如何实现购物车功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:这里使用js+cookie实现简单的购物车功能。首先是简单的HTML结...
    99+
    2022-10-19
  • 原生js模拟购物车功能
    使用html配合原生js实现购物车功能,供大家参考,具体内容如下 * 实现购物车商品数量的加减,注意数量最少为1,数量输入仅能为数字* 实现购物车商品的移除* 可以在同一页面再设计几...
    99+
    2022-11-13
  • js实现简易购物车功能
    本文实例为大家分享了js实现简易购物车功能的具体代码,供大家参考,具体内容如下 一.整体效果图 (关灯下)  (开灯下) 二.HTML代码 <!DOCTYPE...
    99+
    2022-11-12
  • javaweb实现购物车功能
    本篇文章讲的是如何使用javaweb相关知识模拟购物车功能 (web练手小项目) 使用到的相关知识(部分知识点在文章中简单涉及到):        html  cs  javascript  jsp  servlet   ajax  jQu...
    99+
    2023-10-24
    mybatis java mysql servlet tomcat
  • python实现购物车功能
    本文实例为大家分享了python实现购物车功能的具体代码,供大家参考,具体内容如下 功能要求: 要求用户输入总资产,例如:2000显示商品列表,让用户根据序号选择商品,加入购物车购买...
    99+
    2022-11-13
  • jquery实现购物车功能
    本文实例为大家分享了jquery实现购物车功能的具体代码,供大家参考,具体内容如下 html ​<!DOCTYPE html> <html> ...
    99+
    2022-11-12
  • python购物车功能实现
    name = "gaowang" pwd = "123.abc" list_he=[]          #定义空列表,后面接收 for i in range(3):     username = input("请输入您的账号:")    ...
    99+
    2023-01-31
    购物车 功能 python
  • 原生JavaScript实现购物车效果
    本文实例为大家分享了JavaScript实现购物车效果的具体代码,供大家参考,具体内容如下 HTML: <!DOCTYPE html> <html>     ...
    99+
    2022-11-13
  • 原生js实现计算购物车总金额的示例
    随着vue、react、angular等MVVM框架的兴起。让之前需要对dom进行复杂操作才能实现的需求变得如此简单。确实,作为数据驱动dom的框架,让我们在项目中变得愈加游刃有余。...
    99+
    2023-05-16
    js计算购物车总金额 js 购物车总金额
  • angular和BootStrap3如何实现购物车功能
    这篇文章将为大家详细讲解有关angular和BootStrap3如何实现购物车功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、页面搭建1、html结构采用BootS...
    99+
    2022-10-19
  • Android实现简单购物车功能
    本文实例为大家分享了Android实现购物车功能的具体代码,供大家参考,具体内容如下MainActivity布局:<?xml version="1.0" encoding="utf-8"?><LinearL...
    99+
    2023-05-30
    android 购物车 roi
  • vue实现书籍购物车功能
    本文实例为大家分享了vue实现书籍购物车功能的具体代码,供大家参考,具体内容如下 效果图 点击增加、减少购买数量和移除总价格会变化 代码 <!DOCTYPE html&g...
    99+
    2022-11-12
  • vue实现购物车完整功能
    vue实现购物车商品单选、全选及商品数量和总价计算,供大家参考,具体内容如下 效果展示 HTML <template>   <div class="buyCar"...
    99+
    2022-11-13
  • Vue2.0怎么实现购物车功能
    这篇文章将为大家详细讲解有关Vue2.0怎么实现购物车功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。简介vue.js是由华人尤雨溪开发的一套MVVM框架。vue.js...
    99+
    2022-10-19
  • 如何实现IONIC购物车功能
    这篇文章主要为大家展示了“如何实现IONIC购物车功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何实现IONIC购物车功能”这篇文章吧。具体内容如下HTM...
    99+
    2022-10-19
  • vue如果实现购物车功能
    本文小编为大家详细介绍“vue如果实现购物车功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue如果实现购物车功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 原理分析...
    99+
    2022-10-19
  • Vue.js框架实现购物车功能
    本文实例为大家分享了Vue.js框架实现购物车的具体代码,供大家参考,具体内容如下 <!DOCTYPE html> <html lang="en" xmlns:...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作