jQuery实现产品对比功能附源码下载


Posted in Javascript onAugust 09, 2016

产品对比相信大家并不陌生,为了方便用户对类似产品的相关信息进行有效直观的对比,一些电商网站产品或评测网站会为用户提供产品对比的功能,用户只需勾选多个需要对比的产品,就可以进行比对。本文将使用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(); 
} 
}

以上所述是小编给大家介绍的jQuery实现产品对比功能附源码下载,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jquery.ui.progressbar 中文文档
Nov 26 Javascript
jquery ui dialog ie8出现滚动条的解决方法
Dec 06 Javascript
javascript根据时间生成m位随机数最大13位
Oct 30 Javascript
javascript中call,apply,bind的用法对比分析
Feb 12 Javascript
基于replaceChild制作简单的吞噬特效
Sep 21 Javascript
Node.js文件操作方法汇总
Mar 22 Javascript
Angular X中使用ngrx的方法详解(附源码)
Jul 10 Javascript
解决vue单页使用keep-alive页面返回不刷新的问题
Mar 13 Javascript
vue实现底部菜单功能
Jul 24 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
May 10 Javascript
vue中重定向redirect:‘/index‘,不显示问题、跳转出错的完美解决
Sep 28 Javascript
jQuery实现穿梭框效果
Jan 19 jQuery
AngularJS利用Controller完成URL跳转
Aug 09 #Javascript
JavaScript实现广告弹窗效果
Aug 09 #Javascript
谈谈JavaScript中的几种借用方法
Aug 09 #Javascript
Backbone View 之间通信的三种方式
Aug 09 #Javascript
Backbone中View之间传值的学习心得
Aug 09 #Javascript
全面了解函数声明与函数表达式、变量提升
Aug 09 #Javascript
jQuery 生成svg矢量二维码
Aug 09 #Javascript
You might like
php 连接mysql连接被重置的解决方法
2011/02/15 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
2019/02/20 PHP
jQuery实现在列表的首行添加数据
2015/05/19 Javascript
nodejs 中模拟实现 emmiter 自定义事件
2016/02/22 NodeJs
浅谈JavaScript的push(),pop(),concat()方法
2016/06/03 Javascript
JS动态给对象添加事件的简单方法
2016/07/19 Javascript
AngularJs  E2E Testing 详解
2016/09/02 Javascript
jQuery移除或禁用html元素点击事件常用方法小结
2017/02/10 Javascript
JavaScript实现审核流程状态的动态显示进度条
2017/03/15 Javascript
vue嵌套路由与404重定向实现方法分析
2018/05/04 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
java实现单链表增删改查的实例代码详解
2019/08/30 Javascript
[01:09]DOTA2次级职业联赛 - 99战队宣传片
2014/12/01 DOTA
Python 的 with 语句详解
2014/06/13 Python
Python中使用md5sum检查目录中相同文件代码分享
2015/02/02 Python
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
python实现读取大文件并逐行写入另外一个文件
2018/04/19 Python
Tesserocr库的正确安装方式
2018/10/19 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
2019/05/27 Python
从列表或字典创建Pandas的DataFrame对象的方法
2019/07/06 Python
Pycharm连接远程服务器并实现远程调试的实现
2019/08/02 Python
Django 限制访问频率的思路详解
2019/12/24 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
对Pytorch 中的contiguous理解说明
2021/03/03 Python
英国浴室洗脸盆购物网站:Click Basin
2018/06/08 全球购物
Vrbo英国:预订度假屋
2020/08/19 全球购物
园林设计师自荐信
2013/11/18 职场文书
文员岗位职责范本
2015/04/16 职场文书
入党群众意见范文
2015/06/02 职场文书
python实战之一步一步教你绘制小猪佩奇
2021/04/22 Python
Python与C++中梯度方向直方图的实现
2022/03/17 Python
html,css,javascript是怎样变成页面的
2023/05/07 HTML / CSS