`

使用Bootstrap与ShieldUI(转载)

 
阅读更多

今天,让我们来创建一个基于Bootstrap框架的仪表板(dashboard)应用程序。

Bootstrap是一套非常流行的前端框架,它旨在帮助开发者解决开发过程中的一些主要问题,例如元素的定位、应用的响应式能力以及在多种设备上进行输出。这个仪表板应用程序的元素包括一系列的可视化图形,它们各自代表了各种关键性能指标,例如预算、访问量及其它一些关键指标。

如果你想要实现的应用不仅仅能够简单地表现数据,还能以一种具有竞争力及优秀的表现形式进行呈现,则需要通过以下两个步骤进行实现。

首先,我们需要以小部件(widget)的形式呈现所有底层的数据,并提供一种额外的交互层次,例如提示(tooktip)、选项(selection)及鼠标放置(hover)效果。某些数据还可以使用经过编码的QR码形式进行呈现,它所适用的场合包括:展现一个很长的超链接,或是对某个特定的条目需要显示额外的细节信息。

可以使用ShieldUI这套web开发框架实现这一任务,这套框架提供了我们所需的各种小部件。我们将使用这套框架中的jQuery小部件,例如图表(chart)、网格(grid)、QR码以及评分部件,这些部件提供了非常优秀的客户端性能以及影响式的能力。

其次,我们需要确保将仪表板中的所有元素都呈现在页面中相互分离的各个区域。不仅如此,我们还需要确保所有这些区域在定位上都是相连的,并且在任何设备上都能够良好地进行呈现。一般来说,实现这个任务是非常复杂的。但幸运的是,Bootstrap框架能够大大地简化这一任务,只需正确地使用某些CSS类便可实现了。

你可以在这里找到该示例的完整代码下载。完成的应用程序界面请见下图:

(单击图片以放大)

应用程序结构

一个完整的仪表板或许会包括无数种小部件与页面布局的组合,我在这里选择的是最常见的组合。从布局的角度来说,该应用的页面共分为五个响应式的面板,这些面板的定位是由Bootstrap的布局系统所决定的。在较小的屏幕尺寸上,每个区域都会充分占据所有可用的空间。

该应用中所用到的小部件包括jQuery QR码、jQuery评分控件、两种不同布局的图形控件、一个jQuery图表插件,一个环形的进度条,以及一个网格控件。在开发的角度上,我创建了一个简单的html文件,将所有必需的代码都放在该文件中。

必需的资源文件

该应用程序的head区域引用了所需的全部资源文件,包括Bootstrap的CDN资源,它会负责加载所有必需的CSS类,以及jQuery和ShieldUI的脚本文件引用。Head区域的最后是一段JSON文件的引用,它包含了网格组件所需的原始数据。

以下是完整的head区域的内容:

<head>
    <title>Bootstrap Dashboard</title>

    <!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href=" />
    <link rel="stylesheet" type="text/css" href=" />
    <link rel="stylesheet" type="text/css" href=" />
    <script type="text/javascript" src="></script>
    <script type="text/javascript" src="></script>
    <script src="gridData.js"></script>
</head>

当所有的资源文件都准备好之后,我们就可以着手打造该页面了。我会依次讲解该页面中所有面板的功能。

用户个人信息

该区域将使用一个标准的Bootstrap面板以呈现基本的用户信息细节:包括用户/雇员名称、所属部门以及职位。在该面板的注脚部分包含了一个QR码,其中包含了额外的用户信息,也可对它进行扩展,以经过编码的URL形式表示完整的用户信息或其它相关数据的对应页面。

这块区域是由以下代码所生成的:

<div class="col-sm-6 col-lg-3">
                <div class="panel panel-primary">
                    <div class="panel-heading">
                        <h4 class="text-center">User Profile<span class="glyphicon glyphicon-user 
pull-right"></span></h4>
                    </div>
                    <div class="panel-body text-center">
                        <p class="lead">
                            <strong>Mike Smith</strong>
                        </p>
                    </div>
                    <ul class="list-group list-group-flush">
                        <li class="list-group-item liitem"><strong>Position:</strong>
                            <span class="pull-right">Developer</span>
                        </li>
                        <li class="list-group-item liitem"><strong>Company:</strong>
                            <span class="pull-right">EasyTech</span>
                        </li>
                        <li class="list-group-item liitem"><strong>Department:</strong>
                            <span class="pull-right">Dataviz</span>
                        </li>
                        <li class="list-group-item liitem"><strong>Project Duration:</strong>
                            <span class="pull-right">12 months</span>
                        </li>
                    </ul>
                    <div class="panel-footer">
                        <div class="row">
                            <div class="col-xs-4 col-sm-3 col-md-4 col-lg-2">
                            </div>
                            <div class="col-xs-2 col-sm-4 col-md-4 col-lg-4" id="qr1">
                            </div>
                            <div class="col-xs-6 col-sm-5 col-md-4 col-lg-6">
                            </div>
                        </div>
                    </div>
                </div>
            </div>

这个面板的注脚部分包含了一个id为“qr1”的div,在页面进行加载时,QR码会在该div中进行初始化。其它所有html元素都应用了标准的Bootstrap类,这些类会负责处理与定位和响应式编码,这就为开发者解决了大量的问题与开发过程中可能遇到的挑战。

用户细节

页面中的这部分内容与前文所述的用户信息非常相似,但它所列举的是用户的个人技能信息。每一项个人技能的右方是一个评分组件,描述了每一项内容的个人专业程度。将鼠标移至该评分元素上,并单击选择,就可以对每一项评分的值进行变更。

与第一个面板相同,注脚部分同样包含了一个QR码,包含了经过编码的额外信息,例如某个独立的页面或Url。

这一区域是由以下代码所创建的:

<div class="panel panel-primary">
                    <div class="panel-heading">
                        <h4 class="text-center">Skills<span class="glyphicon glyphicon-saved
 pull-right"></span></h4>
                    </div>
                    <div class="panel-body text-center">
                        <p class="lead">
                            <strong>Technology Overview</strong>
                        </p>
                    </div>
                    <ul class="list-group list-group-flush">
                        <li class="list-group-item liitem">
                            <div class="skillLineDefault">
                                <div class="skill pull-left text-center">HTML5</div>
                                <div class="rating" id="rate1"></div>
                            </div>
                        </li>
                        <li class="list-group-item liitem">
                            <div class="skillLineDefault">
                                <div class="skill pull-left text-center">CSS</div>
                                <div class="rating" id="rate2"></div>
                            </div>
                        </li>
                        <li class="list-group-item liitem">
                            <div class="skillLineDefault">
                                <div class="skill pull-left text-center">jQuery</div>
                                <div class="rating" id="rate3"></div>
                            </div>
                        </li>
                        <li class="list-group-item liitem">
                            <div class="skillLineDefault">
                                <div class="skill pull-left text-center">C#</div>
                                <div class="rating" id="rate4"></div>
                            </div>
                        </li>
                    </ul>
                    <div class="panel-footer">
                        <div class="row">
                            <div class="col-xs-4 col-sm-3 col-md-4 col-lg-2">
                            </div>
                            <div class="col-xs-2 col-sm-4 col-md-4 col-lg-4" id="qr2">
                            </div>
                            <div class="col-xs-6 col-sm-5 col-md-4 col-lg-6">
                            </div>
                        </div>
                    </div>
                </div>

包括QR码与评分控件在内的所有小部件元素,都是由一个包含了唯一的ID的简单的div元素进行展现的。页面在运行时会通过该ID创建一个相应的小部件。

季度业绩区域

仪表板中的这一区域将通过一个jQuery图表插件展现该季度的数据。这段示例中包括了两个序列的数据,可用以绘制个人、员工或公司数据。可以对序列的数量进行调整,以适应对更多数据展现的需要。不过应尽可能将序列的数量控制在最小范围内,以确保良好的阅读体验。

这一区域是由以下代码所创建的:

<div class="col-sm-12 col-md-12 col-lg-6">
                <div class="panel panel-primary" style="height: 491px;">
                    <div class="panel-heading">
                        <h4 class="text-center">Quarterly Performance<span 
class="glyphicon glyphicon-screenshot pull-right"></span></h4>
                    </div>
                    <div id="chart1">
                    </div>
                </div>
            </div>

这个面板中仅包含了两个区域的内容,因此对应的html代码也十分简单易懂。图表小部件在运行时加载数据,它的整体结构是由以下JavaScript代码专用所定义的:

function initializeChart1() {
            var data1 = getRandomArray(20, 1, 50);
            var data2 = getRandomArray(20, 20, 70);
            $("#chart1").shieldChart({
                theme: "light",
                exportOptions: {
                    image: false,
                    print: false
                },
                primaryHeader: {
                    text: "Performance Data"
                },
                tooltipSettings: {
                    axisMarkers: {
                        enabled: true,
                        mode: 'x',
                        width: 2,
                        zIndex: 3,
                        drawColor: "white"
                    }
                },
                dataSeries: [
                    {
                        seriesType: 'bar',
                        collectionAlias: 'Achieved',
                        data: data1
                    },
                    {
                        seriesType: 'line',
                        collectionAlias: 'Target',
                        data: data2
                    }
                ]
            });
        }

出于本文的篇幅考虑,这段示例使用的是随机数据,但也可对其进行扩展,从其它任何渠道获取数据。代码中的dataSeries属性用于描述该图表中所呈现的两种类型的序列,即线状图与饼图。

整体业绩区域

该区域也是一个包含了可视化数据的面板,其中使用了一个进度条控件,可表现业绩数据,或是某个任务或目标的完成进度百分比。它为用户提供了一种查看某个目标能否及时完成的快速的可视化参考。

通过对这段代码进行简单的扩展,可以使用不同的颜色集,例如以绿色表示目标达成,或是以红色表示进度落后。

全公司业绩区域

这个区域的代码相比其它几个区域有所增加,因此可以参考本文所附带的示例,以获取完整的内容。从结构的角度来说,该面板区域共包含了三个子区域。

  • 文本子区域可以让用户快速地了解该面板对应了哪种可视化的数据,在本例中它表示的是预算的趋势。
  • 第二个子区域中包含了三个图表及简单的布局,即以数据曲线所表现的趋势数据。
  • 最后一个子区域中是一个高度可见的文本区域,它直接反应了每一行所对应的数值。

完整的公司数据区域

该区域包含了一个标准的网格表,以多个行的形式表现数据。可以在该网格中展现公司数据,或用以展现某个公司的全体员工列表。该组件内置了对排序及分页的支持。

(单击图片以放大)

该区域所对应的html部分代码如下所示:

<div class="row">
            <div class="col-sm-12 col-md-12 col-lg-12">
                <div class="panel panel-primary" style="height: 472px; min-width: 597px;">
                    <div class="panel-heading">
                        <h4 class="text-center">Full Company Data<span class="glyphicon 
glyphicon-eye-open pull-right"></span></h4>
                    </div>
                    <div id="grid1" style="max-height: 393px;">
                    </div>
                </div>
            </div>
        </div>

这段代码包含了面板的声明,包括header与body。除此之外,其中还包含了一个id为“grid1”的div,它将在运行时呈现整个表格的布局。

初始化小部件

每个小部件都与一个JavaScript函数所对应,后者会负责进行初始化工作。举例来说,前文中所提到的网格小部件是由以下函数进行初始化的:

function initializeGrid1() {
            $("#grid1").shieldGrid({
                dataSource: {
                    data: gridData
                },
                sorting: {
                    multiple: false
                },
                paging: {
                    pageSize: 8,
                    pageLinksCount: 10
                },
                selection: {
                    type: "row",
                    multiple: true,
                    toggle: false
                },
                columns: [
                    { field: "id", title: "ID" },
                    { field: "name", title: "Person Name" },
                    { field: "company", title: "Company Name" },
                    { field: "email", title: "Email Address" }
                ]
            });
        }

为了本文的简洁性,我没有列举出完整的代码,但逻辑是相同的:即每个这样的函数都将对一个独立的小部件进行初始化,而每个小部件会进一步进行可视化与交互的相关操作。

至此,页面的装配工作以及大部分的元素已准备就绪。欢迎读者下载示例的代码,在本机进行尝试,或进一步探索每个区域、元素或小部件的功能。

分享到:
评论

相关推荐

    使用bootstrap技术制作网页,应用bootstrap卡片有几种排版方式?

    使用bootstrap技术制作网页,应用bootstrap卡片有几种排版方式? 使用bootstrap技术制作网页,应用bootstrap卡片有几种排版方式? 使用bootstrap技术制作网页,应用bootstrap卡片有几种排版方式? 使用bootstrap技术...

    bootstrapValidator.js验证在bootstrap4.0使用

    1.bootstrap使用4.0 2.customValidator.css Bootstrap v4.0.0-beta (https://getbootstrap.com) jQuery v3.2.1

    使用bootstrap实现多选下拉框

    以下是如何使用Bootstrap来创建这样一个功能的详细步骤。 首先,确保你已经在你的项目中引入了Bootstrap的相关资源。这通常包括CSS和JS文件。例如,你可以通过CDN链接或者将`bootstrap.min.css`和`bootstrap.min.js...

    Bootstrap进度条与AJAX后端数据传递结合使用实例详解

    Bootstrap进度条与AJAX后端数据传递结合使用实例详解 Bootstrap进度条与AJAX后端数据传递结合使用是Web开发中常见的技术结合,通过Bootstrap进度条展示数据加载的进度,提高用户体验,AJAX技术则可以实现在页面不...

    bootstrap bootstrap-3.3.7

    这个里面 包含整个bootstrap源程序 你所需要的都在了、里面.Bootstrap,来自 Twitter,是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的,它...每个部分都包含了与该主题相关的简单有用的实例。

    ASP.NET MVC使用Bootstrap系列

    ASP.NET MVC是一个强大的框架,用于构建...总的来说,ASP.NET MVC与Bootstrap的结合提供了强大的Web开发工具,使开发者能够构建既美观又高效的Web应用。通过实践和理解这一系列的内容,你将在.NET开发领域更上一层楼。

    使用bootstrap做的登陆、注册、忘记密码页面

    尽管Bootstrap提供了丰富的预设样式,但开发者仍可按需进行自定义,通过覆盖默认样式或者使用Sass版本的Bootstrap进行更深层次的定制。同时,可以与其他JavaScript库如jQuery或AngularJS结合使用,增强页面的交互性...

    使用Bootstrap实现分页,并且当页码过多时使用省略号

    使用Bootstrap实现分页,并且当页码过多时使用省略号,这篇文章有样式的简单演示:https://blog.csdn.net/u013025627/article/details/50485327 样式只是自己的简单样式,不同的项目有不同的样式风格,只是提供分页...

    BootStrap在jsp中的使用

    新建一个index.jsp文件,引入所使用的css.js和bootstrap的: 注意这里的要缓存&lt;!DOCTYPE html&gt; &lt;html lang=zh-CN&gt; 第三步: 在body中载入需要的组件: 运行在tomcat服务器上: 效果如图: 第四步:...

    bootstrap实现登录页面

    Bootstrap一经推出后颇受欢迎,一直是GitHub上的热门开源项目,包括NASA的MSNBC(微软全国广播公司)的Breaking News都使用了该项目。 国内一些移动开发者较为熟悉的框架,如WeX5前端开源框架等,也是基于Bootstrap...

    Bootstrap-Offcanvas, 使用 Bootstrap 构建的Offcanvas菜单.zip

    Bootstrap-Offcanvas, 使用 Bootstrap 构建的Offcanvas菜单 Bootstrap-Offcanvas 超简单,易于使用的画布导航菜单 Bootstrap 。它使用 Bootstrap 类和标记来创建一个不只看起来很好的画布菜单。 但工作正常。在这里...

    Bootstrap5 图标库 bootstrap-icons

    Bootstrap5图标库bootstrap-icons大大简化了前端开发者在项目中添加图标的流程,减少了跨平台兼容性问题,并确保了与Bootstrap5风格的一致性,是构建现代网页应用时不可或缺的工具。同时,由于其开源性质,开发者还...

    bootstrapTable使用示例.rar

    本示例压缩包包含了一系列关于BootstrapTable的使用示例,包括父子表、treegrid(树形表格)以及与KnockoutJS的集成,这些都是在实际开发中非常实用的场景。 1. **BootstrapTable基本使用** BootstrapTable的核心...

    bootstrap-switch使用

    网上的bootstrap-switch使用不便,因此整理了我在项目上所使用的开关控件,结合bootstrap框架使用

    简约Bootstrap个人简历html模板

    而“fonts”文件夹通常包含 Glyphicons 字体图标集,这些图标在Bootstrap中被广泛使用,为网站增添视觉元素。 “js”目录可能包含模板特定的JavaScript脚本,用于实现一些自定义交互效果或功能,比如滚动动画、计时...

    bootstrap文件及bootstrap图标大全

    Bootstrap图标的使用方法通常是通过在元素上添加特定的CSS类来实现。例如,要显示一个“home”图标,可以在HTML元素中加入`&lt;i class="glyphicon glyphicon-home"&gt;&lt;/i&gt;`。Font Awesome的图标则是通过类名`fa fa-home`...

    本科毕业设计-基于Bootstrap-Flask开发的学员管理系统,数据库使用SQLLite、采用前后端分离技术

    前端页面使用Bootstrap-Flask编写,基于Jinja2模板引擎语法 使用Flask-WTF进行表单交互 使用SQLAlchemy进行数据库连接与操作 数据库使用Sqlite3 基于BootstrapFlask框架Demo进行开发,实现了登录、身份认证、密码...

    基于Angular的Bootstrap4组件NGBootstrap

    NG Bootstrap提供了与Angular无缝集成的Bootstrap组件,这些组件原生支持Angular的特性,如模板驱动和响应式设计,使得在Angular项目中使用Bootstrap变得更加简单。 **NG Bootstrap的主要组件及特点** 1. **模态框...

    Bootstrap自动适应PC、平板、手机的Bootstrap栅格系统

    在Bootstrap中,栅格系统使用`.row`类定义一行,并使用`.col-*-*`类来设置列的宽度。这里的`*`可以是`xs`(额外小屏,通常是手机),`sm`(小屏,如平板),`md`(中屏,桌面显示器)或`lg`(大屏,宽屏显示器)。每个`.col-...

Global site tag (gtag.js) - Google Analytics