Zepto常见问题

时间:2023-02-05 21:19:44

Zepto遇到的问题

延时

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

点透

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

计算宽高

一个很简单的Tip提示,例如‘操作成功’、‘登录失败’等等简单的提示,Tip在show之前,我会计算让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;

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