【新特性速递】FineUIPro/Mvc/Core 全新移动端访问体验(示例首页)!

摘要:
移动端支持虽然FineUIPro早在2016年就已经完成对移动端的适配工作,并新增了50多个官网示例。来看下新版官网示例首页的移动端效果:由于手机端屏幕尺寸有限,所以默认左侧菜单是折叠起来的,当点击折叠按钮时,整体页面右移,显示左侧菜单。
移动端支持

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

【新特性速递】FineUIPro/Mvc/Core 全新移动端访问体验(示例首页)!第1张

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

【新特性速递】FineUIPro/Mvc/Core 全新移动端访问体验(示例首页)!第2张

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

【新特性速递】FineUIPro/Mvc/Core 全新移动端访问体验(示例首页)!第3张

示例首页的移动端支持

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

【新特性速递】FineUIPro/Mvc/Core 全新移动端访问体验(示例首页)!第4张

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

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

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

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

【新特性速递】FineUIPro/Mvc/Core 全新移动端访问体验(示例首页)!第5张

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

【新特性速递】FineUIPro/Mvc/Core 全新移动端访问体验(示例首页)!第6张

实现原理分析

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

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

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

【新特性速递】FineUIPro/Mvc/Core 全新移动端访问体验(示例首页)!第7张

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

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

【新特性速递】FineUIPro/Mvc/Core 全新移动端访问体验(示例首页)!第8张

全露出来:

【新特性速递】FineUIPro/Mvc/Core 全新移动端访问体验(示例首页)!第9张

其实在点击折叠按钮时,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:0;
    top:0;
    background-attachment:fixed;
    width:100%;
    height:100%;
    z-index:20000;
    background-color:rgba(0,0,0,.3);
}

这里面主要有三部分:

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

3. 自定义JS代码

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

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

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

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

3.2 如何启用移动视图

functioncheckMobileView(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 点击折叠按钮图标

//点击折叠/展开按钮
functiononFoldClick(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 全新移动端访问体验(示例首页)!》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇VUE 在一个组件中引用另外一个组件的两种方式python 将文本txt 转换 excel(xls)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

移动端界面适配

本文引自:http://www.cnblogs.com/xianyulaodi/p/5533201.html  摘要:在进行移动端界面的书写的时候,如果把宽度高度或者字体大小全部写死的话,那么在所有手机上看到的大小都一样,存在的问题就是同样大小的字体,或者一个盒子模型, 在大屏幕手机上看起来会有点偏小。比如iphone6PLUS。如果是做成适配的话,就很好...

转载:前端大牛们都学过哪些东西?

作者:秦墨鱼链接:http://www.zhihu.com/question/22146521/answer/94842197来源:知乎著作权归作者所有,转载请联系作者获得授权。 学过的东西杂而不精,算不得大牛。带过前端团队,也算是有几年前端负责人的经验。随着这几年前端node.js,react,Angularjs等技术新起,越来越多从之前单纯的前端开发到...

移动端iPhone系列适配问题的一些坑

完成移动端的开发项目之后,发现谷歌自带的调试器似乎没有什么太大的作用,整天借同事的苹果手机测bug,尽管同事不厌其烦,但还是觉得这iPhone系列适配问题适配到想逃逃逃,好在项目已经顺利完成,测试通过,下面就是开发过程中遇到的一些坑。 图片.png 图片.png 问题一:苹果手机上的input按钮自带渐变效果 一样的代码,为啥在苹果手机上的i...

海量用户-高并发SAAS产品测试上线流程

海量用户高并发SAAS产品测试上线流程 SAAS产品测试上线流程-以Web插件产品为例子 1概述 在互联网产品中,IT公司之间更加注重产品功能之间的协作,SAAS形态的产品扮演着越来越重要的作用。 一个典型的完全由宿主代理的SAAS服务的通讯流程如下图: 这样的产品一般具有如下特点: 一般由第三方提供专门的服务 通常以网络为媒介来提供服务 具备嵌入的...

前端UI框架小汇总

前言: 近期,小弟根据GitHub、前端社区、掘金等平台对当前流行的前端UI框架的进行了小小的整理和汇总(ps:前端UI框架的应用是通过GitHub star数,社区热度和使用范围等进行的粗略的汇总【不分先后】)。希望对寻找UI框架的小伙伴们提供点帮助。 以下对前端UI框架的移动端、PC端和混合APP的应用进行了列举。 移动端UI框架 Mint UI(饿了...

响应式网页图片库设计的基本规则和技巧

响应式设计无疑是当前网页设计领域当中,不可忽略的必要组成部分,而响应式网页中的图片显示又是老生常谈的问题,许多争论集中在响应式网站的图片应当怎么展示,继续延伸开来,那么响应式网站中的图片库应当如何设计呢? 相比于单个图片,图库的展示无疑更加复杂,牵涉到的变量更多,所以实现起来也更加麻烦费神,接下来,我们来看看如果要设计响应式的图片库,有哪些值得注意的基本规...