fly-to-basket.js
来自「《ajax编程技术与实例》的所有的案例」· JavaScript 代码 · 共 203 行
JS
203 行
/* 定义常用变量 */
var flyingSpeed = 25;
var url_addProductToBasket = 'addProduct.php';
var url_removeProductFromBasket = 'removeProduct.php';
var txt_totalPrice = 'Total: ';
var shopping_cart_div = false;
var flyingDiv = false;
var currentProductDiv = false;
var shopping_cart_x = false;
var shopping_cart_y = false;
var slide_xFactor = false;
var slide_yFactor = false;
var diffX = false;
var diffY = false;
var currentXPos = false;
var currentYPos = false;
var ajaxObjects = new Array();
/* 获取位置参数 */
function shoppingCart_getTopPos(inputObj)
{
var returnValue = inputObj.offsetTop;
while((inputObj = inputObj.offsetParent) != null){
if(inputObj.tagName!='HTML')returnValue += inputObj.offsetTop;
}
return returnValue;
}
function shoppingCart_getLeftPos(inputObj)
{
var returnValue = inputObj.offsetLeft;
while((inputObj = inputObj.offsetParent) != null){
if(inputObj.tagName!='HTML')returnValue += inputObj.offsetLeft;
}
return returnValue;
}
/* 画出移动到购物篮的效果 */
function addToBasket(productId)
{
if(!shopping_cart_div)shopping_cart_div = document.getElementById('shopping_cart');
if(!flyingDiv){
flyingDiv = document.createElement('DIV');
flyingDiv.style.position = 'absolute';
document.body.appendChild(flyingDiv);
}
shopping_cart_x = shoppingCart_getLeftPos(shopping_cart_div);
shopping_cart_y = shoppingCart_getTopPos(shopping_cart_div);
currentProductDiv = document.getElementById('slidingProduct' + productId);
currentXPos = shoppingCart_getLeftPos(currentProductDiv);
currentYPos = shoppingCart_getTopPos(currentProductDiv);
diffX = shopping_cart_x - currentXPos;
diffY = shopping_cart_y - currentYPos;
var shoppingContentCopy = currentProductDiv.cloneNode(true);
shoppingContentCopy.id='';
flyingDiv.innerHTML = '';
flyingDiv.style.left = currentXPos + 'px';
flyingDiv.style.top = currentYPos + 'px';
flyingDiv.appendChild(shoppingContentCopy);
flyingDiv.style.display='block';
flyingDiv.style.width = currentProductDiv.offsetWidth + 'px';
flyToBasket(productId);
}
/* 将物品添加到购物篮 */
function flyToBasket(productId)
{
var maxDiff = Math.max(Math.abs(diffX),Math.abs(diffY));
var moveX = (diffX / maxDiff) * flyingSpeed;;
var moveY = (diffY / maxDiff) * flyingSpeed;
currentXPos = currentXPos + moveX;
currentYPos = currentYPos + moveY;
flyingDiv.style.left = Math.round(currentXPos) + 'px';
flyingDiv.style.top = Math.round(currentYPos) + 'px';
if(moveX>0 && currentXPos > shopping_cart_x){
flyingDiv.style.display='none';
}
if(moveX<0 && currentXPos < shopping_cart_x){
flyingDiv.style.display='none';
}
if(flyingDiv.style.display=='block')setTimeout('flyToBasket("' + productId + '")',10); else ajaxAddProduct(productId);
}
/* 用来显示购物篮中的内容 */
function showAjaxBasketContent(ajaxIndex)
{
// Getting a reference to the shopping cart items table
var itemBox = document.getElementById('shopping_cart_items');
var productItems = ajaxObjects[ajaxIndex].response.split('|||'); // Breaking response from Ajax into tokens
if(document.getElementById('shoping_cart_items_product' + productItems[0])){ // A product with this id is allready in the basket - just add number items
var row = document.getElementById('shoping_cart_items_product' + productItems[0]);
var items = row.cells[0].innerHTML /1;
items = items + 1;
row.cells[0].innerHTML = items;
}else{ // Product isn't allready in the basket - add a new row
var tr = itemBox.insertRow(-1);
tr.id = 'shoping_cart_items_product' + productItems[0]
var td = tr.insertCell(-1);
td.innerHTML = '1'; // Number of items
var td = tr.insertCell(-1);
td.innerHTML = productItems[1]; // Description
var td = tr.insertCell(-1);
td.style.textAlign = 'right';
td.innerHTML = productItems[2]; // Price
var td = tr.insertCell(-1);
var a = document.createElement('A');
td.appendChild(a);
a.href = '#';
a.onclick = function(){ removeProductFromBasket(productItems[0]); };
var img = document.createElement('IMG');
img.src = 'images/remove.gif';
a.appendChild(img);
//td.innerHTML = '<a href="#" onclick="removeProductFromBasket("' + productItems[0] + '");return false;"><img src="images/remove.gif"></a>';
}
updateTotalPrice();
ajaxObjects[ajaxIndex] = false;
}
/* 实时修改物品的总价 */
function updateTotalPrice()
{
var itemBox = document.getElementById('shopping_cart_items');
// Calculating total price and showing it below the table with basket items
var totalPrice = 0;
if(document.getElementById('shopping_cart_totalprice')){
for(var no=1;no<itemBox.rows.length;no++){
totalPrice = totalPrice + (itemBox.rows[no].cells[0].innerHTML.replace(/[^0-9]/g) * itemBox.rows[no].cells[2].innerHTML);
}
document.getElementById('shopping_cart_totalprice').innerHTML = txt_totalPrice + totalPrice.toFixed(2);
}
}
/* 删除购物篮中的物品 */
function removeProductFromBasket(productId)
{
var productRow = document.getElementById('shoping_cart_items_product' + productId);
var numberOfItemCell = productRow.cells[0];
if(numberOfItemCell.innerHTML == '1'){
productRow.parentNode.removeChild(productRow);
}else{
numberOfItemCell.innerHTML = numberOfItemCell.innerHTML/1 - 1;
}
updateTotalPrice();
ajaxRemoveProduct(productId);
}
/* 验证是否删除 */
function ajaxValidateRemovedProduct(ajaxIndex)
{
if(ajaxObjects[ajaxIndex].response!='OK')alert('Error while removing product from the database');
}
/* 以下两个方法都是构建sack对象,通过它来请求服务器 */
function ajaxRemoveProduct(productId)
{
var ajaxIndex = ajaxObjects.length;
ajaxObjects[ajaxIndex] = new sack();
ajaxObjects[ajaxIndex].requestFile = url_removeProductFromBasket + '?productIdToRemove=' + productId; // Saving product in this file
ajaxObjects[ajaxIndex].onCompletion = function(){ ajaxValidateRemovedProduct(ajaxIndex); }; // Specify function that will be executed after file has been found
ajaxObjects[ajaxIndex].runAJAX(); // Execute AJAX function
}
function ajaxAddProduct(productId)
{
var ajaxIndex = ajaxObjects.length;
ajaxObjects[ajaxIndex] = new sack();
ajaxObjects[ajaxIndex].requestFile = url_addProductToBasket + '?productId=' + productId; // Saving product in this file
ajaxObjects[ajaxIndex].onCompletion = function(){ showAjaxBasketContent(ajaxIndex); }; // Specify function that will be executed after file has been found
ajaxObjects[ajaxIndex].runAJAX(); // Execute AJAX function
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?