IONIC之简易购物车
HTML
- <div ng-app="app">
- <div class="l-header">
- <div class="l-cart">
- <div class="l-cart-count" ng-click="showCart = !showCart">{{ calculateTotalProducts() }}</div>
- <div class="l-cart-items" ng-show="showCart">
- <div ng-show="cart.length">
- <ul>
- <li ng-repeat="item in cart">
- <div class="l-cart-item-name">{{ item.product.name }}</div>
- <div class="l-cart-item-quantity">
- <input type="number" ng-model="item.quantity" ng-change="removeIfZero(item)" />
- </div>
- <div class="l-cart-item-subtotal">{{ item.quantity * item.product.price | currency }}</div>
- <div class="remove-item">
- <img src="https://cdn3.iconfinder.com/data/icons/cleaning-icons/512/Trash_Can-512.png" ng-click="removeFromCart(item)">
- </div>
- </li>
- </ul>
- <div class="l-cart-total">total <b>{{ calculateTotalPrice() | currency }}</b></div>
- </div>
- <div class="l-cart-empty" ng-hide="cart.length">tu carrito está vacío</div>
- </div>
- </div>
- </div>
- <ul class="l-stock">
- <li class="l-product" ng-repeat="product in stock" ng-click="addToCart(product)" ng-class="{'is-on-cart': isProductOnCart(product)}">
- <div class="l-product-name">{{ product.name }}</div>
- <div class="l-product-price">{{ product.price | currency }}</div>
- </li>
- </ul>
- </div>
CSS:
- body
- color #333
- padding 60px 10px 10px 10px
- font-family Arial, Helvetica, sans-serif
- user-select none
- .is-red
- color red !important
- .l-header
- display flex
- justify-content flex-end
- align-items center
- position fixed
- top 0
- right 0
- left 0
- height 30px
- padding 10px
- background-color #2c3e50
- .l-cart
- position relative
- .l-cart-count
- font-size 12px
- font-weight 700
- width 30px
- line-height 30px
- text-align center
- color #ecf0f1
- background-color #27ae60
- border-radius 50%
- cursor pointer
- .l-cart-items
- position absolute
- top 100%
- right 0
- width 270px
- margin 10px -10px 0 0
- padding 10px
- font-size 12px
- background-color #ecf0f1
- &:before
- content ""
- position absolute
- bottom 100%
- right 15px
- margin 0 0 -2px 0
- border 10px solid transparent
- border-bottom-color #ecf0f1
- li
- display flex
- align-items center
- padding-bottom 10px
- margin-bottom 10px
- .l-cart-item-name
- flex 1
- overflow hidden
- white-space nowrap
- text-overflow ellipsis
- .l-cart-item-quantity
- width 30px
- margin 0 10px
- input
- display block
- border none
- padding 5px
- margin 0
- width 100%
- text-align right
- appearance none
- &:focus
- outline none
- background-color #ffc
- &::-webkit-outer-spin-button,
- &::-webkit-inner-spin-button
- -webkit-appearance none
- margin 0
- .l-cart-item-subtotal
- color #000
- width 70px
- text-align right
- .remove-item img
- width:30px
- height:30px
- margin 0 10px
- text-align center
- .l-cart-total
- margin-top 10
- padding-top 10px
- text-align right
- border-top 1px solid #bdc3c7
- b
- font-weight 700
- font-size 1.4em
- .l-cart-empty
- text-align center
- font-size 1.4em
- color #95a5a6
- .l-stock
- & > li
- float left
- margin 0 10px 10px 0
- &:after
- content ""
- clear both
- .l-product
- display flex
- color #fff
- cursor pointer
- & > div
- padding 10px
- .l-product-name
- background-color #2980b9
- .l-product-price
- background-color #3498db
- .is-on-cart
- .l-product-name
- background-color #27ae60
- .l-product-price
- background-color #2ecc71
JS
- /**
- * Esta función genera productos aleatoriamente
- * (http://marak.com/faker.js/)
- **/
- function fetchStock () {
- var i = 0,
- stock = [],
- total = faker.random.number({min: 10, max: 30});
- for (i = 0; i < total; i++) {
- stock.push({
- name : faker.commerce.productName(),
- price: faker.random.number({min: 1, max: 500})
- });
- }
- return stock;
- };
- /**
- * Aquí empieza nuestro código Angular...
- **/
- var app = angular.module('app', []);
- app.run(function ($rootScope) {
- var cart = [],
- stock = fetchStock();
- var addToCart = function (product) {
- var item = cart.find(function (item) {
- return item.product === product;
- });
- if (item) {
- item.quantity++;
- } else {
- cart.push({
- product : product,
- quantity: 1
- });
- }
- };
- var removeFromCart = function (item) {
- var index = cart.indexOf(item);
- cart.splice(index, 1);
- };
- var removeIfZero = function (item) {
- if (item.quantity < 1) {
- removeFromCart(item);
- }
- };
- var calculateTotalPrice = function () {
- return cart.reduce(function (sum, item) {
- return sum + item.quantity * item.product.price;
- }, 0);
- };
- var calculateTotalProducts = function () {
- return cart.reduce(function (sum, item) {
- return sum + item.quantity;
- }, 0);
- };
- var isProductOnCart = function (product) {
- return cart.some(function (item) {
- return item.product === product;
- });
- };
- angular.extend($rootScope, {
- stock: stock,
- cart: cart,
- addToCart: addToCart,
- removeFromCart: removeFromCart,
- removeIfZero: removeIfZero,
- calculateTotalPrice: calculateTotalPrice,
- calculateTotalProducts: calculateTotalProducts,
- isProductOnCart: isProductOnCart
- });
- });
IONIC之简易购物车的更多相关文章
- Session机制二(简易购物车案例)
一:案例一(简易购物车) 1.目录结构 2.step1.jsp <%@ page language="java" contentType="text/html; c ...
- javaweb练手项目jsp+servlet简易购物车系统
简易购物车项目 这是一个用intellij IDEA做的简易的javaweb项目,开发环境使用的jdk1.8和tomcat8以及mysql数据库. 1.项目开发准备: 创建github仓库 项目框架搭 ...
- angular初始用——简易购物车
<html> <head> <meta charset="utf-8"> <script src="js/angular.js& ...
- Java servlet 实现的简易购物车
首页 2.购买页 3.购物车页 1. 首页代码 发送一个post请求 <!DOCTYPE html><html lang="en"><head> ...
- [ Python -1 ] 简易购物车程序
练习: 1. 要求用户输入总资产,例如:2000 2. 显示商品列表,让用户根据序号选择商品,加入购物车 3. 购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功. goods = [{' ...
- ~~小练习:python的简易购物车~~
进击のpython 1,用户先给自己的账户充钱:比如先充3000元. 2,有如下的一个格式: goods = [{"name": "电脑", "pri ...
- HttpSession之简易购物车
创建一个简单的购物车模型,由三个 jsp 和两个 Servlet 组成: step1.jsp <%@ page language="java" contentType=&qu ...
- Newbe.Claptrap 框架入门,第一步 —— 创建项目,实现简易购物车
让我们来实现一个简单的 “电商购物车” 需求来了解一下如何使用 Newbe.Claptrap 进行开发. 业务需求 实现一个简单的 “电商购物车” 需求,这里实现几个简单的业务: 获取当前购物车中的商 ...
- 简易购物车 --day2
代码段 f =float(input('输入你的工资')) goods=['1.apple','2.mac','3.ph','4.python','5.php'] price=[35,26.5,14, ...
随机推荐
- HTML 5 在Web SQL 使用演示样本
Web sql 这是一个模拟数据库浏览器.可以使用JS操作SQL完成数据读取和写入,但是这件事情并不多,现在支持的浏览器,而其W3C规格已经停止支持.外形似它的前景不是很亮. W3C 规范:http: ...
- 对Extjs中时间的多种处理
1.类型为datetime的json数据处理 (字段类型为datetime) new Date(parseInt(yourTime.substring(6, yourTime.length - 2)) ...
- [转载]John Burkardt搜集的FORTRAN源代码
Over the years, I have collected, modified, adapted, adopted or created a number of software package ...
- Net 4.0 之 Dynamic 动态类型
Net 4.0 之 Dynamic 动态类型 本文主要旨在与网友分享.Net4.0的Dynamic 对Duck Type 的支持. 一..net4.0主要新特性 .Net4.0在.Net3.5 ...
- HOJ:2031 进制转换
进制转换 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- iOS基础 - Quartz 2D绘图的基本步骤
一.使用Quartz 2D绘图的基本步骤 1) 获取上下文context(绘制图形的地方) 2) 设置路径(路径是用来描述形状的) 3) 将路径添加到上下文 4) 设置上下文属性(设置颜色,线宽, ...
- 实现WebService的调用与被调用
之前一直用WCF来开发服务,可是从未用过WebService.对WebService有种很神奇的期待,都说WebService比较简单,但是从未用过就对我来说就是一种新的知识.起始让我来说WCF与We ...
- .net通用底层搭建
.net通用底层搭建 之前写过几篇,有朋友说看不懂,有朋友说写的有点乱,自己看了下,的确是需要很认真的看才能看懂整套思路. 于是写下了这篇. 1.这个底层,使用的是ado.net,微软企业库 2.实体 ...
- ASP.NET交互Rest服务接口(Jquery的Get与Post方式)
ASP.NET交互Rest服务接口(Jquery的Get与Post方式) 本文将通过一个简单的实例,介绍如何创建一个Rest服务接口,以及通过JQUERY去对它进行调用;主要采取两种方式分别为Get跟 ...
- c语言:最长对称子串(3种解决方案)
问题描述: 输入一个字符串,输出该字符串中最大对称子串的长度.例如输入字符串:“avvbeeb”,该字符串中最长的子字符串是“beeb”,长度为4,因而输出为4. 解决方法:中序遍历 一,全遍历的方法 ...