jQuery實現的添加到產品對比

產品對比相信大家並不陌生,爲了方便用戶對類似產品的相關信息進行有效直觀的對比,一些電商網站產品或評測網站會爲用戶提供產品對比的功能,用戶只需勾選多個需要對比的產品,就可以進行比對。本文將使用jQuery來給大家講解如何實現產品對比功能。


html

HTML結構我們分三部分,第一是產品列表部分,展示所有可以對比的產品。我們以某手機網站爲例,簡單的結構,只需展示產品圖片和名稱,以及一個添加按鈕。注意我們把手機的相關參數信息都放在屬性data-*裏,等會後面展示對比信息的時候會用到。

<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>

第二部分是比對預覽框,我們選擇了需要對比的產品都會加入到比對預覽框中。我們使用CSS控制默認不顯示,當有產品被加入時,在固定的頁面的底部顯示比對預覽框。

<div class="row">
	<div class="col-md-12 comparePanle">
		<div class="row">
			<div class="col-md-9">
				<h4>對比中的產品</h4>
			</div>
			<div class="col-md-3">
				 
				<button class="btn btn-default cmprBtn" disabled>開始對比</button>
			</div>
		</div>
		<div class="comparePan"></div>
	</div>
</div>

第三部分就是詳細的比對信息彈出層。默認是不顯示的,當點擊比對框中的開始比對按鈕,會彈出一個詳細信息層,以列表的形式將所選的產品進行詳細比對。

<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文件在源碼中打包好,這裏不列出來了,請自行下載源碼查看。

jQuery

本示例是基於jQuery的,所以在寫js代碼前應該先將jQuery庫文件加載好。

首先,當點擊產品展示的右上角的“+”號,則會將當前產品添加到位於頁面底部的比對框中。業務流程是這樣的:點擊“+”號後,顯示比對框,當前產品展示的“+”號變成“x”號,並且處於選中狀態,獲取當前產品的id,判斷當前產品id是否在比對框中,如果不在比對框中,則將產品加入到比對框中,如果這時比對框中的產品超過了3個,則彈出提示框。如果比對框中已經存在當前產品,那麼這個時候實際點擊的是“x”號,當前產品會從比對框中刪除。還有一個細節就是,當比對框中只有一個產品時,不能做比對,所以比對框中的“開始比對”按鈕是不可用的disabled。

var list = [];
    //添加到對比項
    $(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個產品');
                $(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', '');
        }

    });

接下來到了比對框的操作了,產品加到比對框後,點擊“開始比對”按鈕,彈出層,獲取比對的產品信息,並將產品信息加入到彈出層中。這裏,我們使用了jQUery的$(el).data()方法獲取了前面html中產品中的data-*屬性內容。

$(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">產品信息</li><li>名稱</li><li>屏幕大小</li><li>重量</li><li>系統</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();
    });

然後,產品信息展示出來了,點擊右上角的“x”號,會關閉彈出層,並且清除比對框中的內容。

$(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");
    });

最後,我們在比對框中也可以移除比對的產品,點擊比對產品框中的“x“號,會移除對應的產品。

$(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();
        }
    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章