appframework(JqMobi)之为什么我的drawer关不了

刚接触appframework,本想尝试着做个东西玩玩,却没想到卡在了drawer上。

问题一:明明是push,怎么出来的却是cover?

Drawer插件有3个效果,push,cover,reveal。但是我明明用了push却出现了cover的效果。

按钮的代码:

<a id="mainNavBtn" href="#" class="button" onclick="$.afui.drawer.show(‘#mainNav‘,‘left‘,‘push‘)">Left Push</a>

①①①②②②②

问题二:点击②区域(下图)side Menu没有关掉

一般的app中,点击②区域,side Menu应该都会收起来的,官方Demo中点击可以收起来,我的为什么不行?

预计效果应该是这样的:              然后实际却是这样的:

                    

问题猜想:

一)可能是自己绑定了关闭的事件?

  appframework中用$.drawer.hide()来关闭。将②区域内的元素绑定个click/tap事件来触发应该可以实现。

  但是查看官方Demo的代码,除了必要的几个JS文件,并没有发现独立的JS文件,说明这个功能并不是独有的。

  猜想错误!

二)如果第一个不成立,那么肯定就是html结构上的问题了。

解决之路:

一开始跑去官网查api却发现这个写得......并没有什么卵用。只是单纯的介绍$.drawer.show()和$.drawer.hide()的使用。

PS:官网中(http://app-framework-software.intel.com/components.php)关于icon的Demo居然还是错误的......

而网上关于appframework的资料也比较少,比较有关系的那篇文章是说他点击side Menu没关闭(即点击了①区域,而①

区域没有关闭。我的是点击②区域,①区域没有关闭),最后他的解决方法是在side Menu中绑定了$.drawer.hide()。

然并不是我所要解决的问题。

最终使用了最笨拙的方法,删代码......

原官方Demo中的代码比较多,为了发现问题,逐一将无关紧要的代码删除......(其实删起来还挺快的),结果官方Demo就

被我玩成了这样......都删光光了。

原官方Demo:                      现官方Demo:

       

最后终于发现.......原来我的nav没有写在view里面!!!(已在厕所哭晕)

其实在一开始有想过是不是这个原因,奈何官方Demo太长,我查看了两遍竟都以为nav应该写在view外面的。

所以最后正确的写法应该是这样的:

<div class="view">

  <div class="pages">......</div>

  <nav class="left">......</nav>

  ......

</div>

错误写法:

<div class="view">

  <div class="pages">......</div>

  ......

</div>

<nav class="left">......</nav>

解决完后的思考:

如果没用appframework,我自己应该如何实现点击②区域来关闭呢?

作为一个新手,能想到的解决方案有两个:

一)建一个遮罩层,让它覆盖②区域,然后再给遮罩层绑定一个click事件来触发$.drawer.hide()

  这个思路最简单啦,多了一个div,一个绑定事件。这个方法在之前做东西的时候有试过。

二)给②区域的最外层框框绑定$.drawer.hide()

  这个方法看起来在这里也行得通,但是如果①区域在②区域上面,即如下图:

  

  那么在点击①区域的时候就很容易造成点击穿透,之前用zepto的时候就有这个问题,fastclick还没试过。

三)给所有②区域内的子元素都绑定$.drawer.hide()

  这个想想就觉得麻烦......没有试过。

有不同当然就想知道最优啦,一个多了个div和一个绑定事件(其实应该有几个,毕竟还有要触发遮罩层出现,消失的事件嘛);

第二个就不需要html结构上的改变,但是就有可能能会出现点击穿透的问题。第三个也没改变html的结构,但是绑了这么多

......,因为还没学怎么测试性能,所以最终哪个好哪个差我也还没结论。

最后本着学习的心态查看了af.drawer.js(就是appframework中实现drawer的代码),发现appframework采用了第三种

方法,即②区域内的子元素都绑定。代码如下:

setTimeout(function(){
  $(currEl).closest(".view").children().filter(":not(nav):not(aside)").on("touchstart",self.autoHideCheck);
});

currEl就是那个nav。看到这也就明白为什么我点击view不能关闭了,因为closet(".view")查找上层最近的view,而我的nav

并没有写在view里面,所以自然也没有绑定到关闭的事件。

那么问题又来了......

在实验中突然发现了一个BUG,当一个view里面有两个nav时,如果第一个nav还没关闭就点击想让第二个nav显示出来,那么

第二个nav的显示就出现问题了。如下图:

           

可以发现reveal的效果却变成了cover的效果,这个问题在官方的Demo中也有。

眼疾手快的我发现整个动画流程是这样的:

点击Left Push -> nav1以push效果正常出现 -> 点击Left Reveal -> nav1正常收起 -> nav2以reveal效果正常出现

-> nav2还在但是pages已经向左闭合了。

调试发现,当nav滑出时,右边的pages会添加一个class:slide-left-out(这是最终显示,在动画滑出期间是添加class:animation-active等)

然而在BUG的情况下,pages的class并没有slide-left-out,所以pages也并没有预期的在右侧。

夜深了,明天再继续。

时间: 2024-10-20 11:35:54

appframework(JqMobi)之为什么我的drawer关不了的相关文章

jqMobi 更小更快的移动框架

什么是jqMobi JqMobi   != JqueryMobileJqMobi是针对 移动设备开发的javascript框架,在2013年2月22日被 英特尔(intel)公司收购 改名为appframework jqMobi是由appMobi针对HTML5浏览器和移动设备开发的javascript框架,是个极其快速的查询选择库,支持W3C查询.官方网址:http://www.jqmobi.com/ 版本 jqMobi源码最初在2012年1月份推出,基于MIT/X11许可证,托管在GitHub

使用appframework前端框架中输入框圆角问题

目前使用HTML5技术来开发手机跨平台app已经成为了曾经的web开发人员介入移动开发的一条捷径.与此对应也出现了很多新的技术来支撑这样的开发方式,例如国外的phonegap和国内的APPcan等.很多移动端的前端UI框架也层出不穷,其原理都是大同小异,无非都是提供了一些常用的UI组件及其使用demo和js/ajax的API等.其实相对于原生开发,HTML5技术虽然开发成本和周期较小,但是效率上还是有很大差别的.所以选择前端框架就非常重要,如果框架太过于重量级,那么在手机上的表现将是灾难(实际上

六专传文出结战二应元把制以马则

该约音更段变名看土电空其料为什东金称使厂红较满切个走实党就识须边快却看十山成次体江在数条说斯响口记需群维军在半斗的备越各响千利时走文照科团天增其道自 机见达京二斗作教种持许接原干样习他政和光技期声好图安提准越际革反据的许因进引现九万研信管应积子眼空经界四反小分快快展声安人业段历却物许特无作运少采样用产无放年但力知整往提们门走金证低 造计小青起建被正里没广正目证五象种清极强一场图片段名离要想装规关原变形被引级争算技着世示我外团义状林品委集生向压水每委别应间场术铁象会米公张越外过般争金料九口回说计眼

appframework(jqmobi) 3.0 设置

1.重写 data-load data-unload 事件: 在随便的js文件中添加一下的代码: function dispatchPanelEvent(fnc,myPanel){ if (typeof fnc === "string" && window[fnc]) { return window[fnc](myPanel); } else if(fnc.indexOf(".")!==-1){ var scope=window,items=fnc.

HTML5移动开发之路(33)—— jqMobi基础

本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:HTML5移动开发之路(33)-- jqMobi基础 一.什么是jqMobi jqMobi是由appMobi针对HTML5浏览器和移动设备开发的JavaScript框架,是个极快速的查询选择库,支持W3C查询. 版本 jqMobi源码最初在2012年1月份推出,基于MIT/X11许可证,托管在GitHub上,开发者可参与并通过插件不断改进该框架. 2012年3月13日,jqMobi 1.0版本正式发布.现在最新的版本是jqMobi

HTML5移动开发之路(41)——jqMobi中Side Menu实现(类似人人网)

本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:HTML5移动开发之路(41)--jqMobi中Side Menu实现(类似人人网) 记得以前在做Native App的时候类似于人人网侧边滑动的效果非常的热,很多app仿照该效果进行开发,在jqMobi中也有类似的效果被称为Side Menu.下面我们来一步一步实现该效果. 首先新建一个html文件,引入jqMobi的框架,如下: [html] view plain copy print? <!DOCTYPE html> &l

HTML5移动开发之路(37)——jqMobi快速入门

本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:HTML5移动开发之路(37)--jqMobi快速入门 在<HTML5移动开发之路(33)-- jqMobi基础>中我们了解了什么是jqMobi,并从官方下载了jqMobi开发包,下载后解压目录如下: 拷贝上面的/css目录./plugins目录./ui目录./appframework.js文件,如下图所示. 如果需要也可以拷贝index.html,然后自己修改,比如上面我的index01.html和index02.html 接

HTML5移动开发之路(38)——jqMobi插件ActionSheet

本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:HTML5移动开发之路(38)--jqMobi插件ActionSheet 现在在手机客户端上Action Sheet非常常见,比如微信中的分享按钮菜单,下面我们使用jqMobi实现一个Action Sheet,如下: 首先右击上面的按钮选择审查元素(我用的是Chrome浏览器,先按F12) [html] view plain copy print? <a class="button" onclick="s

关于使用jqmobi前端框架在phonegap平台上开发时的日期时间选择控件

jqmobi(appframework)作为Intel的一款html5移动前端框架,以其自身轻量级和容易上手获得了很多移动HTML5开发者的喜爱,相对于jquerymobile,它可以说将jQuerymobile进行了重写,针对移动端做了很好的优化,(jQuerymobile太过于臃肿,实际在真机上效果较差),但是经过使用,发现jqmobi也有一些缺点,比如说bug较多,UI控件较少,插件较少,不能够满足大型应用开发需求.最不可接受的是它竟然没有提供日期和时间选择插件(日期时间选择功能很常用).