Just playing around with animations for ecommerce add to cart, cart update and so on.
A Pen by Rune Sejer Hoffmann on CodePen.
Just playing around with animations for ecommerce add to cart, cart update and so on.
A Pen by Rune Sejer Hoffmann on CodePen.
| %nav | |
| .mini | |
| %p.products Empty | |
| %p.names | |
| %p.miniprice | |
| %ul | |
| %li Home | |
| %li Webshop | |
| %li Contact | |
| .cart.icon-basket | |
| %span.number 1 | |
| .container | |
| -15.times do | |
| %div.product | |
| %img(src='https://placeimg.com/200/100') | |
| %h2.header Product Name | |
| %p.description Nullam posuere turpis vel lacinia luctus. Donec in efficitur neque. Curabitur consectetur non ipsum in eleifend. Praesent id velit in nisi maximus porta nec vitae odio. Proin vitae magna a massa accumsan venenatis. Donec semper, sem in ullamcorper bibendum, mauris sem imperdiet lorem, tempor aliquet ligula lorem sit amet nibh. Suspendisse potenti. | |
| %p.price 231,- | |
| .btn Add to cart | |
| .quickview Quickview | |
| .quickviewContainer | |
| .close | |
| %h2.headline | |
| %p.description | |
| %img(src='https://placeimg.com/100/100') | |
| %img(src='https://placeimg.com/100/100') | |
| %img(src='https://placeimg.com/100/100') |
| var cartCount = 0, | |
| buy = $('.btn'), | |
| span = $('.number'), | |
| cart = $('.cart'), | |
| quickview = $('.quickviewContainer'), | |
| quickViewBtn = $('.quickview'), | |
| close = $('.quickviewContainer .close'), | |
| minicart = [], | |
| totalPrice = [], | |
| miniCartPrice; | |
| buy.on('click', addToCart); | |
| quickViewBtn.on('click', quickView); | |
| cart.on('click', showMiniCart); | |
| close.on('click', function(){ | |
| quickview.removeClass('active'); | |
| }); | |
| function quickView() { | |
| var description = $(this).parent().find('.description').text(), | |
| header = $(this).parent().find('.header').text(), | |
| price = $(this).find('.price'), | |
| quickViewHeader = $('.quickviewContainer .headline'), | |
| quickViewDescription = $('.quickviewContainer .description'); | |
| clearTimeout(timeQuick); | |
| if(quickview.hasClass('active')){ | |
| quickview.removeClass('active'); | |
| var timeQuick = setTimeout(function(){ | |
| quickview.addClass('active'); | |
| }, 300); | |
| } else{ | |
| quickview.addClass('active'); | |
| } | |
| quickViewHeader.text(header); | |
| quickViewDescription.text(description); | |
| } | |
| function showMiniCart() { | |
| $('.mini').toggleClass('visible'); | |
| } | |
| function addToCart() { | |
| var self = $(this), | |
| productName = $(this).parent().find('.header').text(), | |
| miniCartNames = $('.products'), | |
| names = $('.names'), | |
| price = $(this).parent().find('.price').text(), | |
| priceInt = parseInt(price); | |
| totalPrice.push(priceInt); | |
| miniCartPrice = totalPrice.reduce(function(a,b){ return a+b }); | |
| $('.miniprice').text('Total amount: ' + miniCartPrice + ",-"); | |
| minicart.push(productName); | |
| lastProduct = minicart[minicart.length - 1]; | |
| miniCartNames.text('Your cart lines: '); | |
| names.append('<p>' + lastProduct + '</p>'); | |
| cartCount++; | |
| span.text(cartCount); | |
| clearTimeout(time); | |
| if(span.hasClass('update')){ | |
| span.removeClass('update'); | |
| span.addClass('updateQuantity'); | |
| var time = setTimeout(function(){ | |
| span.removeClass('updateQuantity'); | |
| span.addClass('update'); | |
| }, 700); | |
| } else{ | |
| span.addClass('update'); | |
| } | |
| if (cartCount == 1){ | |
| cart.toggleClass('icon-basket icon-basket-loaded'); | |
| } | |
| $(this).addClass('ok'); | |
| var timeOk = setTimeout(function(){ | |
| self.removeClass('ok'); | |
| }, 1000); | |
| } |
| <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script> |
| @import url(https://fonts.googleapis.com/css?family=Nunito:400,300,700); | |
| $body:#0b0b0b; | |
| $nav:#ffffff; | |
| $contrast:#00fefe; | |
| $contrastopacity: rgba(0,254,254, .4); | |
| $productbg:rgba(255,255,255,.45); | |
| $quickViewBg:rgba(0,0,0,.90); | |
| $overlay:rgba(0,0,0,1); | |
| * { | |
| -webkit-font-smoothing: antialiased; | |
| -moz-osx-font-smoothing: grayscale; | |
| box-sizing: border-box; | |
| } | |
| body{ | |
| background-color: $body; | |
| font-family: 'Nunito', sans-serif; | |
| } | |
| nav{ | |
| position: fixed; | |
| z-index: 999; | |
| width: 100%; | |
| height: 70px; | |
| background-color: $nav; | |
| line-height: 70px; | |
| .mini{ | |
| position: fixed; | |
| top: 80px; | |
| right:10px; | |
| background: #FFF; | |
| padding: 40px; | |
| opacity: 0; | |
| visibility: hidden; | |
| transition: opacity .2s ease .2s; | |
| &.visible{ | |
| padding: 40px; | |
| opacity: 1; | |
| visibility: visible; | |
| } | |
| .products{ | |
| font-weight: bold; | |
| font-size: 14px; | |
| } | |
| p{ | |
| font-size: 11px; | |
| display:block; | |
| margin:0; | |
| padding: 0; | |
| line-height: 20px; | |
| } | |
| } | |
| .cart{ | |
| position: relative; | |
| float: right; | |
| margin-right: 50px; | |
| height:20px; | |
| line-height: 70px; | |
| font-size: 28px; | |
| height: 100%; | |
| cursor: pointer; | |
| span{ | |
| height: 100%; | |
| float: left; | |
| margin-right: 20px; | |
| opacity: 1; | |
| color: #fff; | |
| font-size: 18px; | |
| font-family: 'Nunito', sans-serif; | |
| &.updateQuantity{ | |
| &:before, &:after{ | |
| top: 0; | |
| bottom: 0; | |
| opacity: 1; | |
| width: 30px; | |
| transition: all .2s ease, top .3s ease .4s, bottom .3s ease .4s; | |
| } | |
| } | |
| &.update{ | |
| transition: color .2s ease .6s; | |
| color: #000; | |
| &:before{ | |
| top: -30px; | |
| width: 30px; | |
| opacity: 1; | |
| transition: all .2s ease, top .3s ease .4s, bottom .3s ease .4s; | |
| } | |
| &:after{ | |
| top: 30px; | |
| width: 30px; | |
| opacity: 1; | |
| transition: all .2s ease, top .3s ease .4s, bottom .3s ease .4s; | |
| } | |
| } | |
| &:before, &:after{ | |
| content: ""; | |
| position: absolute; | |
| width: 0px; | |
| height: 2px; | |
| background-color: $body; | |
| left: -10px; | |
| right:40px; | |
| top: 2px; | |
| bottom: 0; | |
| margin: auto; | |
| } | |
| } | |
| } | |
| ul{ | |
| float: left; | |
| li{ | |
| font-weight: bold; | |
| display: inline-block; | |
| margin-left: 50px; | |
| color: $body; | |
| font-size: 12px; | |
| } | |
| } | |
| } | |
| .container{ | |
| padding: 20px; | |
| padding-top: 100px; | |
| text-align: center; | |
| .product{ | |
| position: relative; | |
| overflow: hidden; | |
| width: 200px; | |
| height: 240px; | |
| display: inline-block; | |
| border-radius: 4px; | |
| background-color: $productbg; | |
| margin: 20px; | |
| padding: 15px; | |
| img{ | |
| position: relative; | |
| top:-15px; | |
| left:-15px; | |
| transition: all .2s ease; | |
| clip-path: polygon(0 100%, 0 0, 100% 0, 100% 70%); | |
| border-top-right-radius: 4px; | |
| border-top-left-radius: 4px; | |
| &:hover{ | |
| clip-path: polygon(0 100%, 0 0, 100% 0, 100% 100%); | |
| transform: scale(1.1); | |
| } | |
| } | |
| h2{ | |
| text-align: left; | |
| color: #fff; | |
| font-size: 14px; | |
| font-weight: bold; | |
| margin-bottom: 4px; | |
| } | |
| .description{ | |
| text-align:left; | |
| font-size: 11px; | |
| color: #fff; | |
| max-height: 23px; | |
| overflow: hidden; | |
| } | |
| .price{ | |
| text-align: right; | |
| font-size: 18px; | |
| color: #fff; | |
| margin-top: 6px; | |
| } | |
| .btn{ | |
| position: absolute; | |
| font-size: 11px; | |
| font-weight: bold; | |
| float: right; | |
| padding: 10px; | |
| border: 2px solid $contrast; | |
| border-radius: 20px; | |
| bottom: 10px; | |
| right: 10px; | |
| color: $contrast; | |
| cursor: pointer; | |
| overflow: hidden; | |
| transition: all .2s ease; | |
| &.ok{ | |
| background-color: $contrastopacity; | |
| color: #fff; | |
| &:after{ | |
| content:"\e080"; | |
| color: #fff; | |
| } | |
| } | |
| &:hover{ | |
| padding-right: 25px; | |
| &:after{ | |
| margin-left: 5px; | |
| } | |
| } | |
| &:after{ | |
| font-family: 'simple-line-icons'; | |
| content: "\e095"; | |
| transition: all .2s ease; | |
| position: absolute; | |
| color: $contrast; | |
| margin-left: 30px; | |
| transition: all .2s ease; | |
| } | |
| } | |
| .quickview{ | |
| position: absolute; | |
| bottom: 20px; | |
| font-size: 11px; | |
| color: #fff; | |
| cursor: pointer; | |
| &:before{ | |
| font-family: 'simple-line-icons'; | |
| content: "\e05d"; | |
| margin-right: 3px; | |
| } | |
| } | |
| } | |
| } | |
| .quickviewContainer{ | |
| position: fixed; | |
| height: 100vh; | |
| width: 400px; | |
| background: $quickViewBg; | |
| top: 70px; | |
| right: -100%; | |
| transition: all .3s ease; | |
| padding: 30px; | |
| color: #fff; | |
| .close{ | |
| height: 20px; | |
| width: 20px; | |
| float: right; | |
| cursor: pointer; | |
| &:before, &:after{ | |
| content: ""; | |
| position: absolute; | |
| width: 20px; | |
| height: 2px; | |
| background-color: #ffF; | |
| transform: rotate(45deg); | |
| } | |
| &:after{ | |
| transform: rotate(-45deg); | |
| } | |
| } | |
| .headline{ | |
| margin-bottom: 30px; | |
| font-size: 18px; | |
| } | |
| .description{ | |
| font-size: 12px; | |
| margin-bottom: 20px; | |
| } | |
| img{ | |
| display: inline-block; | |
| border-radius: 4px; | |
| margin:5px; | |
| } | |
| &.active{ | |
| right:0; | |
| } | |
| } |
| <link href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.2.4/css/simple-line-icons.min.css" rel="stylesheet" /> |