纪念基于JavaScript 实现的后台桌面 UI 设计

简介: 纪念基于JavaScript 实现的后台桌面 UI 设计

前言

    2000年以前一直从事的是 C/S 应用程序的设计开发,UI自然也是重要的组成部分,曾痴迷于Mac OS 的界面,也曾被微软推出 Windows XP 时风格的变化所惊艳。记得开发的一个药品管理项目,因自己不满意 Windows  NT 的风格,擅自做主使用 Windows 底层API 修改窗口系统风格为Mac,以致于后来严重影响了交付时间。现在感觉,设计再优秀的界面也有审美疲劳的一天,也有众口难调的一面,因为时代需要进步,保持新鲜感是我们不断改进的动力。

C/S 到 B/S

   第一次承接 B/S 的项目很突然,了解了业务需求后,甲方对技术也提出了需求,要求使用 ASP 技术,当时没有任何的开发经验,大脑一片空白,于是买了一本叫《HTML 从入门到精通》的书开始学习起来。

   由于受C/S开发界面的设计模式影响根深蒂固,开发WEB页面的UI也走了不少弯路,比如总试图使用全部的绝对定位,寻找丰富的控件库、存储状态值的显示等,更别提使用CSS了,基本都是使用 style 属性进行赋值。

ASP Builder 的诞生

  本人非常推崇与着迷 Borland Delphi 的 RAD 设计理念,因此当基本了解了 ASP 工作原理的时候,萌生开发第一个自己的开发工具 ASP Builder 的想法诞生了,通过设计数据表,快速生成目标服务器脚本、网页UI及客户端脚本。正式运行后,开发效率的确取得了显著的提升,但这还是没有脱离C/S的“阴影”。不过现在纵观 小程序、VUE 的一些模式,仍然能够找到曾经 ASP 的身影,只能说万变不离其宗吧,设计模式和业务逻辑更是我们要关心的。

关于 Craneoffice.net

  自从从 ASP 到 ASP.NET ,那一系列的改变让我对 .net 的领域研究从此一发不可收拾。Craneoffice 最早是与合伙人创立的工作组的名称,是研发新技术产品的部门,后期虽经历数次公司的变迁,Craneoffice一直未变,如今因为业务需要,最终成立了自己的软件工作室,谐音“科润”,也算圆了自己的梦吧。

  如今 Craneoffice.net 已经成为了公司核心框架,当然,你也可理解为祖传代码。其中,JavaScript + Css 一直是做为 WEB UI 的一个基础的存在,当然这里有感情的成份、需求的要求和一种开发习惯。

开发环境配置

  操作系统:Windows DataCenter Server 2019

  数据库:Microsoft SQL Server 2016

  架构及其它: .net 4.7.1  / VS2019  Asp.net   C#   / JavaScript Jquery  Css

  OFFICE:  2016

后台界面的 UI 区域要素

  后台系统一般包括登录界面和办公界面(即后台)两大部分,办公界面按单屏幕划分,比较主流的设计包括如下几个部分:

  (1)左上角 Logo 及系统的标题

  (2)右上角登录提示信息或常用菜单

  (3)左侧功能菜单(可能根据权限的控制进行不同的显示)

  (4)右侧业务操作区(一系列的增、删、改、查、统计分析等)

  (5)底部版权信息栏

     简易的布局如下图所示:

桌面系统的想法和设计

   我们原来设计的登录后的首页,一般会显示一个简单的欢迎页面,或添加一些提醒信息、任务信息等,且功能、样式和背景图基本是固定模式。因此,想设计一款类似操作系统桌面的,具有通用性又兼具个性化设置的功能,实用且不过于复杂。下面我们将讲解一下桌面系统的功能设计:

搜索引擎

  该设计是为了实现系统平台所提供的文档、功能、业务数据、多媒体信息等的搜索,以简化操作深度,比如我们有一个培训视频模块,我们不但可以根据关键字,按照功能菜单标题、视频内容标题、作者等进行搜索,还能够按照视频中的讲解内容进行搜索并定位相关片断,以供使用者参考。举例搜索如下界面:

这是一个深色模式的呈现,输入“杰克逊” 关键字,点击搜索后,结果页分三个色块区域:

1、黑色标题为统计结果信息和关闭功能;

2、中间为搜索内容区域,内容包括图标、标题、打开功能链接和添加到我的快捷访问;

     2.1 图标:可根据内容进行不同类型的显示,这里我们看到的是一个播放器图标,则代表是一              个视频结果内容;

     2.2 标题:我们看到标题中也并不包含“杰克逊”的关键字样,这证明视频内容可能包含该关键字

     2.3 打开功能、文章或快照链接:这里我们是将打开视频预览的链接;

     2.4 添加到我的快捷访问:类似WINDOWS里的快捷方式,再次返回桌面时,会有快捷访问功              能直接进行定位。

     2.5 导航条:使用传统的上下翻页链接实现,色块采用与主内容区渐变过渡的效果;

           有关渐变的关键的CSS代码如下:

.q_dbgrid_nav {
    color: White;
    background: linear-gradient(rgba(50,54,61,0.7),rgba(50,54,61,0.1));
    text-align: center;
    margin-top: -20px;
    padding: 10px;
}

     打开目标页面如下图:

实现视频内容搜索,界面提供关键字上下文片断的 “猜你想听” 的推荐。下方显示视频的原文地址,这里我们是选择存储在腾讯云上。最下方是视频播放器,这是我们改造后的腾讯超级播放器后的效果,从视频中我们可以看到关键字讲解词。

导航面板

登录默认的桌面或关闭搜索引擎结果页面,系统会提供一个导航面板,如下图:

导航面板主要包括:

1、产品的版本信息。

2、已支持或购买的产品信息,以图标的形式体现。

3、其它功能链接:如开始菜单、快捷访问、如何使用桌面系统的功能链接,还设置了一个“下次           不再显示”的个性化功能。

快捷访问

如图我们点击刚才在搜索引擎里添加的功能,显示如下图:

可以看到培训链接已经添加快捷访问的 DIV 容器里,该容器的左上角为关闭按钮加功能标题的设计,窗口内部为 flex 布局,显示为图标及标题的列表。另外,在弹出该容器时,采用了其它背景对象虚化的滤镜技术,关键 JavaScript 代码如下:

function blurDesktop(v) {
             document.getElementById("searchbox").style.filter = 'blur('+v+'px)';
             document.getElementById("queryRsultBox").style.filter = 'blur(' + v + 'px)';
}

通过blur滤镜控制模糊程度,另外我们可以改进推送要模糊的元素到数组里进行遍历的方法,这里的代码仅供参考。

二级导航

点击图标设计如下图:

左上角显示返回链接,图标复制主面板HTML片断,链接显示则复制开始菜单的HTML片断进行显示。关键 JavaScript 代码如下:

//遍历开始菜单里的list项目
for (var j = 0; j < lilist.length; j++) {
  if (lilist[j].getElementsByTagName('a')[0] == undefined) { continue; }
     var aobject = lilist[j].getElementsByTagName('a')[0].cloneNode(true);  //克隆HTML片段
     aobject.style.color = "black";
     //添加到二级控制面板链接列表
     a_list.appendChild(aobject);
     a_list.appendChild(document.createElement('br'));
     a_list.appendChild(document.createElement('br'));
}

小组件及其它

  小组件是一组提供实用且个性化设置的功能程序,如下图:

分左右两部分,右边部分为“步步高”式设计,依次为设置桌面壁纸、显示时钟、附件小程序、系统设置,下面主要讲解一下这几组功能:

  设置桌面壁纸

  该功能可实现更换桌面背景,并通过AJAX技术调用服务端静态方法保存到个人配置表中。显示如下图:

如图设置容器左上解为关闭按钮及标题,内部嵌入DIV 加 FLEX 布局,列表显示为服务器端显示输出,这些默认的图片都是本人比较偏好的,所以感觉自己有点偏执与强势,如图我们选择 “春枝” 主题,并点设置,稍候更新如下图:

这是自己一段封装的调用服务器静态WEB方法的 JavaScript 方法,仅供参考:

//参数serviceUrl为方法所在URL,为空则代表本页
//参数serverFuncName 为服务端WEB静态方法名称
//参数params 为JSON 参数列表字串形式
//参数 resultFuncName,srcobj,1为调用返回时调用的客户端方法,2为指定一个目标控件
//该方法用于调用服务器端方法后的客户端处理,首先返回调用成功的状态,参数2为服务器返回的对象数据
//参3为传递的目标控件值
function callServerFunction(serviceUrl,serverFuncName,params,resultFuncName,srcobj) {
   $.ajax({
    //要用post方式   
    type: "Post",
   //方法所在页面和方法名   
    url: (serviceUrl == "" ? (window.location.protocol + "//" + window.location.host + window.location.pathname) : serviceUrl) + "/" + serverFuncName,
    contentType: "application/json; charset=utf-8",
    data: params,
    dataType: "json",
    success: function (data) {
         //返回的数据用data.d获取内容   
         if (resultFuncName != null) {
             resultFuncName("success", data.d,srcobj);
          }
    },
    error: function (err) {
          if (resultFuncName != null) {
             resultFuncName("error", err);
          }
    }
   });
}
小时钟

这个功能很好理解,每点击一次小时钟的图标,可以进行显示和不显示的切换,同样这也是通过调用服务器方法实现的。

附件小程序

这个可以后续进行插件更新,目前提供了两个实用的小程序,计算器、日历与任务。

点击附件小程序图标如下图:

容器的设计模式具有通用性,和设置壁纸、快捷访问功能类似,如图的两款功能均用 JavaScript / CSS 实现。

计算器界面设计

日历与任务

日历也是我们经常用到的功能,而且可以设置任务提醒功能,这在系统登录或访问应用时都会在屏幕左上角区域用任务图标进行提示。该功能显示如下图:

界面的左侧显示日历,右侧显示任务设置面板,点击日历即可赋值在开始时间,再次点击将赋值到结束时间里,同时我们还可以设置提前提醒的时间量,最后点击保存设置即可完成任务的设置。该容器的标题部分还可以操作两个功能:我创建的任务、任务提醒。

比如我创建的任务,界面如下所示:

系统设置

点击系统设置图标,将唤起开始菜单里的系统设置功能,开始菜单也是用 JavaScript 和 CSS 编写的功能,类似手机的操作系统界面设计,可以在PC端显示,更适用于移动端。系统设置的菜单如下图所示:

设计风格采用相对简洁的形式,用图标分组相应的功能,菜单栏以横线分隔,设置或选中的项目以绿色小对勾的图标进行显示。

天气小组件

天气小组件,显示了今天和明天的天气情况,简单实用,设计布局在左下角布局。该功能是使用 JavaScript 抓取的第三方天气信息,提取的时候会有加载提示,如果我们不需要显示该组件,还可以通过系统设置选择关闭显示。

任务栏

任务栏沿袭了区域要素的一些设计,左上角显示的是微信登录成功后的头像,和相关的任务图标。右上角显示一些欢迎信息和常用功能菜单,如下图所示:

在图中我们用鼠标移动贴近左侧区域20像素内,自动弹出显示功能菜单,导航到具体的业务。

某些任务图标是动态显示的,如图中红色的铃铛图标表示有任务提醒、绿色的播放器图标表示本页面有帮助视频可供学习。另外还有一些固定的任务图标,比如黄色的收藏图标。

如下图这是浅色模式下的任务提醒界面,点击任务栏红色铃铛图标即可显示详细任务信息。

点击绿色播放图标,将显示帮助学习视频界面,同时结合 Ajax技术实现点赞、评论和收藏功能,如下图:

将鼠标移动任务栏的右上角,将自动弹出常用菜单,包括我的桌面、修改个人信息、我的消息、操作指南、手机认证、实名认证、修改账户信息、联系客服等功能,该菜单的弹出效果使用动态螺旋式效果,视频效果如下演示:

3dmenu

开始菜单

开始菜单是结合包括右上角的常用功能菜单和左侧的业务功能菜单的总集合。界面采用类似移动端APP图标的形式呈现,如下图:

其中业务功能菜单被集成到开始菜单里,点击则进入下一级菜单,风格与系统设置类似。

操作界面设计

操作平台的界面,我们会在系统设置里设置几种风格,比如经典、动感,后续还可以继续添加“皮肤”,原理就是编写不同的CSS文件和对应的深、浅色模式的附加CSS文件,具体可参考我的文章 《CSS控制界面风格及深浅色模式的一些思路》 ,设置方式由JavaScript进行开始菜单的选择呈现,如下图我们显示的是经典且深色的模式:

下图是提交的时候一段警告的提示框,关于提示框的设计也是基于Layer组件的纯JavaScript改造,详情可参考我的文章《改造 layer 弹层移动版组件》

查询界面设计

查询界面的设计一般包括条件输入控制面板(QueryPanel)和查询结果网格(DataGrid),如下图举例:

查询结果的设计风格没有采用网格线,鼠标移动到某条记录会深色背景显示,底部的导航条的背景色使用渐变色至完全透明。

写在结尾

这版桌面系统的设计,从个人角度讲,倾注了不少心血,后续还想引入主题风格,如下图的小清新风格,使菜单变得更加透明,去掉任务栏背景色等。

由于种种原因,对于产品的界面改造可能告一段落,颇有些心灰意冷之感,也许是太疲惫了。多年来凭借自己学习过美术的一些知识,一直兼顾着UI设计,难免由于个人的偏执而无法听取别人的意见,这也是我开博写第一篇文章的原因,总之,能设计出令人满意的作品、得到别人的认可是最大的安慰。

学习过不少语言,有些已经淡忘不再使用,但JavaScript对我来说,是一门神奇又灵活的脚本语言,多年来从未放弃。个人认为其写容易,写好不容易,很考验你的技术处理能力。

可能自己相对比较保守吧,在此纪念一下自己的完结之作,和对 JavaScript 的喜爱。不管有多大争议,我们还要继续前行,技术日新月异,热爱永恒不变。


相关文章
|
29天前
|
前端开发 JavaScript 关系型数据库
前端的全栈之路:基于 Vue3 + Nest.js 全栈开发的后台应用
这篇文章介绍了一个名为Vue3Admin的全栈后台应用,前端基于SoybeanAdmin二次开发,后端基于Nest.js。主要使用了Vue3.5、AntDesignVue、UnoCSS、Pinia等前端技术栈,以及Nest.js、PostgreSQL、Prisma等后端技术栈。文章详细描述了系统的功能设计,包括动态国际化语言配置、登录用户操作日志、用户和角色权限映射、动态路由菜单、消息公告发布及前端业务功能等。同时,也提供了项目运行所需的环境和依赖,以及如何拉取代码、安装依赖和启动项目的方法。最后,文章展示了项目的演示图,并对项目进行了总结,指出项目未经严格测试,仅供学习交流使用。
前端的全栈之路:基于 Vue3 + Nest.js 全栈开发的后台应用
|
6天前
|
前端开发 JavaScript UED
"前端小技巧大揭秘:JS如何将后台时间戳秒变亲切小时前、分钟前,让用户秒懂,提升互动体验!"
【10月更文挑战第23天】在Web开发中,将后台返回的时间戳转换为“小时前”、“分钟前”、“刚刚”等友好的时间描述是常见需求。本文介绍如何用JavaScript实现这一功能,通过计算当前时间和时间戳的差值,返回相应的描述,提升用户体验。
14 0
|
3月前
|
开发者 C# Android开发
明白吗?Xamarin与Native的终极对决:究竟哪种开发方式更适合您的项目需求,让我们一探究竟!
【8月更文挑战第31天】随着移动应用开发的普及,开发者面临多种技术选择。本文对比了跨平台解决方案Xamarin与原生开发方式的优势与劣势。Xamarin使用C#进行跨平台开发,代码复用率高,可大幅降低开发成本;但因基于抽象层,可能影响性能。原生开发则充分利用平台特性,提供最佳用户体验,但需维护多套代码库,增加工作量。开发者应根据项目需求、团队技能和预算综合考量,选择最适合的开发方式。
102 0
|
3月前
|
前端开发 关系型数据库 MySQL
Python基于Django框架图书管理系统,Bootstrap框架UI,后台EasyUI框架UI,有登录,实现增删改查的富文本效果
本文介绍了一个使用Python Django框架开发的图书管理系统,该系统采用Bootstrap框架进行前端UI设计,EasyUI框架用于后台UI界面,集成了富文本编辑器,并实现了登录及增删改查功能。
|
3月前
|
JavaScript 前端开发 开发者
决战前端之巅!Element UI与Vuetify谁才是Vue.js组件界的霸主?一场关于颜值与实力的较量!
【8月更文挑战第30天】本文对比了两款热门的Vue.js组件库——Element UI与Vuetify。Element UI由饿了么团队打造,提供多种高质量UI组件,设计简洁大方。Vuetify基于Material Design规范,支持Vue.js 2.0及3.0版本,具备前瞻性。两者均涵盖表单、导航、数据展示等组件,Element UI配置选项丰富,而Vuetify则提供了更深层的样式定制功能。开发者可根据项目需求及个人偏好选择合适的组件库。
213 0
|
3月前
|
JavaScript 开发者 UED
Vue.js组件库大对决:Element UI与Vuetify,开发者的罗密欧与朱丽叶!
【8月更文挑战第30天】Element UI和Vuetify是Vue.js开发中的热门组件库,前者简洁高效,后者遵循Material Design,国际化程度高。两者均提供丰富的组件支持,但Vuetify组件更多样,设计更灵活;Element UI在性能和中文支持上更优。文档方面,Element UI更直观易懂,而Vuetify配置灵活但学习成本稍高。选择时需综合考虑项目需求、团队背景及设计风格,以达到最佳开发效果。
157 0
|
6月前
|
Linux C# Android开发
.NET Avalonia开源、免费的桌面UI库 - SukiUI
.NET Avalonia开源、免费的桌面UI库 - SukiUI
297 5
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的前后台图书商城系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的前后台图书商城系统附带文章源码部署视频讲解等
30 0
|
6月前
|
JavaScript Java 测试技术
基于springboot+vue.js的善筹网(众筹)前后台附带文章和源代码设计说明文档ppt
基于springboot+vue.js的善筹网(众筹)前后台附带文章和源代码设计说明文档ppt
42 1
|
5月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的游戏后台系统附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的游戏后台系统附带文章和源代码部署视频讲解等
22 0