首页 web前端 js教程 JavaScript编写一个简易购物车功能

JavaScript编写一个简易购物车功能

Feb 04, 2017 pm 01:31 PM

网上关于购物车实现的代码非常多,今天看了一些知识点,决定自己动手写写,于是写了一个简易购物车,接下来讲解一下具体的实现。 

1、用html实现内容; 

2、用css修饰外观; 

3、用js(jq)设计动效。

第一步:首先是进行html页面的设计,我用一个大的div将所有商品包含,然后用不同的div将不同的商品进行封装,商品列表中我用了ul li实现,具体实现代码如下(代码中涉及到的商品都是网上随便copy的,不具有参考价值): 

<div id="goods">
  <div class="goodsItem">
   <ul class="goditem">
    <li class="godpic"><img src="images/1.png"></li>
    <li class="godprice">¥25.00</li>
    <li class="godinfo">《飞鸟集》中很多诗歌是用孟加拉文创作的,这部诗集最早由郑振铎先生译介到中国。</li>
    <li class="godadd"><a href="javascript:;">加入购物车</a></li>
   </ul>
  </div>
  <div class="goodsItem">
   <ul class="goditem">
    <li class="godpic"><img src="images/2.png"></li>
    <li class="godprice">¥56.00</li>
    <li class="godinfo">本书主要介绍了如何使用现有的Web 相关技术构建Android 应用程序。</li>
    <li class="godadd"><a href="javascript:;">加入购物车</a></li>
   </ul>
  </div>
  <div class="goodsItem">
   <ul class="goditem">
    <li class="godpic"><img src="images/3.png"></li>
    <li class="godprice">¥37.00</li>
    <li class="godinfo">用文字打败时间。冯唐最畅销作品,杂文才是其销量最好、最受欢迎的作品。</li>
    <li class="godadd"><a href="javascript:;">加入购物车</a></li>
   </ul>
  </div>
  <div class="goodsItem">
   <ul class="goditem">
    <li class="godpic"><img src="images/1.png"></li>
    <li class="godprice">¥25.00</li>
    <li class="godinfo">《飞鸟集》中很多诗歌是用孟加拉文创作的,这部诗集最早由郑振铎先生译介到中国。</li>
    <li class="godadd"><a href="javascript:;">加入购物车</a></li>
   </ul>
  </div>
  <div class="goodsItem">
   <ul class="goditem">
    <li class="godpic"><img src="images/2.png"></li>
    <li class="godprice">¥56</li>
    <li class="godinfo">本书主要介绍了如何使用现有的Web 相关技术构建Android 应用程序。</li>
    <li class="godadd"><a href="javascript:;">加入购物车</a></li>
   </ul>
  </div>
  <div class="goodsItem">
   <ul class="goditem">
    <li class="godpic"><img src="images/3.png"></li>
    <li class="godprice">¥37.00</li>
    <li class="godinfo">用文字打败时间。冯唐最畅销作品,杂文才是其销量最好、最受欢迎的作品。</li>
    <li class="godadd"><a href="javascript:;">加入购物车</a></li>
   </ul>
  </div>
 </div>
 
 <div id="godcar">
  <div class="dnum">0</div>
  <div class="dcar">
   <img src="images/car.jpg">
  </div>
 </div>

其中涉及到一个知识点:在

  • 加入购物车
  • 中,我用到了javascript:;这个的意思表示不进行跳转,执行一个空事件。

    第二步:进行外观设计,为了更好的显示,我将包含每个商品列表的div设置了width和height,以及border,值得注意的是,我为了让购物车固定在某个位置,将其position设置为fixed,然后通过设置top和left让其固定在你想要的位置上。另外,要学会灵活使用margin和padding,让显示更美观。

    注:如果想给行内元素设置width和height或者其他块级元素的属性,那么需要设置display:block才可以。

    具体设计代码如下:

    * {
     padding: 0px;
     margin: 0px;
     font-family: "微软雅黑";
    }
     
    .goodsItem{
     width:280px;
     height: 400px;
     float: left;
     border: 1px solid #ccc;
     margin:5px;
    }
    #goods{
     width:910px;
    }
    .goditem{
     list-style: none;
    }
    .godpic img{
     display: block;
     width:250px;
     height: 250px;
     margin:0px auto;
    }
    .godprice,.godinfo,.godadd{
     display: block;
     width:220px;
     margin:0px auto;
     text-align: center;
    }
    .godprice{
     font-size: 20px;
     color: #f00;
    }
    .godinfo{
     text-align: center;
     font-size: 14px;
     margin: 10px 0px;
     
    }
    .godadd a{
     display: block;
     width: 150px;
     height: 36px;
     background-color: #fd6a01;
     border-radius: 10px;
     margin: 0px auto;
     text-decoration: none;
     color:#fff;
     line-height: 36px;
    }
    #godcar{
     position: fixed;
     right: 0px;
     top:40%;
     width: 72px;
     height: 64px;
    }
    #godcar .dnum{
     width:24px;
     height: 24px;
     border-radius: 12px;
     background-color: #f00;
     text-align: center;
     line-height: 24px;
     position: absolute;
     font-size: 12px;
     top:0px;
    }
    .godadd .bg {
     background-color: #808080;
    }

    第一个*表示为所有元素设置属性,在一开始就设置margin和padding是一个很好的习惯。

    第三步:实现了静态页面,接下来需要通过jq进行购物车具体的实现,比如加入购物车,购物车数量变化等。我花了一些时间在设计:如何让商品加入购物车时,图片能够慢慢移动到购物车,然后变小,最后消失。其中,我用到了animate函数实现这个过程。要实现这个功能的难点在于:图片要怎么移动,怎么变化。

    接下来讲解如何实现这个过程:

    1)首先需要获取到商品的图片,然后将获取到的图片复制一份;

    var img = $(this).parent().find(".godpic").find("img");
     var cimg = img.clone();

    2)得到商品图片的top和left值,购物车的top和left值,这样才可以通过animate函数实现移动;var imgtop = img.offset().top;

    var imgleft = img.offset().left;
    var cartop = $("#godcar").offset().top;
    var carleft = $("#godcar").offset().left;

    3)编写animate函数,实现具体的效果;
    cimg.appendTo($("body")).css({

    "position": "absolute",//绝对定位
     "opacity": "0.7",
     "top": imgtop,
     "left": imgleft
    }).animate({
     "top": cartop,
     "left": carleft,
     "width": "40px",
     "height": "40px",
     "opacity": "0.3" //透明度
    }, 1000, function () {
     cimg.remove(); //图片消失
     $(".dnum").text(i); //购物车数量变化
    });

    简单的移动和变化就实现了。

    但是后面又想,每次刷新购物车的数量重新归0好像不符合事实,于是就想着如何实现刷新页面时,不让购物车的数量发生变化,查了资料,总结了三种方法:

    (1)保存到数据库;
    (2)通过cookie方法;
    (3)通过h5的localStorage方法;

    最后我决定采用第三种方法,因为想试试h5的新方法(出于好奇心理~~,也是因为刚好看到这个方法,就试试看),localStorage 方法存储的数据没有时间限制。第二天、第二周或下一年之后,数据依然可用。我的代码具体实现:localStorage.getItem。

    好了,所有该讲的都讲完了,附上jq的所有代码,喜欢的就点个赞:

    var i = 0;
    $(function(){
     var inum = 0;
     if(localStorage.getItem("inum")!==null){
      inum = localStorage.getItem("inum");
     }
     $(".dnum").text(inum);
     
     $(".godadd").click(function(){
      if (!$(this).find("a").hasClass("bg")) {
       i++;
       $(this).find("a").addClass("bg");
       var img = $(this).parent().find(".godpic").find("img");
       var cimg = img.clone();
     
       var imgtop = img.offset().top;
       var imgleft = img.offset().left;
     
       var cartop = $("#godcar").offset().top;
       var carleft = $("#godcar").offset().left;
     
       cimg.appendTo($("body")).css({
        "position": "absolute",
        "opacity": "0.7",
        "top": imgtop,
        "left": imgleft
       }).animate({
        "top": cartop,
        "left": carleft,
        "width": "40px",
        "height": "40px",
        "opacity": "0.3"
       }, 1000, function () {
        cimg.remove();
        $(".dnum").text(i);
        localStorage.setItem("inum", i);
       });
      }
     
     });
    });

    效果图:

    JavaScript编写一个简易购物车功能

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

    更多JavaScript编写一个简易购物车功能相关文章请关注PHP中文网!

    本站声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热AI工具

    Undress AI Tool

    Undress AI Tool

    免费脱衣服图片

    Undresser.AI Undress

    Undresser.AI Undress

    人工智能驱动的应用程序,用于创建逼真的裸体照片

    AI Clothes Remover

    AI Clothes Remover

    用于从照片中去除衣服的在线人工智能工具。

    Clothoff.io

    Clothoff.io

    AI脱衣机

    Video Face Swap

    Video Face Swap

    使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

    热工具

    记事本++7.3.1

    记事本++7.3.1

    好用且免费的代码编辑器

    SublimeText3汉化版

    SublimeText3汉化版

    中文版,非常好用

    禅工作室 13.0.1

    禅工作室 13.0.1

    功能强大的PHP集成开发环境

    Dreamweaver CS6

    Dreamweaver CS6

    视觉化网页开发工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神级代码编辑软件(SublimeText3)

    热门话题

    Laravel 教程
    1602
    29
    PHP教程
    1504
    276
    如何在node.js中提出HTTP请求? 如何在node.js中提出HTTP请求? Jul 13, 2025 am 02:18 AM

    在Node.js中发起HTTP请求有三种常用方式:使用内置模块、axios和node-fetch。1.使用内置的http/https模块无需依赖,适合基础场景,但需手动处理数据拼接和错误监听,例如用https.get()获取数据或通过.write()发送POST请求;2.axios是基于Promise的第三方库,语法简洁且功能强大,支持async/await、自动JSON转换、拦截器等,推荐用于简化异步请求操作;3.node-fetch提供类似浏览器fetch的风格,基于Promise且语法简单

    JavaScript数据类型:原始与参考 JavaScript数据类型:原始与参考 Jul 13, 2025 am 02:43 AM

    JavaScript的数据类型分为原始类型和引用类型。原始类型包括string、number、boolean、null、undefined和symbol,其值不可变且赋值时复制副本,因此互不影响;引用类型如对象、数组和函数存储的是内存地址,指向同一对象的变量会相互影响。判断类型可用typeof和instanceof,但需注意typeofnull的历史问题。理解这两类差异有助于编写更稳定可靠的代码。

    过滤JavaScript中的一系列对象 过滤JavaScript中的一系列对象 Jul 12, 2025 am 03:14 AM

    JavaScript中filter()方法用于创建一个包含所有通过测试元素的新数组。1.filter()不修改原数组,而是返回符合条件元素的新数组;2.基本语法为array.filter((element)=>{returncondition;});3.可按属性值过滤对象数组,如筛选年龄大于30的用户;4.支持多条件筛选,例如同时满足年龄和名字长度条件;5.可处理动态条件,将筛选参数传入函数以实现灵活过滤;6.使用时注意必须返回布尔值,避免返回空数组,以及结合其他方法实现字符串匹配等复杂逻

    如何检查数组是否在JavaScript中包含一个值 如何检查数组是否在JavaScript中包含一个值 Jul 13, 2025 am 02:16 AM

    在JavaScript中检查数组是否包含某个值,最常用方法是includes(),它返回布尔值,语法为array.includes(valueToFind),例如fruits.includes('banana')返回true;若需兼容旧环境,则使用indexOf(),如numbers.indexOf(20)!==-1返回true;对于对象或复杂数据,应使用some()方法进行深度比较,如users.some(user=>user.id===1)返回true。

    在异步/等待JavaScript函数中处理错误 在异步/等待JavaScript函数中处理错误 Jul 12, 2025 am 03:17 AM

    处理异步函数中的错误应使用try/catch、在调用链中处理、使用.catch()方法、并监听unhandledrejection事件。1.使用try/catch捕获错误是推荐方式,结构清晰且能处理await中的异常;2.在调用链中处理错误可集中逻辑,适合多步骤流程;3.使用.catch()可在调用async函数后捕获错误,适用于Promise组合场景;4.监听unhandledrejection事件可记录未处理的rejection,作为最后一道防线;以上方法共同确保异步错误被正确捕获和处理。

    如何处理JavaScript中的时区? 如何处理JavaScript中的时区? Jul 11, 2025 am 02:41 AM

    处理JavaScript时区问题的关键在于选择合适的方法。1.使用原生Date对象时,推荐以UTC时间进行存储和传输,并在展示时转换为用户本地时区;2.对于复杂时区操作,可使用moment-timezone,它支持IANA时区数据库并提供便捷的格式化与转换功能;3.若需本地化显示时间且不想引入第三方库,可使用Intl.DateTimeFormat;4.推荐现代轻量方案day.js配合timezone和utc插件,其API简洁、性能良好并支持时区转换。

    JavaScript上下文中解释的虚拟DOM的概念 JavaScript上下文中解释的虚拟DOM的概念 Jul 12, 2025 am 03:09 AM

    虚拟DOM是一种优化真实DOM更新的编程概念,通过在内存中创建与真实DOM对应的树形结构,避免频繁直接操作真实DOM。其核心原理是:1.数据变化时生成新的虚拟DOM;2.对比新旧虚拟DOM找出最小差异;3.批量更新真实DOM以减少重排重绘开销。此外,使用唯一稳定key可提升列表对比效率,而部分现代框架已采用其他技术替代虚拟DOM。

    什么是功能编程?核心概念的JS综述 什么是功能编程?核心概念的JS综述 Jul 11, 2025 am 03:13 AM

    功能程序injavascriptemplosize cleansclean,precedableCodEthroughCoreConcepts.1.purefunctionsConsisterlyTurnTheSameOutTunthesMeTputputputputputputputputsefts.2.mmutability and prodicatient.2.mmutabilityabilitietyavoidsdatamodificationbybydatamodificationbybydatamodificationbybydatamodificationbybycreatingnewdatacopies,red red

    See all articles