电子表格也能做购物车?简单三步就能实现

电子表格,购物车,简单,三步,实现 · 浏览次数 : 7798

小编点评

**产品目录页和购物车效果的实现思路** **数据源:** * `tbProducts` 表包含有关产品的数据。 **步骤:** 1. **数据绑定:** 使用 `setBindingPath` 方法将单元格绑定到模板范围。 2. **RangeBlockSpline 图形:** 使用 `RANGEBLOCKSPARKLINE` 函数创建产品列表,并使用 `ValueChanged` 事件监听数据变化。 3. **选择效果:** 响应用户点击“加号”背景的事件,将其添加到购物车。 4. **前端数据收集:** 使用 `getValue` 方法获取数据。 **代码示例:** ```javascript // 数据绑定 var catalogSheet = sheet.getSheetFromName("DataSource"); catalogSheet.bind(GC.Spread.Sheets.Events.ValueChanged, function(sender, args) { // 获取新选择的项目索引 var row = args.newSelections[0].row; var col = args.newSelections[0].col; // 设置 RangeBlockSpline 图形 sheet.suspendPaint(); sheet.setFormula(5, 1, "=RANGEBLOCKSPARKLINE(Template!A2:E7,OBJECT(tbProducts[#Headers],INDEX(tbProducts[#Data],1,SEQUENCE(COUNTA(tbProducts[#Headers]),1))))"); // 设置选择效果 sheet.getCell(row, col).backColor("#dddddd"); // 添加选择效果 sheet.getCell(row, newCol).backColor("#53b175"); // 处理选择事件 if (row >= 5 && row <= 9 && col >= 1 && col <= 3) { // 加入购物车按钮 addCartButton(); } // 恢复画质 sheet.resumePaint(); }); ``` **其他提示:** * 使用 CSS 设置表格的宽度。 * 使用 JavaScript 库实现超链接功能。 * 添加其他选择效果,如颜色或图标。

正文

在我们的项目当中,经常需要添加一些选择界面,让用户直观地进行交互,比如耗材、办公用品、设计稿或者其它可以选择的内容。

在线商城的商品目录和购物车无疑是一种大家都很熟悉的交互方式,但是在实际开发中,我们可能会遇到以下几个问题:

  1. 怎么及时响应产品的需求,快速实现功能上线?
  2. 怎样实现灵活变更模板,把数据、模板和实现分离,便于设计同学随时修改UI?
  3. 怎样让用户获得熟悉的交互体验,同时实现前端数据收集和统计?
    这里给大家提供一个思路,用在线Excel来实现这个功能!本文将展示如何使用纯前端表格控件,在30分钟内、三步操作创建产品目录页和购物车效果。文末包含demo源码,不要错过。

先来看看完成的效果:

简单三步创建个性化产品目录页

除了支持数百种统计和财务功能的高速计算引擎外,我们还将大量使用SpreadJS内置的 RANGEBLOCKSPARKLINE(template_range, data_expr) - 一个强大的迷你图功能,允许用户将单元格范围模板 (template_range) 定义为单个单元格类型并将该模板应用于单元格以将一组数据(data_expr)加载到模板中。

点击此处下载演示文件,解压后直接用浏览器打开index.html即可看到效果。

以下是创建和设计产品目录所需的内容:

数据源表

数据源表包含有关不同产品的数据。它们位于名为 tbProducts 的表中。
此表包含有关名称、类别、价格、评级等的信息:

模板表

此页面包含用于在目录表上创建产品列表的模板范围。
首先要做的是排列单元格,然后设置单元格的绑定路径。
它可以通过 Javascript 使用 SpreadJS 的 setBindingPath 方法来完成。


templateSheet.setBindingPath(0, 0, "Nr");
templateSheet.setBindingPath(0, 1, "Name");
templateSheet.setBindingPath(0, 3, "Price");
templateSheet.setBindingPath(0, 4, "Category");
templateSheet.setBindingPath(0, 5, "Description");
templateSheet.setBindingPath(0, 6, "Image");
templateSheet.setBindingPath(0, 7, "Review");
templateSheet.setBindingPath(0, 8, "Favorite");
templateSheet.setBindingPath(0, 9, "Rating");

当然,上边这步操作也有不用写代码的方法——用设计器,在下载的安装包中,从“\SpreadJS.Release.x.x.x\Designer\Designer Runtime”路径下找到设计器的安装包,完成安装后,按照下列步骤操作:

  1. 数据→工作表绑定→字段列表

  2. 将鼠标悬停在 Start 分支上并通过单击绿色 + 按钮添加字段(请注意,这里可以使用“x”按钮删除字段并使用位于分支右侧的设置修改这些字段)

  3. 拖动模板范围所需单元格中的字段

渲染表(目录)

如上面的屏幕截图所示,此表包含四个主要部分:

按面板排序

此面板包含一个按钮列表,可以更改包含有关产品的数据的表格的顺序,从目录表更改产品的顺序。

如果使用设计器,执行以下操作:
1.主页→ 单元格编辑器→ 单元格类型
2.单击按钮列表
3.设置项目的文本和值以及按钮列表对象的不同属性。
4.添加项目
5.点击确定

另外,还可以使用以下 JavaScript 代码添加按钮列表:

var cellType = new GC.Spread.Sheets.CellTypes.ButtonList();

cellType.items([{text:"Name (asc)",value:0},{text:"Name (desc)",value:1},{text:"Price (lowest)",value:2},text:"Price (highest)",value:3},{text:"Rating (lowest)",value:4},      {text:"Rating (highest)",value:5}]);

cellType.selectedBackColor("#0AA371");

cellType.selectedForeColor("#FFFFFF");

cellType.selectionMode(GC.Spread.Sheets.CellTypes.SelectionMode.single);// allows only 1 item to be selected

catalogSheet.getCell(3, 2).cellType(cellType);

通过使用 ValueChanged 事件,我们可以根据按钮列表选择更改位于 Datasource 工作表上的表的顺序。

//Sort by panel
catalogSheet.bind(GC.Spread.Sheets.Events.ValueChanged,function(type,args){
    if (args.row ==3 && args.col==2)//only check if the button list value has changed
    {
        var i = 1; var asc = true;
        switch(args.newValue){
            case 1:
            i= 1; asc = false;//sort by Name desc
            break;
            case 2:
            i= 3; asc = true;//sort by Price asc
            break;
            case 3:
            i= 3; asc = false;//sort by price desc
            break;
            case 4:
            i= 8; asc = true;//sort by Rating asc
            break;
            case 5:
            i= 8; asc = false;//sort by Rating desc
            break;
            default:
            i = 1; asc = true; //sort by Name desc     
            break;
             
        }
        spread.suspendPaint();
        //change the sorting
        spread.getSheetFromName("DataSource").sortRange(1, 0, 15, 9, true, [ 
        {index:i, ascending:asc} 
        ]);
        spread.resumePaint();
    }
});

产品列表

产品列表是产品目录中最重要的部分。这包含产品列表及其有关价格、类别、名称和图像的各自信息。

如前所述,我们将使用 RANGEBLOCKSPARKLINE 创建产品列表。
更改单元格宽度 (B6:D10) 以适应上述模板 (Template!A2:E7) 后,在这些单元格上设置如下公式:

=RANGEBLOCKSPARKLINE(Template!A2:E7,OBJECT(tbProducts[#Headers],INDEX(tbProducts[#Data],index,SEQUENCE(COUNTA(tbProducts[#Headers]),1))))

在这种情况下,索引将是项目的编号。例如,在 B6 上,索引将为 1。

如果这里只使用 javascript实现,可以用以下代码:

//first product
sheet.setFormula(5, 1, "=RANGEBLOCKSPARKLINE(Template!A2:E7,OBJECT(tbProducts[#Headers],INDEX(tbProducts[#Data],1,SEQUENCE(COUNTA(tbProducts[#Headers]),1))))");

对其他单元格重复相同的策略。

选定项目

当用户使用SelectionChanged事件点击另一个item时,出现在目录右侧的item发生变化,选中item右端的“加号”背景;它变成绿色。

执行此操作的 JavaScript 代码如下:

// select items
var row = 5, col =1;
catalogSheet.bind(GC.Spread.Sheets.Events.SelectionChanged, function (sender, args) {
const sheet = args.sheet;
const newRow = args.newSelections[0].row;
const newCol = args.newSelections[0].col;
if ((newRow <5 || newRow > 9)
   || (newCol < 1 || newCol > 3))
return;

//change the item appearing on the right panel
var position = 3*(newRow - 5) + newCol;
sheet.suspendPaint();
sheet.setFormula(5, 5, "=RANGEBLOCKSPARKLINE(Template!H9:O21,OBJECT(tbProducts[#Headers],INDEX(tbProducts[#Data]," + position + ",SEQUENCE(COUNTA(tbProducts[#Headers]),1))))");

// change the color of the "plus" sign of the selected item
sheet.getCell(row, col).backColor("#dddddd");
sheet.getCell(newRow, newCol).backColor("#53b175");

sheet.resumePaint();
row = newRow;
col = newCol;

添加到购物车按钮

添加到购物车按钮是一个简单的按钮,显示可以使用超链接功能调用最终将商品添加到购物车的事件或调用其他一些电子商务支付功能。该按钮显示该项目已添加到购物车的警报。

想了解更多?请参考以下资源:
了解更多纯前端表格在线demo示例 :https://demo.grapecity.com.cn/spreadjs/gc-sjs-samples/index.html
纯前端表格应用场景:https://www.grapecity.com.cn/developer/spreadjs#scenarios
移动端示例(可扫码体验):http://demo.grapecity.com.cn/spreadjs/mobilesampl

与电子表格也能做购物车?简单三步就能实现相似的内容:

电子表格也能做购物车?简单三步就能实现

在我们的项目当中,经常需要添加一些选择界面,让用户直观地进行交互,比如耗材、办公用品、设计稿或者其它可以选择的内容。 在线商城的商品目录和购物车无疑是一种大家都很熟悉的交互方式,但是在实际开发中,我们可能会遇到以下几个问题: 怎么及时响应产品的需求,快速实现功能上线? 怎样实现灵活变更模板,把数据、

实用教程丨如何将实时数据显示在前端电子表格中(一)

本文由葡萄城技术团队于博客园原创并首发转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 数据(包括股票、天气和体育比分)在不断更新为新信息时最为有用。比较通用的 JavaScript 电子表格组件,可以轻松地使用、显示并通过数据绑定提供实时数据更新。

实用教程丨如何将实时数据显示在前端电子表格中(二)

本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 在如何将实时数据显示在前端电子表格中(一)一文中,我们讲述了如何通过WebSocket从Finnhub.IO获取实时数据,那么本文重点讲述如何使用基本的 Spre

如何在前端应用中合并多个 Excel 工作簿

本文由葡萄城技术团队于博客园原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言|问题背景 SpreadJS是纯前端的电子表格控件,可以轻松加载 Excel 工作簿中的数据并将它们呈现在前端浏览器应用的网页上。 在某些情况下,您可能需要将来自多

Svelte框架结合SpreadJS实现表格协同文档

本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 SpreadJS是葡萄城结合 40 余年专业控件技术和在电子表格应用领域的经验而推出的纯前端表格控件。作为一个类Excel控件,SpreadJS如何实现当前比较流行的表

使用FastReport报表动态更新人员签名图片

在一些报表模块中,需要我们根据用户操作的名称,来动态根据人员姓名,更新报表的签名图片,也就是电子手写签名效果,本篇随笔介绍一下使用FastReport报表动态更新人员签名图片。

电子钱包小程序:技术与便捷的完美融合

随着移动支付的快速普及,支付宝、微信支付等电子钱包 App 成为了我们日常生活中不可或缺的一部分,手机充值、生活缴费、便利店付款等场景都离开不了。但是也逐步发现,电子钱包 App 们为了提供更加便捷的支付体验和功能,他们有一个共性就是都在往小程序线路发展。

Vue3学习(二十四)- 文档页面功能开发

写在前面 这部分真的感觉超级难,其实也不能说难,主要是真的想不到这个思路应该这么做,或者说他好厉害,他怎么知道该这么设计实现。 说下难点吧,我觉得后天逻辑还好,主要是前端部分真的需要点花点时间来思考,比如布局、交互设计的实现等等。 文档页面功能开发 1、任务拆解 增加文档页面,首页点击电子书时,跳转

Part-DB 配置流程

介绍 Part-DB是一个开源的器件管理工具,博主用于管理个人的电子器材,最近捣鼓了一下这个工具,由于手头还有一块闲置的赛昉·星光2的开发板,所以我打算一起拿来捣鼓一下,如果不成功,就用树莓派(生气) 1.安装 大家可以直接按照 官方安装指导 来安装即可,我也是参考官方的。 (1)安装docke

我为什么选择Wiki.js记笔记?

很长一段时间里,我都被困扰着,感觉陷入了笔记的泥潭,而积累的如此多的笔记也没有形成我自己的知识体系。 之前的记笔记方式 笔记的来源 微信公众号 技术博客 纸质书籍 官网文档 PDF 自己的零散想法 网页 之前的笔记软件 有好几个: 为知笔记 浏览器书签 MarkDown 文档 Calibre 电子书