我嘗試編寫一個小插件,以更有機的方式打開模式框,因此我決定爲剪輯路徑屬性設置動畫效果。如何在FF和IOS中使用剪輯路徑多邊形
下面這段代碼只能在Chrome: http://codepen.io/meodai/pen/GgGzYo?editors=011
它看起來像firefox does not supportpolygon()
在剪輯路徑屬性。 Safari瀏覽器&移動Safari也與它鬥爭。
是否有類似的簡單方法在Firefox和Safari以及Mobile Safari中完成此項工作?任何想法我怎麼能解決這個問題?
這裏是一個工作示例:
var $ov = $('.overlay');
$(document).on('click touchstart', '.inner', function(){
var coords, coordArray, coordsString;
coords = this.getBoundingClientRect();
coordArray = [
Math.floor(parseInt(coords.left)) + 'px ' + Math.floor(parseInt(coords.top)) + 'px',
Math.ceil((parseInt(coords.left) + parseInt(coords.width))) + 'px ' + Math.ceil(parseInt(coords.top)) + 'px',
Math.ceil((parseInt(coords.left) + parseInt(coords.width))) + 'px ' + Math.ceil((parseInt(coords.top) + parseInt(coords.height))) + 'px',
Math.ceil(parseInt(coords.left)) + 'px ' + Math.floor((parseInt(coords.top) + parseInt(coords.height))) + 'px'
];
coordsString = 'polygon(' + coordArray[0] + ',' + coordArray[1] + ',' + coordArray[2] + ',' + coordArray[3] + ')';
$ov.css({
'-webkit-clip-path': coordsString,
'clip-path': coordsString
});
setTimeout(function(){
$ov.addClass('show');
},50);
setTimeout(function(){
coordsString = 'polygon(0% 0%,' + coordArray[1] + ',' + coordArray[2] + ',' + coordArray[3] + ')';
$ov.css({
'-webkit-clip-path': coordsString,
'clip-path': coordsString
});
},100);
setTimeout(function(){
coordsString = 'polygon(0% 0%,100% 0%,' + coordArray[2] + ',' + coordArray[3] + ')';
$ov.css({
'-webkit-clip-path': coordsString,
'clip-path': coordsString
});
},180);
setTimeout(function(){
coordsString = 'polygon(0% 0%,100% 0%,100% 100%,' + coordArray[3] + ')';
$ov.css({
'-webkit-clip-path': coordsString,
'clip-path': coordsString
});
},260);
setTimeout(function(){
coordsString = 'polygon(0% 0%,100% 0%,100% 100%,0 100%)';
$ov.css({
'-webkit-clip-path': coordsString,
'clip-path': coordsString
});
},340);
// reverse
setTimeout(function(){
coordsString = 'polygon(0% 0%,100% 0%,100% 100%,' + coordArray[3] + ')';
$ov.css({
'-webkit-clip-path': coordsString,
'clip-path': coordsString
});
},1500);
setTimeout(function(){
coordsString = 'polygon(0% 0%,100% 0%,' + coordArray[2] + ',' + coordArray[3] + ')';
$ov.css({
'-webkit-clip-path': coordsString,
'clip-path': coordsString
});
},1580);
setTimeout(function(){
coordsString = 'polygon(0% 0%,' + coordArray[1] + ',' + coordArray[2] + ',' + coordArray[3] + ')';
$ov.css({
'-webkit-clip-path': coordsString,
'clip-path': coordsString
});
},1640);
setTimeout(function(){
coordsString = 'polygon(' + coordArray[0] + ',' + coordArray[1] + ',' + coordArray[2] + ',' + coordArray[3] + ')';
$ov.css({
'-webkit-clip-path': coordsString,
'clip-path': coordsString
});
},1740);
setTimeout(function(){
$ov.removeClass('show');
},2000);
});
body, html {
background: silver;
}
.grid {
float: left;
width: 25%;
height: 25vw;
box-shizing: border-box;
position: relative;
}
.inner {
position: absolute;
top: 10px;
left: 10px;
bottom: 10px;
right: 10px;
background: #ddd;
-webkit-transition: background-color 111ms;
transition: background-color 111ms;
}
.inner:hover {
background: #fff;
}
.overlay {
opacity: 0;
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
background: #fff;
pointer-events: none;
box-sizing: border-box;
padding: 20px;
}
.overlay.show {
opacity: 1;
will-change: clip-path;
-webkit-transition: clip-path 200ms;
transition: clip-path 200ms;
-webkit-transition: -webkit-clip-path 200ms;
transition: -webkit-clip-path 200ms;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="grid">
<div class="inner"></div>
</div>
<div class="overlay"></div>
你可以使用一個用於Firefox的SVG - http://caniuse.com/#search=clip-path – 2015-03-02 12:38:50
@Paulie_D哦!我不知道你可以參考一個SVG剪輯路徑,我會玩這個謝謝你...仍然懷疑是否有一個跨瀏覽器的解決方案/破解這樣做 – meo 2015-03-02 12:42:35
這是一個很好的小文章[** https://css-tricks.com/clipping-masking-css/**](https://css-tricks.com/clipping-masking-css/)和[** Support Chart **](http: //codepen.io/yoksel/full/fsdbu/) – 2015-03-02 12:45:18