在ios上-webkit-overflow-scrolling:touch
模拟原生的滚动效果,当你看到这个属性以为就随便用时,你会发现可能看不到满意的效果,解决办法
element {
-webkit-overflow-scrolling:touch
}
element > * {
-webkit-transform: translateZ(0px);
}
基于盒模型,依赖display
,position
,float
属性实现布局时有很多布局很难实现,比如垂直居中。依赖flex的弹性布局将会是一个很好的解决方案,flex
在ios上支持已经很好了,但是像uc浏览器这种兼容性是很大的问题,所以请用-webkit-box
@mixin flex {
display: flex;
display: -webkit-box;
}
@mixin flex-direction-row {
flex-direction: row;
-webkit-flex-direction: horizontal;
}
@mixin justify-content-center {
justify-content: center;
-webkit-box-pack: center;
}
//两端对齐
@mixin justify {
justify-content: space-between;
-webkit-box-pack: justify;
}
@mixin align-items-center {
align-items: center;
-webkit-box-align: center;
}
@mixin flex-number($val) {
flex: $val;
-webkit-box-flex: $val;
}
pointer-events:auto|none
,是一个css3属性,auto
和width:auto
一样,当值为none
时,表现为和鼠标事件说拜拜,这里我们可以实现按钮的禁用和移动端禁止图片长按弹出框,没错,就是长按图片弹出框让你选是否保存还是取消。
//禁止图片长按弹框
img {
pointer-events: none;
}
- 性能优化,移动端下拉或者上拉滚动时候,为了滚动更丝滑,可以在body上加上css
pointer-events: none;
,取消touch事件的捕获,提高性能。 - 我们都知道获取元素可以通过选择器,但是有的时候,你并不知道选择器,比如
<div class="container">
<div class="item">
<div class="child1"></div>
<div class="child2"></div>
</div>
<div class="item">
<div class="child1"></div>
<div class="child2"></div>
</div>
<div class="item">
<div class="child1"></div>
<div class="child2"></div>
</div>
</div>
拖着一个元素进入container元素,此时需要获取拖到了某个item上时,我们知道的唯一的信息就是此时触点的坐标,此时也许你想到可以通过elementFromPoint获取元素,但是你会发现elementFromPoint
每次获取都是该坐标点下z-index
最大的元素,那么还不是你拖着的元素嘛,手q群中对我的应用进行拖拽排序就遇到这样的问题。此时你可能想到设置元素的pointer-events:none
解决。
function matches(el, selector) {
if(el) {
selector = selector.split('.');
var tag = selector.shift().toUpperCase(),
re = new RegExp('\\s(' + selector.join('|') + ')(?=\\s)', 'g');
return (
(tag === '' || el.nodeName.toUpperCase() == tag) &&
(!selector.length || ((' ' + el.className + ' ').match(re) || []).length == selector.length)
);
}
return false;
}
function getElementByPoint(selector, vx, vy) {
var ele = document.elementFromPoint(vx, vy);
if(matches(ele, selector) || ele == document.body) {
return ele;
}
ele.style.pointerEvents = 'none';
var e = getElementByPoint(selector, vx, vy);
ele.style.pointerEvents = 'auto';
return e;
}
css3硬件加速
禁止webview长按弹出框,比如禁止长按图片保存