JavaScript实现的购物车效果可以运用在好多地方

前端技术 2023/09/09 JavaScript
JavaScript实现的购物车效果,当然这个效果可以运用在好多地方,比如好友的选择,人力资源模块,计算薪资,人员的选择等等。下面看类似某种购物车的效果图:

code:

goodsCar.js:这个js写成了一个单独的文件。主要是控制上面的列表显示的。
复制代码 代码如下:

window.onload=function(){
initStore();
};
var goods=[\"火腿\",\"美女\",\"御姐\",\"火星一日游\",\"跑车\"];
//==================为什么要定义一个临时存储区要想清楚哦=============
var temps=[];//临时存储
//初始化仓库select 添加内容
function initStore(){
var select_store=document.getElementById(\"select_store\");
for(var x=0;x<goods.length;x++)
{
//创建option对象
var optionNode=document.createElement(\"option\");
optionNode.innerHTML=goods[x];
select_store.appendChild(optionNode);
}
}
//------------------------------------
function selectGoods(){
//获取store的select列表对象
var out_store=document.getElementById(\"select_store\");
//获取我的商品的select列表对象
var in_store=document.getElementById(\"select_my\");
moveGoods(in_store,out_store);
}
function deleteGoods(){
//1.记录下要移动的产品
var in_store=document.getElementById(\"select_store\");
var out_store=document.getElementById(\"select_my\");
moveGoods(in_store,out_store);
}
/*
* 移动商品:
1.inSotre:将商品移入仓库
2.outStore:将商品移出仓库
*/
//移动
function moveGoods(inStore,outStore){
//===============清空数组缓存==================
temps=[];
//循环获取store中的所有列表项
for(var x=0;x<outStore.options.length;x++)
{
var option=outStore.options[x];
//将被选中的列表项添加到临时数组中存储
if(option.selected){
temps.push(option);//临时数组中添加数据,为了避免重复,数组缓存要清空
}
}
//2.在store列表中删除已经选中的物品
//3.在购物车中添加已经选择的产品
for(var x=0;x<temps.length;x++)
{
//每一个节点都只有一个父节点
//先删除后添加
outStore.removeChild(temps[x]);
//添加
inStore.appendChild(temps[x]);
}
}

下面是主文件;
复制代码 代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset=\"UTF-8\">
<title>Insert title here</title>
<style type=\"text/css\">
table{
border:10px;
}
select{
width:200px;
height:400px;
}
#order_area{
display:none;
}
</style>
<script type=\"text/javascript\" src=\"goodsCar.js\"></script>
<script type=\"text/javascript\">
var selectedGoods=[];//缓存区域
//根据购物车中的产品,生成订单
function createOrder(){
//显示订单区域
var orderAreaDiv=document.getElementById(\"order_area\");
/*div对象下面有一个成员对象style,通过这个style对象可以控制div的样式
display:表示这个对象或者叫div这个元素在文档中是否渲染
可用的值:
block: Object is rendered as a block element.
none :Object is not rendered.
.......
在这个实例中,就用以上两个值就ok了,上面内容来自文档
*/
//用节点对象的属性操作样式
orderAreaDiv.style.display=\"block\";
var select_my=document.getElementById(\"select_my\");
for(var x=0;x<select_my.options.length;x++){
//
var optNode=select_my.options[x];
selectedGoods.push(optNode.innerHTML);
}
//遍历产品,生成订单
for(var x=0;x<selectedGoods.length;x++){
///*动态生成数据的模板
//<div><!--name属性便于查找-->
//<input type=\"checkbox\" name=\"myorder\"><span>大帅哥 20元</span>
//</div>
//*/
var divNode =document.createElement(\"div\");
orderAreaDiv.appendChild(divNode);
var inputMyOrder=document.createElement(\"input\");
inputMyOrder.setAttribute(\"type\",\"checkbox\");
inputMyOrder.setAttribute(\"name\",\"myorder\");
divNode.appendChild(inputMyOrder);
var spanNode=document.createElement(\"span\");
//随机生成一个50到100的随机数
var price=Math.floor(Math.random()*50+50);
inputMyOrder.value=price;
spanNode.innerHTML=selectedGoods[x]+\" \"+price;
divNode.appendChild(spanNode);
//inputMyOrder.appendChild(spanNode);错误,因为span和input是同级元素

//生组装好的divNode添加到 orderlist中
var order_list = document.getElementById(\"order_list\");
order_list.appendChild(divNode);
}
}
/*
* 再生成的订单中仍然可以选择哪些订单是准备付款的,然后进行付款
三种选择方式:全选:1,不选:0,反选:2;checkbox自己的功能可以多选
*/
function mySelect(arg){
//getElementsByName:根据 NAME 标签属性的值获取对象的集合。
var orders = document.getElementsByName(\"myorder\");
//在写代码的过程中错误的运用了下面这一句话
//getElementsByTagName:获取基于指定元素名称的对象集合。
//var orders=document.getElementsByTagName(\"myorder\");
for(var x=0;x<orders.length;x++){
var order=orders[x];
if(arg==\"1\"){
order.checked=true;
}
else if(arg==\"0\"){
order.checked=false;
}
else if(arg==\"2\"){
order.checked=!order.checked;
}
}
}
//结账买单,这里面用对话款弹出的所有商品的金额做演示
function payMoney(){
var orders = document.getElementsByName(\"myorder\");
//总价
var sum=0;
for(var x=0;x<orders.length;x++){
var order = orders[x];
if(order.checked){
//确定要买的。
sum=sum+Number(order.value);
}
}

alert(\"您看看您是不是要支付\"+sum+\"元\");
}
</script>
</head>
<body>
<table>
<tr>
<td>
<!-- select 对象的multiple的属性的含义:设置或获取表明列表中是否可选中多个项目的 Boolean 值 -->
<select id=\"select_store\" multiple=\"multiple\">
<optgroup label=\"产品列表\"></optgroup>
</select>
</td>
<td>
<input type=\"button\" value=\">>\" onclick=\"selectGoods();\"/><br>
<input type=\"button\" value=\"<<\" onclick=\"deleteGoods();\"/>
</td>
<td>
<select id=\"select_my\" multiple=\"multiple\">
<optgroup label=\"我的购物车\"></optgroup>
</select>
</td>
<td><input type=\"button\" value=\"生成订单\" onclick=\"createOrder();\"/></td>
</tr>
</table>
<hr/>
<div id=\"order_area\">
<h3>请选择您要购买的产品:</h3>
<div id=\"order_list\">
<!-- <div>
<input type=\"checkbox\"><span>大帅哥 20元</span>
</div>-->
</div>
<input type=\"button\" value=\"全选\" onclick=\"mySelect(\'1\');\"/>
<input type=\"button\" value=\"不选\" onclick=\"mySelect(\'0\');\"/>
<input type=\"button\" value=\"反选\" onclick=\"mySelect(\'2\');\"/><br>
<input type=\"button\" value=\"付款啦\" onclick=\"payMoney();\"/>
</div>
</body>
</html>

本文地址:https://www.stayed.cn/item/26183

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。