2015-03-12 1 views
1

Я пытаюсь повернуть изображение по диагонали. Я знаю, что есть десятки вопросов относительно затухающих изображений, и я прошел через их много, но все они либо исчезают слева направо, сверху вниз, либо движутся, а затем исчезают.CSS3 - Затухание изображения/элемента по диагонали

Я пытаюсь сделать так, чтобы изображение искажало эффект от одного угла к другому. Лучшее, что я мог придумать, - это превратить белый блок и увеличить его ширину.

$(document).ready(function() { 
 
    setInterval(function(){ 
 
     $('.white-fade').toggleClass('white-fade-reveal'); 
 
     $('.block').toggleClass('block-hide'); 
 
    }, 2000); 
 
});
.wrapper { 
 
    position: relative; 
 
} 
 
.block { 
 
    width: 100px; 
 
    height: 100px; 
 
    opacity: 1; 
 
    transition-delay: 1s; 
 
    transition: opacity 0.75s ease-in-out; 
 
} 
 

 
.white-fade { 
 
    position: absolute; 
 
    top: -25px; 
 
    left: -20px; 
 
    transform: rotate(45deg); 
 
    transform-origin: 75px 75px; 
 
    transition: width 1s ease-in-out; 
 
    width: 0%; 
 
    height: 150px; 
 
background: -moz-linear-gradient(left, rgba(255,255,255,1) 0%, rgba(255,255,255,0) 100%); /* FF3.6+ */ 
 
background: -webkit-gradient(linear, left top, right top, color-stop(0%,rgba(255,255,255,1)), color-stop(100%,rgba(255,255,255,0))); /* Chrome,Safari4+ */ 
 
background: -webkit-linear-gradient(left, rgba(255,255,255,1) 0%,rgba(255,255,255,0) 100%); /* Chrome10+,Safari5.1+ */ 
 
background: -o-linear-gradient(left, rgba(255,255,255,1) 0%,rgba(255,255,255,0) 100%); /* Opera 11.10+ */ 
 
background: -ms-linear-gradient(left, rgba(255,255,255,1) 0%,rgba(255,255,255,0) 100%); /* IE10+ */ 
 
background: linear-gradient(to right, rgba(255,255,255,1) 0%,rgba(255,255,255,0) 100%); /* W3C */ 
 
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#00ffffff',GradientType=1); /* IE6-9 */ 
 

 
} 
 

 
.block-hide { 
 
    opacity: 0; 
 
} 
 

 
.white-fade-reveal { 
 
    width: 150px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="wrapper"> 
 
    <img class="block" src="http://images.clipartpanda.com/smiley-face-transparent-background-awesome-smiley-background-2549-hd-wallpapers.png" alt="smiley"/> 
 
    <div class="white-fade"></div> 
 
</div>

мне было интересно, если там был уборщик подход к достижению этого эффекта? Кажется неизбежным, что необходим какой-то JavaScript. Я добавил градиент, чтобы сделать его более чистым, но я не уверен, есть ли способ сделать это с помощью анимации CSS3?

ответ

3

Вы можете использовать повернутый элемент Псевдо для этого.

Таким образом, в действительности вы бы:

+---+ 
| | <-- pseudo element (rotated 45 deg) 
+---+ 
    +---+ 
    | | <-- image element 
    +---+ 

И при наведении курсора мыши, принести элемент псевдо поверх изображения, что дает эффект «замирания» путем перехода непрозрачность псевдо а также:

div { 
 
    height: 300px; 
 
    width: 300px; 
 
    background: url(http://placekitten.com/g/300/300); 
 
    position: relative; 
 
    transition: all 0.8s; 
 
    overflow:hidden; 
 
} 
 
div:before { 
 
    content: ""; 
 
    position: absolute; 
 
    height: 150%; 
 
    width: 150%; 
 
    top: -150%; 
 
    left: -150%; 
 
    transition: all 2.3s; 
 
    background: white; 
 
    opacity: 0; 
 
    transform: rotate(45deg); 
 
} 
 
div:hover:before { 
 
    top: -25%; 
 
    left: -25%; 
 
    opacity: 1; 
 
}
<div></div>

+1

Ой, это интересная идея. Большое спасибо :) – aug

1

Одна вещь, которую я хотел бы предложить установлен height и width свойство на обертке, чтобы не увеличивать высоту,

Я также анимированный ширину только на одном селекторе с линейным градиентом, так что это более тонкий, и результат выглядит хорошо!!!

$(document).ready(function() { 
 
    setInterval(function(){ 
 

 
$(".white-fade").animate({ 
 
width: "toggle", 
 

 
    
 
    }, 2000); 
 
}); 
 
    });
.wrapper { 
 
    position: relative; 
 
    width:100px; 
 
    height:100px; 
 
    overflow:hidden; 
 
} 
 
.block { 
 
    width: 100px; 
 
    height: 100px; 
 
    opacity: 1; 
 
    transition: opacity 0.5s ease-in-out; 
 
} 
 

 
.white-fade { 
 
    position: absolute; 
 
    top: 0; 
 
    left: 0; 
 
    
 
    top: -25px; 
 
    left: -20px; 
 
    transform: rotate(45deg); 
 
    transform-origin: 75px 75px; 
 
    width: 300px; 
 
    height: 150px; 
 
    background: white; 
 
    background: linear-gradient(to right, rgba(255,255,255,1) 0%,rgba(255,255,255,1) 66%,rgba(255,255,255,0) 100%); /* W3C */ 
 
    opacity:1; 
 
} 
 

 
/*.block-hide { 
 
    opacity: 0; 
 
} 
 

 
.white-fade-reveal { 
 
    width: 100%; 
 
}*/
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="wrapper"> 
 
    <img class="block" src="http://images.clipartpanda.com/smiley-face-transparent-background-awesome-smiley-background-2549-hd-wallpapers.png" alt="smiley"/> 
 
    <div class="white-fade"></div> 
 
</div>

+0

Спасибо за совет, я полностью согласен, но я считаю, что это больше относится как комментарий, а не как n ответ. Я ищу возможно различные решения/подходы к проблеме. – aug

+1

Я также изучаю анимацию toogle на .white-fade с эффектами перехода ... – maioman

+0

А это была бы интересная идея. Не хотел откладывать ваш ответ! Я просто обновил свой вопрос с помощью градиента, и он выглядит лучше, но в целом мне все еще любопытно в более чистых подходах. – aug