1.display遇上transition。
需求:元素渐隐渐现,或者带有某种动画出现时,也就是说元素刚开始的样式display:none, opactiy: 0, transition: all ease 500。后续用js控制元素的样式让其渐现:ele.style.display='block', ele.style.opacity=1。会发现动画也就是opacity并没有生效。原因是因为:opacity: 0还没有生效,就被opactiy: 1覆盖。解决办法:在ele.style.display='block'之后延迟执行ele.style.opacity=1, 即
ele.style.display = 'block'
setTimeout(()=>{ele.style.opacity=1},700)
这样做,使得opacity:0,生效,这样,动画才会按照预期出现。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>display与transition</title>
<style>
.mask {
position: fixed;
top: 0;
left: 0;
background: rgba(0,0,0,.5);
width: 100%;
height: 100%;
}
.content {
position: absolute;
width: 800px;
height: 600px;
left: 50%;
top: 50%;
margin-left: -400px;
margin-top: -300px;
transition: all ease 700ms;
}
.close {
position: absolute;
right: 5px;
top: 5px;
}
</style>
</head>
<body>
<!--缩略图-->
<img class="imgsmall" src="./imgsmall.jpg"/>
<div class="mask" style="display:none;">
<span class="close">x</span>
<div class="content" style="transform: scale(0);">
<img src="./imgbig.jpg" width="800" height="600"/>
</div>
</div>
<script type="text/javascript">
var imgbig = document.querySelector('.content img');
var content = document.querySelector('.content')
var mask = document.querySelector('.mask')
document.querySelector('.imgsmall').addEventListener('click', function (e) {
mask.style.display = 'block'
setTimeout(() => {
content.style = 'transform: scale(1)';
},0)
}, false);
document.querySelector('.close').addEventListener('click', function (e) {
content.style.transform = 'scale(0)'
setTimeout(() => {
mask.style.display = 'none'
}, 700)
}, false);
</script>
</body>
</html>
2.safari mobile 7.0以上版本有个click事件点击目标元素失效bug,出现的前提条件是:1.目标元素不是互动型的元素(例如div)。2.没有在目标元素上直接添加监听事件(例如事件委托)。
解决bug的方法如下:
- 对目标元素或者它的任意后代设置css属性:
cursor
: pointer;
- 在目标元素或者它的后代上添加
onclick="void(0)"
但不包括body元素 - 利用典型的互动型元素(例如a)取代非互动型元素(div)
- 不使用事件委托,直接在目标元素上进行事件监听。
safari mobile认为如下元素为互动型元素。
a、area、button、img、input、label、textarea