Zepto常见问题

Zepto遇到的问题

延时

总所周知,默认click事件,会有300ms的延时问题,Zeptotap事件很好的解决了这个问题。但是也挖了一个大坑。

点透

Zepto的点透应该也是大家比较熟悉的了。当两个层叠加的时候,上层绑定的tap事件触发后会穿透到底层,恰好底层有个a标签,页面就跳转了。为了解决这个问题,我不得不把tap事件换成click事件,由于click事件有延时,还得引入了第三方的类库FastClick

计算宽高

一个很简单的Tip提示,例如操作成功登录失败等等简单的提示,Tipshow之前,我会计算让Tip居中显示:

var left = ($(window).width() - $pop.width()) / 2 + $(window).scrollLeft();

然而$pop.width()始终为0,对于不可见元素,获取的宽高度始终为0,但是jQuery就能正常获取到,我又不得不采取如下的处理方式:

var cssShow = {visibility: 'hidden', display: 'block'};

var cssHide = {visibility: 'visible', display: 'none'};

 

$pop.css(cssShow);

var left = ($(window).width() - $pop.width()) / 2 + $(window).scrollLeft();

$pop.css(cssHide);

 

 $pop.css({

     left: left > 0 ? left : 0

 });

小结

Zepto相对于JQuery来说确实比较轻量,但是成熟度还差得远,当出现点透和计算宽高失效的时候,我对Zepto有点灰心,希望Zepto后续能够及时升级解决这些问题,不然就使用jQuery了,特别是jQuery升级到版本2,也是相当不错的选择。

浏览器的坑

禁用滚动

当页面弹出一个选择框。滑动屏幕,背后的页面跟着滚动,特别是在safari下,那效果太恶心,所以我选择禁用body的滚动。最暴力的解决方式是:

$(document).on('touchmove',function(e){

    e.preventDefault();

});

这样会同时禁用掉弹出层的滚动效果,明显不可取,所以我才用下面的方式:

.alpha {

    height: 100%;

    overflow: hidden;

    position: relative;

}

 

.alpha body {

    height: 100%;

    overflow: hidden;

}

 

当遮盖弹出的时候或者隐藏的时候让html切换class alpha

$('html').toggleClass('alpha');

回到顶部

对于PC端,直接这样写,就会有一个向上平滑滚动的效果,然而对于移动端来说,并没有什么卵用:

$('body,html').animate({scrollTop: 0});

还是使用了第三方的插件模式出这个效果的scrollToTop

Css中的

Width:100px;  white-space:nowrap;   overflow:hidden;   text-overflow:ellipsis;

多行

Display:-webkit-box;  -webkit-line-clamp:2;   -webkit-box-orient:vertical;  overflow:hidden;

 

一个元素在另一个元素中水平垂直居中

 

posted @ 2017-12-29 16:30  funny_jj  阅读(486)  评论(0编辑  收藏  举报