jQuery實(shí)現(xiàn)產(chǎn)品對(duì)比功能附源碼下載
產(chǎn)品對(duì)比相信大家并不陌生,為了方便用戶對(duì)類似產(chǎn)品的相關(guān)信息進(jìn)行有效直觀的對(duì)比,一些電商網(wǎng)站產(chǎn)品或評(píng)測(cè)網(wǎng)站會(huì)為用戶提供產(chǎn)品對(duì)比的功能,用戶只需勾選多個(gè)需要對(duì)比的產(chǎn)品,就可以進(jìn)行比對(duì)。本文將使用jQuery來給大家講解如何實(shí)現(xiàn)產(chǎn)品對(duì)比功能。

HTML
HTML結(jié)構(gòu)我們分三部分,第一是產(chǎn)品列表部分,展示所有可以對(duì)比的產(chǎn)品。我們以某手機(jī)網(wǎng)站為例,簡(jiǎn)單的結(jié)構(gòu),只需展示產(chǎn)品圖片和名稱,以及一個(gè)添加按鈕。注意我們把手機(jī)的相關(guān)參數(shù)信息都放在屬性data-*里,等會(huì)后面展示對(duì)比信息的時(shí)候會(huì)用到。
<div class="selectProduct" data-title="華為P9" data-id="華為P9" data-size="5.2"" data-weight="144 g" data-os="Android 6.0" data-processor="海思麒麟955 2.5GHz(8核)" data-battery="3000mAH"> <a class="btn-floating light-grey addButtonCircular addToCompare">+</a> <img src="images/huawei_p9.jpg" class="imgFill productImg"> <h4>華為 P9</h4> </div>
第二部分是比對(duì)預(yù)覽框,我們選擇了需要對(duì)比的產(chǎn)品都會(huì)加入到比對(duì)預(yù)覽框中。我們使用CSS控制默認(rèn)不顯示,當(dāng)有產(chǎn)品被加入時(shí),在固定的頁(yè)面的底部顯示比對(duì)預(yù)覽框。
<div class="row"> <div class="col-md-12 comparePanle"> <div class="row"> <div class="col-md-9"> <h4>對(duì)比中的產(chǎn)品</h4> </div> <div class="col-md-3"> <button class="btn btn-default cmprBtn" disabled>開始對(duì)比</button> </div> </div> <div class="comparePan"></div> </div> </div>
第三部分就是詳細(xì)的比對(duì)信息彈出層。默認(rèn)是不顯示的,當(dāng)點(diǎn)擊比對(duì)框中的開始比對(duì)按鈕,會(huì)彈出一個(gè)詳細(xì)信息層,以列表的形式將所選的產(chǎn)品進(jìn)行詳細(xì)比對(duì)。
<div id="id01" class="animate-zoom modal modPos">
<div class="modal-title">
<a onclick="document.getElementById('id01').style.display='none'" class="modal-closebtn">×</a>
</div>
<div class="row contentPop"></div>
</div>
Css文件在源碼中打包好,這里不列出來了,請(qǐng)自行下載源碼查看。
jQuery
本示例是基于jQuery的,所以在寫js代碼前應(yīng)該先將jQuery庫(kù)文件加載好。
首先,當(dāng)點(diǎn)擊產(chǎn)品展示的右上角的“+”號(hào),則會(huì)將當(dāng)前產(chǎn)品添加到位于頁(yè)面底部的比對(duì)框中。業(yè)務(wù)流程是這樣的:點(diǎn)擊“+”號(hào)后,顯示比對(duì)框,當(dāng)前產(chǎn)品展示的“+”號(hào)變成“x”號(hào),并且處于選中狀態(tài),獲取當(dāng)前產(chǎn)品的id,判斷當(dāng)前產(chǎn)品id是否在比對(duì)框中,如果不在比對(duì)框中,則將產(chǎn)品加入到比對(duì)框中,如果這時(shí)比對(duì)框中的產(chǎn)品超過了3個(gè),則彈出提示框。如果比對(duì)框中已經(jīng)存在當(dāng)前產(chǎn)品,那么這個(gè)時(shí)候?qū)嶋H點(diǎn)擊的是“x”號(hào),當(dāng)前產(chǎn)品會(huì)從比對(duì)框中刪除。還有一個(gè)細(xì)節(jié)就是,當(dāng)比對(duì)框中只有一個(gè)產(chǎn)品時(shí),不能做比對(duì),所以比對(duì)框中的“開始比對(duì)”按鈕是不可用的disabled。
var list = [];
//添加到對(duì)比項(xiàng)
$(document).on('click', '.addToCompare', function () {
$(".comparePanle").show();
$(this).toggleClass("rotateBtn");
$(this).parents(".selectProduct").toggleClass("selected");
var productID = $(this).parents('.selectProduct').attr('data-title');
var inArray = $.inArray(productID, list);
if (inArray < 0) {
if (list.length > 2) {
alert('最多只能選擇3個(gè)產(chǎn)品');
$(this).toggleClass("rotateBtn");
$(this).parents(".selectProduct").toggleClass("selected");
return;
}
if (list.length < 3) {
list.push(productID);
var displayTitle = $(this).parents('.selectProduct').attr('data-id');
var image = $(this).siblings(".productImg").attr('src');
$(".comparePan").append('<div id="' + productID + '" class="relPos col-md-3 text-center"><a class="selectedItemCloseBtn closebtn">×</a><img src="' + image + '" alt="image" style="height:100px;"/><p id="' + productID + '" class="ptitle">' + displayTitle + '</p></div>');
}
} else {
list.splice($.inArray(productID, list), 1);
var prod = productID.replace(" ", "");
$('#' + prod).remove();
hideComparePanel();
}
if (list.length > 1) {
$(".cmprBtn").addClass("active");
$(".cmprBtn").removeAttr('disabled');
} else {
$(".cmprBtn").removeClass("active");
$(".cmprBtn").attr('disabled', '');
}
});
接下來到了比對(duì)框的操作了,產(chǎn)品加到比對(duì)框后,點(diǎn)擊“開始比對(duì)”按鈕,彈出層,獲取比對(duì)的產(chǎn)品信息,并將產(chǎn)品信息加入到彈出層中。這里,我們使用了jQUery的$(el).data()方法獲取了前面html中產(chǎn)品中的data-*屬性內(nèi)容。
$(document).on('click', '.cmprBtn', function () {
if ($(".cmprBtn").hasClass("active")) {
/* this is to print the features list statically*/
$(".contentPop").append('<div class="col-md-3 compareItemParent relPos">' + '<ul class="product"><li class=" relPos compHeader">產(chǎn)品信息</li><li>名稱</li><li>屏幕大小</li><li>重量</li><li>系統(tǒng)</li><li class="cpu">CPU</li><li>電池容量</li></ul></div>');
for (var i = 0; i < list.length; i++) {
/* this is to add the items to popup which are selected for comparision */
product = $('.selectProduct[data-title="' + list[i] + '"]');
var image = $('[data-title=' + list[i] + ']').find(".productImg").attr('src');
var title = $('[data-title=' + list[i] + ']').attr('data-id');
/*appending to div*/
$(".contentPop").append('<div class="col-md-3 compareItemParent relPos">' + '<ul class="product">' + '<li class="compHeader"><img src="' + image + '" class="compareThumb"></li>' + '<li>' + title + '</li>' + '<li>' + $(product).data('size') + '</li>' + '<li>' + $(product).data('weight') + '</li><li>'+ $(product).data('os') +'</li><li class="cpu">' + $(product).data('processor') + '</li>' + '<li>' + $(product).data('battery') + '</ul>' + '</div>');
}
}
$(".modPos").show();
});
然后,產(chǎn)品信息展示出來了,點(diǎn)擊右上角的“x”號(hào),會(huì)關(guān)閉彈出層,并且清除比對(duì)框中的內(nèi)容。
$(document).on('click', '.modal-closebtn', function () {
$(".contentPop").empty();
$(".comparePan").empty();
$(".comparePanle").hide();
$(".modPos").hide();
$(".selectProduct").removeClass("selected");
$(".cmprBtn").attr('disabled', '');
list.length = 0;
$(".rotateBtn").toggleClass("rotateBtn");
});
最后,我們?cè)诒葘?duì)框中也可以移除比對(duì)的產(chǎn)品,點(diǎn)擊比對(duì)產(chǎn)品框中的“x“號(hào),會(huì)移除對(duì)應(yīng)的產(chǎn)品。
$(document).on('click', '.selectedItemCloseBtn', function () {
var test = $(this).siblings("p").attr('id');
$('[data-title=' + test + ']').find(".addToCompare").click();
hideComparePanel();
});
function hideComparePanel() {
if (!list.length) {
$(".comparePan").empty();
$(".comparePanle").hide();
}
}
以上所述是小編給大家介紹的jQuery實(shí)現(xiàn)產(chǎn)品對(duì)比功能附源碼下載,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
jQuery的animate函數(shù)學(xué)習(xí)記錄
jQuery.animate的每種動(dòng)畫過渡效果都是通過easing函數(shù)實(shí)現(xiàn)的,下面是自己研究之后對(duì)其的基本認(rèn)識(shí)2014-08-08
jQuery使用模式窗口實(shí)現(xiàn)在主頁(yè)面和子頁(yè)面中互相傳值的方法
這篇文章主要介紹了jQuery使用模式窗口實(shí)現(xiàn)在主頁(yè)面和子頁(yè)面中互相傳值的方法,涉及jQuery模式窗口及參數(shù)傳遞相關(guān)技巧,需要的朋友可以參考下2016-03-03
基于jQuery實(shí)現(xiàn)頁(yè)面搜索功能
這篇文章主要為大家詳細(xì)介紹了基于jQuery實(shí)現(xiàn)頁(yè)面搜索功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07
jquery獲取復(fù)選框的值的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)硪黄猨query獲取復(fù)選框的值的簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-05-05
jQuery+CSS 實(shí)現(xiàn)的超Sexy下拉菜單
早前發(fā)現(xiàn)了 Soh Tanaka 分享的非常 Sexy 的 Drop Down Menu w/ jQuery & CSS,稍作修改實(shí)現(xiàn)了多級(jí)下拉,并實(shí)現(xiàn)了 ASP.NET 中通過輸出 HTML 動(dòng)態(tài)創(chuàng)建版本,有興趣的童鞋可以包裝成 Server Control。2010-01-01
解決Jquery向頁(yè)面append新元素之后事件的綁定問題
今天有g(shù)et到一個(gè)新知識(shí)點(diǎn),就是當(dāng)我們向頁(yè)面添加新的元素之后,加載之前的函數(shù)方法就對(duì)新元素失效了,下面我來說說如何解決這個(gè)問題的?2015-03-03

