近一直忙于公司的一个新的h5项目,项目中有一个购物车模块,使用jquery实现购物车基本结算功能。现已整理出来,感兴趣的小伙伴们可以参考一下。
基本实现了单选、全选、购物车数量联动、价格动态汇总、删除订单及无数据提示。
购物车列表模板
实际项目中需要根据购物车商品数据动态渲染,这里就使用静态html展示了。
<!-- 购物车列表 -->
<div class="cart-wrap__ls" id="J__CartLS">
<div class="cart-ls__item">
<!-- //复选框 -->
<div class="cart-item__radio"><i class="ico-radio"></i></div>
<!-- //商品信息 -->
<div class="cart-item__ginfo">
<img class="g-img" src="http://admin.weikeniu.com/img/28291/20170721151143_4752_b.jpg" />
<div class="g-info">
<div class="flex1">
<div class="g-title clamp1">海陵岛大角湾风景区2天1晚</div>
<div class="g-subtit clamp1">给你不一样的风景体验</div>
</div>
<div class="g-price c-red fs-32">¥<em>199.00</em></div>
</div>
</div>
<!-- //数量加减 -->
<div class="cart-item__num">
<span class="minus disabled" onClick="$.cartNum.set(-1, this);">-</span>
<input type="tel" value="1" onBlur="$.cartNum.check(this);" />
<span class="plus normal" onClick="$.cartNum.set(+1, this);">+</span>
</div>
<!-- //删除 -->
<img class="cart-item__del" src="img/icon_cart-del.png" />
</div>
<!-- ... -->
</div>
购物车底部固定模板
<!-- 购物车底部 -->
<div class="cart-wrap__bottomAction" style="padding-top:2rem;">
<div class="bottomfixed">
<div class="inner">
<div class="chkAll flex1" id="J__chkAll">
<i class="ico-radio"></i>
<span>全选</span>
</div>
<div class="total rmr-24">合计:<span class="c-red fs-32">¥<em id="J__totalPrice">12232.00</em></span></div>
<button class="gstyle-btn__primary btn-pay" id="J__goPay">结算 (<em id="J__selNum">12</em>)</button>
</div>
</div>
</div>
购物车数量
直接封装成$.cartNum函数,通过 $.cartNum.set() 、 $.cartNum.check(this) 调用即可。
<div class="cart-item__num">
<span class="minus disabled" onClick="$.cartNum.set(-1, this);">-</span>
<input type="tel" value="1" onBlur="$.cartNum.check(this);" />
<span class="plus normal" onClick="$.cartNum.set(+1, this);">+</span>
</div>
$(function(){
// 购物车数量
$.cartNum={
set: function(code, obj){
var ipt=$(obj).siblings("input");
var cartNums=parseInt($.trim(ipt.val()));
switch (code) {
case 1: {
cartNums++;
}
break;
case -1: {
cartNums--;
}
break;
}
ipt.val(cartNums);
$.cartNum.check(ipt);
getTotalPrice();
},
check: function(obj){
var o=$(obj);
//数量小于0
var cartNums=parseInt($.trim(o.val()));
if (cartNums <=1) {
o.val(1);
o.siblings('.minus').addClass('disabled');
}else {
o.siblings('.minus').removeClass('disabled');
}
//判断数量是否是数字
var regExp=/^[1-9]*[1-9][0-9]*$/;
if (isNaN(cartNums) || !regExp.test($.trim(o.val()))) {
o.val(1);
o.siblings('.minus').addClass('disabled');
}
//数量大于库存(假定库存99)
//var storeNums=parseInt($.trim($('#data_storeNums').text()));
var storeNums=99;
if (cartNums >=storeNums) {
o.val(storeNums);
}
getTotalPrice();
}
};
});
绑定单选、全选
// 判断是否全选
chkAll();
function chkAll() {
var $radio=$('#J__CartLS .cart-item__radio');
var num=$radio.size();
var k=0;
$radio.each(function(i, v) {
if($(this).hasClass('on')) {
k++;
}
});
if(k==num) {
$('#J__chkAll').addClass('on');
} else {
$('#J__chkAll').removeClass('on');
}
}
// 绑定单选
$('body').on('click', '#J__CartLS .cart-item__radio', function() {
$(this).toggleClass('on');
chkAll();
getTotalPrice();
});
// 绑定全选
$('body').on('click', '#J__chkAll', function() {
if($(this).hasClass('on')) {
$('#J__CartLS .cart-item__radio').removeClass('on');
} else {
$('#J__CartLS .cart-item__radio').addClass('on');
}
$(this).toggleClass('on');
getTotalPrice();
});
价格汇总
点击单选、全选及数量加减,都触发 getTotalPrice 函数。
// 价格汇总
getTotalPrice();
function getTotalPrice() {
var $cartls=$('#J__CartLS').find('.cart-ls__item');
var total=0, selected=0;
$cartls.each(function(i, v) {
if($(v).find('.cart-item__num input').val() > 1) {
$(v).find('.cart-item__num .minus').removeClass('disabled'); //数量大于1减号可点击
}
if($(v).children('.cart-item__radio').hasClass('on')) {
var num=$(v).find('.cart-item__num input').val(); //商品数量
total +=parseFloat($(v).find('.g-price em').text() * num);
selected++;
}
});
$('#J__goPay').prop('disabled', selected < 1 ? true : false);
$('#J__totalPrice').text(total.toFixed(2));
$('#J__selNum').text(selected);
}
删除订单
删除订单后,移除该订单,触发 getTotalPrice 函数,当购物车为空,则提示无数据。
// 删除订单
$('#J__CartLS').on('click', '.cart-item__del', function() {
var that=$(this);
wcPop({
skin: 'ios',
style: 'border-radius:12px;font-family:arial;overflow:hidden;',
content: '您确定要删除该条订单吗?',
btns: [
{
text: '取消', style: 'color:#797979',
onTap() { wcPop.close(); }
},
{
text: '确定', style: 'color:#e0201f',
onTap() {
that.parents('.cart-ls__item').remove();
wcPop.close();
getTotalPrice();
if($('#J__CartLS .cart-ls__item').size() > 0) {
$('.J__bmBadge').text($('#J__CartLS .cart-ls__item').size());
}else {
$('.J__bmBadge').remove();
$('.cart-nodata').fadeIn();
}
}
}
]
})
});
ok,以上就是基于jquery实现的购物车功能。希望对大家有所帮助,感兴趣的可以参考一下。
如果大家有更优的方法,欢迎一起交流讨论哈~~
电商购物系统。使用Python作为主要开发语言,前端采用HTML、CSS、BootStrap等技术实现界面,后端采用Django作为开发框架。实现一个电商购物系统。用户可以登录、注册、查看商品、添加购物车、购买商品、查看订单、评论等。管理员可以编辑用户和商品信息。
视频+代码+介绍:电商购物 · 语雀
Django 是一个开源的、基于 Python 的 web 框架。它的主要目标是使得 Web 开发更加快速、更简单,同时还要保证代码的可重用性和可维护性。以下是 Django 的一些主要特点:
以下是一个简单的 Django 项目和应用的示例代码:
django-admin startproject myproject
cd myproject
python manage.py startapp myapp
from django.db import models
class Article(models.Model):
title=models.CharField(max_length=200)
content=models.TextField()
pub_date=models.DateTimeField('date published')
def __str__(self):
return self.title
INSTALLED_APPS=[
...
'myapp',
...
]
python manage.py makemigrations myapp
python manage.py migrate
from django.http import HttpResponse
from .models import Article
def index(request):
articles=Article.objects.all()
output=', '.join([a.title for a in articles])
return HttpResponse(output)
from django.urls import path
from . import views
urlpatterns=[
path('', views.index, name='index'),
]
from django.contrib import admin
from django.urls import path, include
urlpatterns=[
path('admin/', admin.site.urls),
path('articles/', include('myapp.urls')),
]
python manage.py runserver
当您访问 127.0.0.1:8000/articles/,您应该会看到数据库中所有文章的标题(如果有的话)。
s实现淘宝购物车类似功能:
主要有添加商品
增加和减少商品数量
根据增加、减少或选择的商品获取金额
实现商品价格的计算
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>购物车</title>
</head>
<style type="text/css">
h1{
text-align: center;
}
table{
margin: 0 auto;
}
body{
font-size: larger;color: crimson;
background-image: url(img/2.jpg);
background-repeat: no-repeat;
background-size: 100%;
}
table th,table td{
}
</style>
<body >
<h1>购物车:真划算</h1>
<table border="1" >
<tr>
<!--文本th-->
<th>商品</th>
<th >单价</th>
<th>颜色</th>
<th>库存</th>
<th>好评率</th>
<th>操作</th>
</tr>
<tr>
<td>面膜</td>
<td >150</td>
<td>白色</td>
<td>100</td>
<td>88%</td>
<td align="center">
<input type="button" value="加入购物车" onclick="add_shoppingcar(this)"/>
</td>
</tr>
<tr>
<td>口红</td>
<td >350</td>
<td>白色</td>
<td>166</td>
<td>82%</td>
<td align="center">
<input type="button" value="加入购物车" onclick="add_shoppingcar(this)"/>
</td>
</tr>
<tr>
<td>鼠标</td>
<td >150</td>
<td>黑色</td>
<td>99</td>
<td>75%</td>
<td align="center">
<input type="button" value="加入购物车" onclick="add_shoppingcar(this)"/>
</td>
</tr>
<tr>
<td>键盘</td>
<td >120</td>
<td>黑色</td>
<td>50</td>
<td>80%</td>
<td align="center">
<input type="button" value="加入购物车" onclick="add_shoppingcar(this)"/>
</td>
</tr>
</table>
<h1> 购物车</h1>
<table border="1">
<thead>
<tr>
<th>商品</th>
<th >单价</th>
<th>数量</th>
<th>金额</th>
<th>删除</th>
</tr>
</thead>
<tbody id="goods">
<!--<tr>
<td>面膜</td>
<td>150</td>
<td align="center">
<input type="button" value="-" id="jian" onclick="change(this,-1);"/>-->
<!--readonly规定输入字段为只读-->
<!--<input id="text" type="text" size="1" value="1" readonly="readonly" />
<input type="button" value="+" id="add" onclick="change(this,1);"/>
</td>
<td> <input id="money" size="1" value="80"></input></td>
<td align="center">
<input type="button" value="X" onclick="del(this)" />
</td>
</tr>-->
</tbody>
<tfoot>
<tr>
<td colspan="3" align="center" >总计</td>
<td id="total"></td>
<td>元</td>
</tr>
</tfoot>
</table>
</body>
<script type="text/javascript">
//this js中指当前对象
function add_shoppingcar(btn){
var tr=btn.parentNode.parentNode;
var tds=tr.getElementsByTagName("td");
var name=tds[0].innerHTML;
var price=tds[1].innerHTML;
var tbody=document.getElementById("goods");
var row=tbody.insertRow();//insertRow表格开头插入新行
row.innerHTML="<td>"+name+"</td>"+
"<td>"+price+"</td>"+
"<td align='center'>"+
"<input type='button' value='-' id='jian' onclick='change(this,-1)' />"+
"<input id='text' type='text' size='1' value='1' readonly='readonly' />"+
"<input type='button' value='+' id='add' onclick='change(this,1)' />"+
"</td>"+
"<td>"+price+"</td>"+
"<td align='center'>"+
"<input type='button' value='X' onclick='del(this)'/>"+
"</td>"+
"</tr>"
total();
}
//增加减少数量,用n正负1来表示点击了加减按钮
function change(btn,n){
//获取数量的三个input对象
var inputs=btn.parentNode.getElementsByTagName("input");
//获取原来的数量
var amount=parseInt(inputs[1].value);
//当amount=1时不能再点击"-"符号
//用n<0来表示点击了减button
if(amount<=1 && n<0){
return;
}
//根据加减来改变数量
inputs[1].value=amount + n;
实现效果:
*请认真填写需求信息,我们会在24小时内与您取得联系。