#javascript #jquery #css #animation #easing
#javascript #jquery #css #Анимация #ослабление
Вопрос:
У меня возникла проблема при попытке создать масштабную анимацию. У меня есть видеоэлемент в качестве фона, и я вначале увеличил его до (1,1). Я привязал перемещение мыши в документе, чтобы получить положение и масштабировать видео всякий раз, когда мышь перемещается по оси Y, она соответственно масштабируется, как эффект увеличения и уменьшения масштаба. Однако я пытался реализовать для этого опцию смягчения, но она просто масштабируется без эффекта. Вот мой код
$(document).mousemove(function(event) {
var pos = (event.pageY / 4000);
$("#bgvid").animate({
transform: pos
},
{ step: function(now, fx) {
$(this).css('-webkit-transform', 'scale(' (1 pos) ',' (1 pos) ')');
},
duration: '100',
queue:false,
easing:'swing'
});
});
Итак, что он делает, так это всякий раз, когда курсор входит в документ и перемещается по оси Y, он начинает масштабироваться от 1 до (1 значение) всякий раз, когда я перемещаю курсор вниз / вверх по масштабированию <video>
элемента. Но это не требует смягчения.
То, чего я пытаюсь достичь, похоже на этот веб-сайт.
http://admirhadzic.com/#/project/kamui
Обходной путь, предложенный @ntgCleaner
мой jquery
$(document).mousemove(function(event) {
var pos = (event.pageY/50);
var wid = 120 pos;
$('#bgvid').stop().animate({
width : wid '%',
left: -(pos/2) '%'
}, 400,false,'swing');
});
элемент css
video.fullscreen {
position: absolute;
top:0;
left: 0;
right:0;
bottom: 0;
width: 120%;
z-index:1;
}
Комментарии:
1. не уверен, в чем именно заключается ваша проблема, но вы пробовали использовать
.stop()
на своем animate?$('#bgvid').stop().animate(..)
. возможно, вы запускаете свою анимацию, поскольку она выполняется при движении мыши?2. @ntgCleaner, он делает то же самое. какой может быть другой метод для этого, например, веб-сайт, на который я ссылался?
3. Вам нужно использовать масштабирование? Можете ли вы просто сделать видео шириной 100% внутри контейнера, который вы можете масштабировать, используя ширину и высоту?
4. @ntgCleaner, это имеет смысл. Я попробую.
5. Я также предлагаю предоставить вашему контейнеру переход в CSS. Это облегчит его. в вашем контейнере
transition:all 100ms ease-in-out;
. Это облегчит анимацию
Ответ №1:
Итак, я приготовил для вас скрипку.
Что я сделал, так это создал контейнер для того, что вы хотите масштабировать, затем я использовал CSS width
для масштабирования контейнера. Я также добавил transition
эффект для анимируемого контейнера, чтобы все было так, как вы хотите.
HTML
<div class="box-container">
<div class="box"></div>
</div>
js
$(document).on('mousemove', function(e){
var mouseY = e.pageY;
$('.box-container').css({"width":mouseY "px"});
})
css
.box-container {
width:200px;
position:relative;
transition:all 400ms ease-out; /* NOTE THIS LINE HERE FOR EASING */
}
.box-container:after {
content:"";
display:block;
padding-top:100%;
}
.box {
position:absolute;
}
Комментарии:
1. анимация сработала, но как сделать так, чтобы она увеличивалась с середины, а не с верхней левой стороны?
2. Это потребует немного математики. Вам нужно будет анимировать ширину и левую позицию, и я не уверен, как у вас контейнер центрирован в первую очередь. В основном вам нужно добавить к ширине и вычесть половину этой суммы из левой позиции
3. поскольку я поместил его в позицию -абсолютную. хорошо, минус левая позиция, но я даю ее в процентах по ширине. значит, половина процента равна — (осталось%)??
4. В значительной степени. Можете ли вы опубликовать свое позиционирование css?