Ajaxed Sliding Shopping Cart With jQuery
31
Jul
// php the_time('Y') ?>
With this 5th & last post of the "WRD E-Commerce Week" we will be modifying "our Ajaxed shopping cart" to create a one which is very ideal for designs with limited spaces.
The shopping cart will:
- be hidden at the top of the page that can be displayed with a show/hide link
- open when an item is added to the basket & auto-close
- require a manual "hide" click if opened manually
- enable us to delete products

The HTML
For The Sliding Basket:
<div id="slidingTopWrap"> <div id="slidingTopContent"> <div id="basketWrap"> <div id="basketTitleWrap">Your Basket</div> <div id="basketItemsWrap"> <ul> <li> </li> <!--?php getBasket(); ?--> </ul> </div> </div> </div> <div id="slidingTopFooter"> <div id="slidingTopFooterLeft"><img alt="Show Basket" src="images/arrow-down.png" /> <a href="no-js.htm" id="slidingTopTrigger" onclick="return false;">Show Basket</a></div> </div> </div>
The Highlights
- the div
slidingTopWrapis positioned absolutely with top: 0 CSS value to stick to the top of the page - the div
slidingTopContentis hided via JavaScript when the page loads & it is actually the part which slides - the div
basketWrap, nothing unusual, wraps the contents of the basket
The JavaScript (jQuery)
Manual Show/Hide Part
$("#basketItemsWrap li:first").hide();
$("#slidingTopContent").hide();
$("#slidingTopTrigger").live("click", function(event) {
$("#slidingTopContent").slideToggle("slow", function(){
if ($("#slidingTopContent").is(":visible")) {
$("#slidingTopFooterLeft").html('<img src="images/arrow-up.png" alt="Hide Basket" /> <a href="no-js.htm" onclick="return false;" id="slidingTopTrigger">Hide Basket</a>');
} else {
$("#slidingTopFooterLeft").html('<img src="images/arrow-down.png" alt="Show Basket" /> <a href="no-js.htm" onclick="return false;" id="slidingTopTrigger">Show Basket</a>');
}
});
});
The Highlights:
- we have
$("#slidingTopContent").hide();in the beginning to hide the div in the initial load - when the #slidingTopTrigger is clicked, we use the
slideTogglefunction to show/hide the #slidingTopContent. To understand whether it is open or not, we have an if then else clause asif ($("#slidingTopContent").is(":visible")) {- if the #slidingTopContent is visible, we insert the "hide HTML"
- if the #slidingTopContent is not visible, we insert the "show HTML"
- you'll see that we used the
$("#slidingTopTrigger").live("click", function(event) {rather than a standard click function. The reason is adding the new created HTMLs to the DOM
Adding Products
$(".productPriceWrapRight a img").click(function() {
var productIDValSplitter = (this.id).split("_");
var productIDVal = productIDValSplitter[1];
if ($("#slidingTopContent").is(":visible")) {
$("#notificationsLoader").html('<img src="images/loader.gif">');
$.ajax({
type: "POST",
url: "inc/functions.php",
data: { productID: productIDVal, action: "addToBasket"},
success: function(theResponse) {
if( $("#productID_" + productIDVal).length > 0){
$("#productID_" + productIDVal).animate({ opacity: 0 }, 500);
$("#productID_" + productIDVal).before(theResponse).remove();
$("#productID_" + productIDVal).animate({ opacity: 0 }, 500);
$("#productID_" + productIDVal).animate({ opacity: 1 }, 500);
$("#notificationsLoader").empty();
} else {
$("#basketItemsWrap li:first").before(theResponse);
$("#basketItemsWrap li:first").hide();
$("#basketItemsWrap li:first").show("slow");
$("#notificationsLoader").empty();
}
}
});
} else {
$("#slidingTopContent").slideToggle("slow", function(){
$("#slidingTopFooterLeft").html('<img src="images/arrow-up.png" alt="Hide Basket" /> <a href="aaa.htm" onclick="return false;" id="slidingTopTrigger">Hide Basket</a>');
$("#notificationsLoader").html('<img src="images/loader.gif">');
$.ajax({
type: "POST",
url: "inc/functions.php",
data: { productID: productIDVal, action: "addToBasket"},
success: function(theResponse) {
if( $("#productID_" + productIDVal).length > 0){
$("#productID_" + productIDVal).animate({ opacity: 0 }, 500);
$("#productID_" + productIDVal).before(theResponse).remove();
$("#productID_" + productIDVal).animate({ opacity: 0 }, 500);
$("#productID_" + productIDVal).animate({ opacity: 1 }, 500);
$("#notificationsLoader").empty();
} else {
$("#basketItemsWrap li:first").before(theResponse);
$("#basketItemsWrap li:first").hide();
$("#basketItemsWrap li:first").show("slow");
$("#notificationsLoader").empty();
}
}
});
$("#slidingTopTrigger").fadeTo(4000, 1, function(){
$("#slidingTopContent").slideToggle("slow", function(){
$("#slidingTopFooterLeft").html('<img src="images/arrow-down.png" alt="Show Basket" /> <a href="aaa.htm" onclick="return false;" id="slidingTopTrigger">Show Basket</a>');
});
});
});
}
});
The Highlights:
As "how-to" on sending the Ajax query & fading animations are described in the previous post, we won't repeating the same info here & focus on the effects.
- we again run the same if-then-else clause
- if the #slidingTopContent is open send an Ajax query to functions.php and add-the-products to basket
- if the #slidingTopContent is closed:
- slideToggle the div
- insert the "hide HTML" to #slidingTopFooterLeft"
- send an Ajax query to functions.php and add-the-products to basket
- wait for x seconds:
$("#slidingTopTrigger").fadeTo(4000, 1, function(){ - slideToggle the div
- insert the "show HTML" to #slidingTopFooterLeft"
P.S. To make the example work on your side, you should be creating a new database with the jBasket.sql file inside the download package & configure the database connection information inside “inc/db.php” file.
Requirements: jQuery 1.3+
- Tags:
Javascript Php
- Filed under: E-Commerce, Extras, MIT License, Tutorials
- 48 Comments












48 Responses for "Ajaxed Sliding Shopping Cart With jQuery"
Nice post, thx.
Anyway, i’m rss subscribed and yet cannot find the link for downloading, even for the previous post “Fly-To-Basket Effect With jQuery”.
Am i missing something?
@dejan,
Great that you liked it.
The download link is at: when viewing the post via RSS> at the bottom of the latest post>Under Special Downloads Title> Ajaxed Add-To-Basket Scenarios With jQuery And PHP
Kinda complicated I think
, maybe I should place them as a standard download or think something easier by still combining with RSS.
Good timing, I just built this into one of the sites I did: http://www.hotcakes.com/46 is an example.
It’s drag-drop however….er…well, It’s both I guess since you can click the “add to shopping list” from the item detail too…and compare area as well.
The idea is awesome and a great space saver.
Umut, thx.
The problem is on my side, since i thought that the link is referring to the previously posted script named “Fly-To-Basket Effect With jQuery”.
Thanks again
Hi, thanks for this tutorial.
But there seems to be a problem every time I push Hide basket it goes up but then down again – that means I have to push Show basket for it to go up. That’s strange.
But cool effect and I like it though.
@Brian,
Ok, I found when & why it happens:
Once a product is added to the cart, it slides and before it automatically hides, if you hide it manually then the auto-hide becomes, auto show.
I will add a simple if then else clause which will solve it.
[...] 13. AJAXed Sliding Shopping Cart Using jQuery [...]
[...] Ajaxed Sliding Shopping Cart With jQuery [...]
Hi, thanx for sharing)
very elegant and usefull
Hi all,
excellent script, although I came up with the following problem:
I have a form that picks up products options (radio buttons, checkboxes…) and then calculates a price of a product to be inserted in a shopping basket.
Since the present link is posting values via ‘a href’ tag through ‘functions.php?id=foo’ what should I change to get it done with submitting form??
any clues,
thanx in advance,
X
i am doing to mobile service center application ,
i want something like multiple combo
combo 1 ==> Mobilebrand
combo 2 ==> MobilebrandModel
combo 3 ==> Problem name
Display amount for this service,
Add to cart button .
How to customise the about cart …
Thanks
Thanks a lot for this nice script. If you have a lot of products on the same page and want the basket to auto-scroll with the page then a little CSS trick will do the trick without needing any extra JavaScript. Here is the code to change:
Go to file inc/style.css and change the following part:
#slidingTopWrap {
position: fixed; /* enable auto-scrolling of the basket with the page */
/* position: absolute; default-> basket fixed where it is! */
@Hakan,
Thanks very much for that, nice tip.
nice script….
thankx for sharing it…..
hello i still cant find the download link in http://feeds2.feedburner.com/webresourcesdepot at line special download
@egar,
It is placed at the bottom of any post that is read via RSS.
how to download???
I just can’t get it working, could somebody please help me?
http://www.celinekurpershoek.nl/project/goudse_stroopwafel/pages/assortiment.php
hi i was wondering how to update a total price using the standard version
i have it updating when a user adds items to the basket by inserting this in the addtobasket action
if ($action == “addToBasket”){
$productInBasket = 0;
$productTotalPrice = 0;
$query = “SELECT DISTINCT * FROM products WHERE productID = ” . $productID;
$result = mysql_query($query);
$row = mysql_fetch_array( $result );
$productPrice = $row['productPrice'];
$productName = $row['productName'];
$query = “INSERT INTO baskets (productID, productPrice, basketSession) VALUES (‘$productID’, ‘$productPrice’, ‘$sessionID’)”;
mysql_query($query) or die(‘Error, insert query failed’);
$query = “SELECT DISTINCT * FROM baskets WHERE productID = ” . $productID . ” AND basketSession = ‘” . $sessionID . “‘”;
$result = mysql_query($query) or die(mysql_error());;
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
$totalItems = $totalItems + 1;
$productTotalPrice = $productTotalPrice + $row['productPrice'];
}
if ($noJavaScript == 1) {
header(“Location: ../index.php”);
} else {
echo (‘ ‘ . $productName . ‘(‘ . $totalItems . ‘ items) – $’ . $productTotalPrice . ”);
}
?>
document.getElementById(“price”).innerHTML=”";
<?php
}
but adding the same script clause in the deletebasket area doesnt work the same, any suggestions ?
Hi,
Great script. Almost sorted now. Just wondered if I could somehow stop the basket from dropping down and showing contents each time someone visits a page. I’d like it only to reveal the contents of the basket when someone actually clicks on the ‘Show Basket’ link.
Any ideas would be great.
Thanks
Bob
Hi thanks for sharing! looks stunning!
is there any way to implement this with OScommerce?
i cuurently have an ecommerce and i would love to implement that…
Hi i loved this script so much!
But i was trying to change the name of the items in the basket . and i don’t know how to! any help with this?
Thanks again for this lovely script
@Kate,
The name of the items should be updated from the MySQL database (you need a db admin tool like phpMyAdmin for that).
Fatal error: Call to undefined function q() in C:\xampp\htdocs\projects\addtocart\inc\functions.php on line 67
as i integrated code with my DB on local machine.
all functionalties are working fine.
but its showing me an error. at line
$sel_query = q(“SELECT * FROM baskets WHERE basketSession = ‘” . $sessionID . “‘ GROUP BY productID ORDER By basketID DESC”);
Is there any way to have the jquery-1.3.2.min.js code working alonside jqModal.js script?
I’ve found the jquery-1.3.2.min.js code obstructs many other type of jQuery style codes..
Great demo I got 8 Notices and 3 warnings from php.
Good job
works perfectly at http://bookilla.com/
Your demo page has the PHP notices and warnings set to display. This isn’t very good practice for a production site.
Sir,
i want this shopping cart in .net not in php. I want to implement this shopping cart into my .net project. Please help me
Hello, it’s a great script but I have a question! Why the “totalItems” don’t seen all the time? It’s apeared only when I add the product!
How do you go about installing this script to a wordpress / wp ecommerce powered site?
Thanks for sharing this script. However i would have loved if you included checking out and redirect the buyer to paypal to make their payments.
Hi,
I need to add a GRAND TOTAL (always viewable), how can i do this?
At this moment i´ve this, but i´ve to refresh the page to see the total…
[code]
(inside the function getBasket(), at the bottom)
$query3 = "SELECT *,SUM(productPrice) FROM baskets WHERE basketSession = '" . $sessionID . "'GROUP BY basketSession";
$result3 = mysql_query($query3);
$row3 = mysql_fetch_array($result3, MYSQL_ASSOC);
if ($row3['SUM(productPrice)'] > 0) {
$basketText.='Total: '.$row3['SUM(productPrice)'].'€';
}
[/code]
ps – it´s urgent
Regards,
RG
I have learnt a lot from your script which is working really nicely apart from one thing (which is mentioned by someone called Bob above). Sometimes the Bag shows and hides real quick like a flicker when you come to the site for the first time. Is this to do with the logic of hide() and show() ? Thanks agian though for providing an excellent example script.
@Bill,
Yes, it displays the cart until the JavaScript code (that hides it) is loaded by the browser.
It can be a good idea to hide it with CSS (rather than JavaScript) at first.
Umut,
Thanks for the reply & I will try what you suggest. But I also have the same another little ‘niggle’ which Brian Jorgensen (Aug 2009) mentions above; Could you explain your fix; where you say…”Once a product is added to the cart, it slides and before it automatically hides, if you hide it manually then the auto-hide becomes, auto show. I will add a simple if then else clause which will solve it.”
What is that simple if..then..else clause? Many thanks.
Hey dude, im having some problems when i go to other section of my site, the items and price get lost, till the moment i choose other item i can see again te price and number of items. And i was trying to keep them by $_SESSION, but not having success, can you help me please?
Thanks. Regards.
@Raul,
Although not sure, I think you should call the getBasket function on initial load of the web pages.
It is a great tutorial ever!
However, I found some problems in this program.
When the variable $nojavascript in functions.php equal to ’1′, the hyperlink of ‘show/hide’ will become ‘no-js.htm’ and ‘aaa.htm’, what it suppose to be??
Thanks again for providing an excellent example script.
is it posible to put in the quantity of ordered goods before you hit the “add to basket” ?
nice piece of code but is there a way to get it to slide up from the bottom of the page instead of sliding down from the top of the page
I am planning on adding a “Checkout” button to the basket, but how can i show the data of the basket on the checkout page in a table, and then send that data to paypal, google checkout or http://www.2checkout.com
@Alec,
As the records are kept in the database, you should better be creating a custom “post” structure where the latest “post data” is pulled from the database.
may i know how to make a confirmation before confirm the order and after confirm will automatically insert into mysql database
i want this shopping cart in .net not in php. I want to implement this shopping cart into my .net project. Please help me
Hi,
Your sliding cart is really great.
I would like it to follow the page scroll, but I don’t know how to do this, could you please help me?
Best regards
hey i want this shopping cart in my asp.net project…
so please help me…
if any 1 has the code than please send me
khushal_krs@yahoo.com
thanx in advance
Hello
Is it possible to change the custom.js to have the sliding effect with the fly effect ?
and how ?
thank’s