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创建DOM节点的方法
Jun 11 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
Jan 27 Javascript
JavaScript中浅讲ajax图文详解
Nov 11 Javascript
vue.js学习之递归组件
Dec 13 Javascript
基于JavaScript实现数码时钟效果
Mar 30 Javascript
node下使用UglifyJS压缩合并JS文件的方法
Mar 07 Javascript
vue中使用iview自定义验证关键词输入框问题及解决方法
Mar 26 Javascript
原生JS实现DOM加载完成马上执行JS代码的方法
Sep 07 Javascript
在vue项目中引用Iview的方法
Sep 14 Javascript
React如何解决fetch跨域请求时session失效问题
Nov 02 Javascript
JavaScript 面向对象基础简单示例
Oct 02 Javascript
JS插件amCharts实现绘制柱形图默认显示数值功能示例
Nov 26 Javascript
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
深入apache host的配置详解
2013/06/09 PHP
php分页函数示例代码分享
2014/02/24 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
PHP实现动态柱状图改进版
2015/03/30 PHP
Javascript模块化编程(一)AMD规范(规范使用模块)
2013/01/17 Javascript
js 实现 input type=&quot;file&quot; 文件上传示例代码
2013/08/07 Javascript
jQuery实现的导航动画效果(附demo源码)
2016/04/01 Javascript
jQuery+CSS3文字跑马灯特效的简单实现
2016/06/25 Javascript
js基础之DOM中元素对象的属性方法详解
2016/10/28 Javascript
浅谈JS验证表单文本域输入空格的问题
2017/02/14 Javascript
使用webpack-dev-server处理跨域请求的方法
2018/04/18 Javascript
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
JS如何获取地址栏的参数实例讲解
2018/10/06 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
JS实现“全选”和&quot;全不选&quot;功能代码实例
2020/02/06 Javascript
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
Python做文本按行去重的实现方法
2016/10/19 Python
彻底搞懂Python字符编码
2018/01/23 Python
python实现多线程网页下载器
2018/04/15 Python
CentOS下Python3的安装及创建虚拟环境的方法
2018/11/28 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
2020/01/06 Python
详解python中的lambda与sorted函数
2020/09/04 Python
Django如何使用asyncio协程和ThreadPoolExecutor多线程
2020/10/12 Python
使用CSS3滤镜的filter:blur属性制作毛玻璃模糊效果的方法
2016/07/08 HTML / CSS
赫里福德的一家乡村零售商店:Philip Morris & Son
2017/06/25 全球购物
后进生转化工作制度
2014/01/17 职场文书
我爱读书演讲稿
2014/05/07 职场文书
2015年学生会工作总结范文
2015/03/31 职场文书
签订劳动合同通知书
2015/04/16 职场文书
上课迟到检讨书
2015/05/06 职场文书
党支部评议意见
2015/06/02 职场文书
永不妥协观后感
2015/06/10 职场文书
我是特种兵观后感
2015/06/11 职场文书
找规律教学反思
2016/02/23 职场文书
CSS 使用 resize 实现图片拖拽切换预览功能(强大功能)
2021/08/23 HTML / CSS