移动端支持

虽然 FineUIPro 早在 2016 年就已经完成对移动端的适配工作,并新增了 50 多个官网示例。

并且,我们也新增了一个移动端的首页 http://pro.fineui.com/mobile/main.aspx ,通过手机浏览器打开这个页面,看到的效果还是很不错的:

菜单的层次切换也是典型的左右滑动效果,看下动图:

示例首页的移动端支持

但是官网示例首页一直没有对移动端做适配,表现在你通过手机访问 http://pro.fineui.com/ 时,看到的和PC端的显示效果一模一样:

给人的感觉就是文字很小,很模糊,也不好点击,只有手工放大才行。

这个体验其实很糟糕,尽管我们一直在说,对于管理系统而言,PC端的显示效果一般不能直接用于移动端,毕竟移动端的屏幕尺寸有限,你不可能把PC端的20列的表格直接照搬到手机端显示。

但是,如果能够赏心悦目的在手机上查看官网示例首页,又何乐而不为呢?很多时候,我们只是没想到,实现起来并不是难事。

来看下新版官网示例首页的移动端效果(从 FineUIPro v5.5.0 开始支持):

由于手机端屏幕尺寸有限,所以默认左侧菜单是折叠起来的,当点击折叠按钮时,整体页面右移,显示左侧菜单。动起来的效果更迷人:

实现原理分析

如果仔细观察上面的动图,可以清楚的看到,默认左侧菜单是【折叠】的,只不过这个折叠并不是真正意义的折叠,而只是隐藏在左侧而已。

换句话说,初始页面加载时,整体页面左移了260px(也即是左侧菜单的宽度),点击折叠按钮时,整体页面右移260px像素而已,道理很简单吧。

下面的图片就更直观了,初始页面加载后:

可以看到最外层的 mainPanel 是应用了 CSS3 样式:-webkit-transform: translate3d(-260px,0,0);

这个样式让整体页面左移了 260px,为了看到隐藏的内容,我们把 -260px 改为 -130px,让左侧露出半个脑袋:

全露出来:

其实在点击折叠按钮时,FineUIPro内部就是通过改变这个CSS样式来实现的左侧菜单的显示隐藏效果的。

是不是很简单!

实现代码一瞥

1. Web.config增加配置项(MobileAdaption="true")

完整的FineUIPro节点如下所示:

<FineUIPro DebugMode="true" CustomTheme="pure_black" EnableAnimation="true" MobileAdaption="true" JSLibrary="All" />

2. 自定义CSS样式

body.mobileview .mainpanel {
transition: all .3s;
-webkit-transition: all .3s;
transform: translate3d(-260px,0,0);
-webkit-transform: translate3d(-260px,0,0);
} body.mobileview .mainpanel.showsidebar {
transform: translate3d(0,0,0);
-webkit-transform: translate3d(0,0,0);
} body.mobileview .mainpanel .f-region-split {
display: none !important;
} body.mobileview .mainpanel .sidebarregion {
box-shadow: none;
} body.mobileview .mainpanel .bodyregion .showsidebar-mask {
position: absolute;
left:;
top:;
background-attachment: fixed;
width: 100%;
height: 100%;
z-index:;
background-color: rgba(0,0,0,.3);
}

这里面主要有三部分:

  1. 显示隐藏左侧菜单的样式: .showsidebar
  2. 隐藏模式下让分隔条不可见: .sidebarregion
  3. 菜单显示模式下,显示主区域的遮罩层:.showsidebar-mask

3. 自定义JS代码

这部分有点复杂,关键代码如下:

3.1 判断何时启用移动视图的函数

function isSmallWindowWidth() {
var windowWidth = $(window).width();
return windowWidth < 992;
}

可以看到,我们是以页面宽度作为边界条件,如果页面小于992px,则启用移动视图

3.2 如何启用移动视图

function checkMobileView(shouldLayout) {
var isMobileView = $('body').hasClass("mobileview");
var needLayout = false; // 如果窗体宽度小于992px,则启用移动视图
if (isSmallWindowWidth()) {
if (!isMobileView) {
$('body').addClass("mobileview");
F.viewPortExtraWidth = SIDEBAR_WIDTH_CONSTANT;
needLayout = true;
}
} else {
if (isMobileView) {
$('body').removeClass("mobileview");
F.viewPortExtraWidth = 0;
needLayout = true;
}
} if (needLayout && shouldLayout) {
// 应用布局,代码省略
}
}

两行代码启用视图视图:

  1. 给body节点添加 mobileview 样式
  2. 设置 F.viewPortExtraWidth=260,也就是告诉FineUIPro将视口的宽度多扩展260px,以便左移后刚好隐藏左侧菜单

注:简单设置 F.viewPortExtraWidth 没有任何效果,必须在 F.ready 运行之前设置,或者设置之后调用面板的doLayout函数!

3.3 点击折叠按钮图标

// 点击折叠/展开按钮
function onFoldClick(event) {
if (isSmallWindowWidth()) {
var sidebarregionEl = $('.sidebarregion');
var bodyregionEl = $('.bodyregion'); // 创建遮罩层
var maskEl = bodyregionEl.find('.showsidebar-mask');
if (!maskEl.length) {
maskEl = $('<div class="showsidebar-mask"></div>').appendTo(bodyregionEl.find('>.f-panel-bodyct'));
maskEl.on('click', function () {
if (isSmallWindowWidth()) {
hideSidebarAndMask();
}
}); sidebarregionEl.on('click', '.leftregion a.f-tree-cell-text', function () {
if (isSmallWindowWidth()) {
hideSidebarAndMask();
}
});
} if (getFoldButtonStatus()) {
showSidebarAndMask();
} else {
hideSidebarAndMask();
} } else {
toggleSidebar();
}
}

这里面有两个DOM节点的事件处理,都是在移动视图下才会执行的,分别是:

  1. 遮罩层的点击事件:点击遮罩层,会隐藏左侧菜单
  2. 左侧菜单项的点击事件:点击菜单项会在主区域打开IFRAME页面,并隐藏左侧菜单

注意事项

  1. 本文介绍的内容会在FineUIPro/Mvc/Core v5.5.0 中实现。
  2. 由于移动端支持是企业版功能,所以本效果在基础版中不可用。

【新特性速递】FineUIPro/Mvc/Core 全新移动端访问体验(示例首页)!的更多相关文章

  1. 【新特性速递】树控件结构由单层 TR 改为 TR-TD-TABLE 层级嵌套

    FineUIPro/Mvc/Core的下个版本(v6.1.0),我们对树控件进行了优化,由原来的单层 TR 改为 TR-TD-TABLE 层级嵌套,从而做到表里如一. 上个版本(v6.0.0),我们对 ...

  2. 【新特性速递】CSS3动画增强

    FineUIPro/Mvc/Core的下个版本(v6.1.0),我们对多个地方的CSS3动画进行了增强,使得用户体验更好. 1. 树控件启用EnableSingleExpand时,使得展开动画和折叠其 ...

  3. 【新特性速递】优化Shift/Ctrl行多选逻辑,和Windows的文件资源管理器保持一致!

    别告诉我你不知道 别告诉我你不知道可以使用键盘的 Shift 和 Ctrl 来多选表格行,因为这个在 Windows 文件资源管理器中的常用操作,此时的画风是这样的: 这个动图中进行了如下操作: 1. ...

  4. 【新特性速递】单元格导航(上下左右键,TAB键和ENTER键)

    上下左右按键 其实单元格导航(上下左右按键,需要启用表格的ShowSelectedCell属性)一直都存在,只不过之前的版本(v5.5.0)有一些小的BUG. BUG1 比如锁定列存在时,上下左右键只 ...

  5. 【新特性速递】树表格结构由单层 TR 改为 TR-TD-TABLE 层级嵌套!

    由于历史原因,在之前实现树表格时,我们有点偷懒,本来应该是层级嵌套的树结构,被我们硬生生的拉平了,请看: 可以看到,basic目录的子节点和basic是在同一级别的,因为此目录尚未展开,所以这些子节点 ...

  6. 【新特性速递】F.doPostBack的说明文档

    FineUIPro/Mvc/Core的下个版本(v6.1.0),我们对客户端JS函数 F.doPostBack 进行了增强,并增加说明文档. 如果你还没有查阅过FineUI的客户端文档,可以收藏下这个 ...

  7. ActiveReports 11 新特性速递

    又到了一年一度,翘首期盼的ActiveReports11 即将发布,ActiveReports 10 表控件横空出世,成为中国式复杂报表的救星后,ActiveReports11 又会有哪些令人惊奇的新 ...

  8. FineUIMvc新特性速递(大间距模式,隐藏菜单垂直滚动条)

    即将发布的 FineUIMvc 新版本会引入两个重要的特性,用来提升用户体验,现在就来先睹为快吧: 大间距模式 我们已经支持的显示模式有:紧凑模式,普通模式,大字体模式. 紧凑模式: 普通模式: 大字 ...

  9. FineUIPro/Mvc/Core v6.1.0 发布了!

    FineUIPro/Mvc/Core v6.1.0 正式发布了(2019-12-25),这个版本主要是BUG修正,并增加了一些新特性,建议升级到此版本. 在列举新版本特性之前,我们先来回顾下每次发布大 ...

随机推荐

  1. iOS可视化动态绘制八种排序过程(Swift版)

    前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...

  2. emscripten、 WebAssembly,传递字符串给c函数

    下面看具体的实例. 下面的代码是一个C函数,实现简单的字符串拼接,然后返回拼接的字符串. #include <stdio.h> #include <string>  char* ...

  3. window下的nginx的安装和使用

    nginx功能之一可以启动一个本地服务器,通过配置server_name和root目录等来访问目标文件 一. 下载 http://nginx.org/en/download.html 下载后安装在你钟 ...

  4. Vue(day3)

    一.Vue中的ajax:vue-resource和axios vue-resource是Vue实现异步加载的官方库,即Vue中的ajax.在Vue2.js之后vue-resource将不再更新维护,所 ...

  5. KnockoutJS-模板绑定

    对于knockoutJS来讲,模板绑定和Mapping插件绑定是十分重要的功能,虽然模板绑定在我工作中用的及其少,但模板绑定的重要性不可忽视,在其他前端框架中,如Angular.Vue等等,模板存在的 ...

  6. Java~类,抽象类和接口

    最近有空就着迷于java的世界,希望可以把自己的lind重构一个java版本出来,虽然遇到一些小问题,但也都解决了,还是那句话,知识需要积累,程序员需要一个追求! 类 抽象类 接口 泛型类 泛型接口 ...

  7. SpringBoot整合Netty并使用Protobuf进行数据传输(附工程)

    前言 本篇文章主要介绍的是SpringBoot整合Netty以及使用Protobuf进行数据传输的相关内容.Protobuf会简单的介绍下用法,至于Netty在之前的文章中已经简单的介绍过了,这里就不 ...

  8. Tensorflow之基于LSTM神经网络写唐诗

    最近看了不少关于写诗的博客,在前人的基础上做了一些小的改动,因比较喜欢一次输入很长的开头句,所以让机器人输出压缩为一个开头字生成两个诗句,写五言和七言诗,当然如果你想写更长的诗句是可以继续改动的. 在 ...

  9. IO 和 NIO 的思考

    输入输出是操作系统不可或缺的一部分,大致分为两类:面向磁盘和面向网络.在 Java 中有3种 I/O 类型:BIO.NIO 和 AIO,分别是同步阻塞.同步非阻塞和异步非阻塞 I/O,这里着重描述 B ...

  10. 命令模式 Command 行为型 设计模式(十八)

    命令模式(Command) 请分析上图中这条命令的涉及到的角色以及执行过程,一种可能的理解方式是这样子的: 涉及角色为:大狗子和大狗子他妈 过程为:大狗子他妈角色 调用 大狗子的“回家吃饭”方法 引子 ...