表单/表格

jQuery和CSS3实用响应式商品参数比较表格

阿里云

这是一款使用 jQuery 和 CSS3 制作的实用商品参数比较表格特效。如果你开发了一个在线的商城网站,你想让用户对各种商品的参数进行比较,那么使用这个商品参数比较表格是一个很好的选择。这个商品参数比较表格在一个表格中列出了所有相似产品,用户可以选择他喜欢的 2 个或多个产品,点击过滤按钮来将其它产品排除,剩下的产品的各项参数一一对应,一目了然,即节省了用户的时间,也大大提升了用户体验。

HTML 结构:

该表格的 HTML 结构使用一个 section.cd-products-comparison-table 来包裹一个[header]元素和一个 div.cd-products-table。

也想出现在这里?联系我们
创客主机
元素中包含了“重置”和“过滤”2 个按钮,div.cd-products-table 用于包裹产品参数列表的标题 div.features 和列表详细内容 div.cd-products-wrapper。

  1. <section class="cd-products-comparison-table">
  2.   <header>
  3.     <h2>Compare Models</h2>
  4.  
  5.     <div class="actions">
  6.       <a href="#0" class="reset">Reset</a>
  7.       <a href="#0" class="filter">Filter</a>
  8.     </div>
  9.   </header>
  10.  
  11.   <div class="cd-products-table">
  12.     <div class="features">
  13.       <div class="top-info">Models</div>
  14.       <ul class="cd-features-list">
  15.         <li>Price</li>
  16.         <li>Customer Rating</li>
  17.         <li>Resolution</li>
  18.         <!-- other features here -->
  19.       </ul>
  20.     </div> <!-- .features -->
  21.  
  22.     <div class="cd-products-wrapper">
  23.       <ul class="cd-products-columns">
  24.         <li class="product">
  25.           <div class="top-info">
  26.             <div class="check"></div>
  27.             <img src="../img/product.png" alt="product image">
  28.             <h3>Sumsung Series 6 J6300</h3>
  29.           </div> <!-- .top-info -->
  30.  
  31.           <ul class="cd-features-list">
  32.             <li>$600</li>
  33.             <li class="rate"><span>5/5</span></li>
  34.             <li>1080p</li>
  35.             <!-- other values here -->
  36.           </ul>
  37.         </li> <!-- .product -->
  38.  
  39.         <li class="product">
  40.           <!-- product content here -->
  41.         </li> <!-- .product -->
  42.  
  43.         <!-- other products here -->
  44.       </ul> <!-- .cd-products-columns -->
  45.     </div> <!-- .cd-products-wrapper -->
  46.  
  47.     <ul class="cd-table-navigation">
  48.       <li><a href="#0" class="prev inactive">Prev</a></li>
  49.       <li><a href="#0" class="next">Next</a></li>
  50.     </ul>
  51.   </div> <!-- .cd-products-table -->
  52. </section> <!-- .cd-products-comparison-table -->

CSS 样式:

.cd-products-wrapper 元素设置了 100%的宽度,overflow-x 为 auto,因此会有一个水平滚动条出现。.cd-products-columns 元素的宽度等于所有表格列的宽度的总和,并且也是可以滚动的。div.features 元素使用绝对定位,并被固定在视口的左侧。

  1. .cd-products-wrapper {
  2.   overflow-x: auto;
  3.   /* this fixes the buggy scrolling on webkit browsers */
  4.   /* - mobile devices only - when overflow property is applied */
  5.   -webkit-overflow-scrolling: touch;
  6. }
  7.  
  8. .cd-products-table .features {
  9.   /* fixed left column - product properties list */
  10.   position: absolute;
  11.   z-index: 1;
  12.   top: 0;
  13.   left: 0;
  14.   width: 120px;
  15. }
  16.  
  17. .cd-products-columns {
  18.   /* products list wrapper */
  19.   width: 1200px; /* single column width * products number */
  20.   margin-left: 120px; /* .features width */
  21. }

在大屏幕设备上(视口宽度大于 1170 像素),当用户向下滚动的时候,.cd-products-table 元素会被添加.top-fixed 的 class 类,用于固定产品的头部信息(产品名称和图片)。

  1. @media only screen and (min-width: 1170px) {
  2.   .cd-products-table.top-fixed .cd-products-columns > li {
  3.     padding-top: 160px;
  4.   }
  5.  
  6.   .cd-products-table.top-fixed .top-info {
  7.     height: 160px;
  8.     position: fixed;
  9.     top: 0;
  10.   }
  11.  
  12.   .cd-products-table.top-fixed .top-info h3 {
  13.     transform: translateY(-116px);
  14.   }
  15.  
  16.   .cd-products-table.top-fixed .top-info img {
  17.     transform: translateY(-62px) scale(0.4);
  18.   }
  19.  
  20. }

JavaScript 代码:

为了实现产品参数比较表格,这里创建了一个 productsTable 对象,并使用 bindEvents 来为元素附加事件。

  1. function productsTable( element ) {
  2.   this.element = element;
  3.   this.table = this.element.children('.cd-products-table');
  4.   this.productsWrapper = this.table.children('.cd-products-wrapper');
  5.   this.tableColumns = this.productsWrapper.children('.cd-products-columns');
  6.   this.products = this.tableColumns.children('.product');
  7.   //additional properties here
  8.   // bind table events
  9.   this.bindEvents();
  10. }
  11.  
  12. productsTable.prototype.bindEvents = function() {
  13.   var self = this;
  14.  
  15.   self.productsWrapper.on('scroll', function(){
  16.     //detect scroll left inside products table
  17.   });
  18.  
  19.   self.products.on('click', '.top-info', function(){
  20.     //add/remove .selected class to products 
  21.   });
  22.  
  23.   self.filterBtn.on('click', function(event){
  24.     //filter products
  25.   });
  26.   //reset product selection
  27.   self.resetBtn.on('click', function(event){
  28.     //reset products visibility
  29.   });
  30.  
  31.   this.navigation.on('click', 'a', function(event){
  32.     //scroll inside products table - left/right arrows
  33.   });
  34. }
  35.  
  36. var comparisonTables = [];
  37. $('.cd-products-comparison-table').each(function(){
  38.   //create a productsTable object for each .cd-products-comparison-table
  39.   comparisonTables.push(new productsTable($(this)));
  40. });

在.cd-products-wrapper 元素中添加了一个滚动事件的监听。当.cd-products-table 元素被添加.top-fixed class 的时候,所有的.top-info 元素都处于固定的位置上,它们不会随.cd-products-columns 一起滚动。updateLeftScrolling()函数用于在用户拉动.cd-products-wrapper 时水平移动这些元素。

  1. productsTable.prototype.updateLeftScrolling = function() {
  2.   var scrollLeft = this.productsWrapper.scrollLeft();
  3.  
  4.   if( this.table.hasClass('top-fixed') && checkMQ() == 'desktop') 
  5.     setTranformX(this.productsTopInfo, '-'+scrollLeft);
  6. }

jQuery 和 CSS3 实用响应式商品参数比较表格

已有 435 人购买
查看演示升级 VIP立刻购买

演示地址 下载地址
收藏
(0)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!