gpt4 book ai didi

javascript - 同时应用两个不同的 CSS 转换

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:30:30 24 4
gpt4 key购买 nike

我正在编写一个脚本,根据光标位置使用左右变换来调整图像。
还有一些 CSS 可以在悬停时缩放图像。

// JavaScript source code
var catchX = 0,
catchY = 0,
x = 0,
y = 0,
burn = 1 / 28;

function imageWatch() {
x += (catchX - x) * burn;

translate = 'translate(' + x + 'px, ' + y + 'px)';

$('.image-area img').css({
'-webit-transform': translate,
'-moz-transform': translate,
'transform': translate
});

window.requestAnimationFrame(imageWatch);
}

$(window).on('mousemove click', function (e) {

var mouseX = Math.max(-100, Math.min(100, $(window).width() / 2 - e.clientX));
catchX = (26 * mouseX) / 100;

});

imageWatch();
html,body { height:100%}
body {margin: 0; padding: 0;}
*, *::before, *::after {
content:"\0020";
box-sizing: border-box;
}
.poster {
display: inline-block;
width: 32vw;
height: 100vh;
position:relative;
overflow:hidden !important
}
.image-area {
position: absolute;
width: 100%;
height: 100vh;
opacity: .24;
transition: 2.5s ease;
}

.image-area {
opacity: 1;
}


.image-area > img {
margin-top: -312px;
margin-left: -913px;
width: auto;
/* height: auto */
height: 1000px;
transform: scale(1,1);
transition:8s all;
}

.poster:hover .image-area > img {
transform: scale(1.3,1.3)
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="poster">
<div class="image-area">
<img class="poster" src="https://vignette1.wikia.nocookie.net/logopedia/images/f/fc/Sky_Believe_in_better_logo.jpg/revision/latest?cb=20110910152552" alt="Sky" />
</div>
</div>

<div class="poster">
<div class="image-area">
<img class="poster" src="https://vignette1.wikia.nocookie.net/logopedia/images/f/fc/Sky_Believe_in_better_logo.jpg/revision/latest?cb=20110910152552" alt="Sky" />
</div>
</div>

<div class="poster">
<div class="image-area">
<img class="poster" src="https://vignette1.wikia.nocookie.net/logopedia/images/f/fc/Sky_Believe_in_better_logo.jpg/revision/latest?cb=20110910152552" alt="Sky" />
</div>
</div>

我的 JS 正在使用 transform 属性,我的 CSS 也是如此,以使其在悬停时缩放。我认为这是问题所在。

如果您从 CSS 中删除转换,脚本可以正常工作,但我需要 transition:8s all 来使图像在悬停时缩放,并使其与光标对齐。

S.O告诉我你可以有两个转换属性,但它们必须在一行上。我如何使用我的 Javascript 做到这一点?


jsFiddle

最佳答案

transform 是一个单一的属性,所以你不能只从 CSS 定位它的一部分,例如,你不能设置不同的 CSS transition-duration两个transform-functions同样应用于transform属性(property)。

您可以通过 js 编写所有内容,随着时间的推移更新自己的两个转换函数值,但是对于潜在的非硬件加速结果,这将是很多工作,同时有一个简单的解决方法。

最简单的解决方案是稍微更改您的结构,以便应用 scale在包装器元素上,翻译在内部元素上。

这样,两种转换都应用于您的内部 <img> , 但它们并不相互冲突。

// JavaScript source code
var catchX = 0,
catchY = 0,
x = 0,
y = 0,
burn = 1 / 28;

function imageWatch() {
x += (catchX - x) * burn;

translate = 'translate(' + x + 'px, ' + y + 'px)';

$('.image-area img').css({
'-webit-transform': translate,
'-moz-transform': translate,
'transform': translate
});

window.requestAnimationFrame(imageWatch);
}

$(window).on('mousemove click', function(e) {

var mouseX = Math.max(-100, Math.min(100, $(window).width() / 2 - e.clientX));
catchX = (26 * mouseX) / 100;

});

imageWatch();
html,
body {
height: 100%
}

body {
margin: 0;
padding: 0;
}

*,
*::before,
*::after {
content: "\0020";
box-sizing: border-box;
}

.poster {
display: inline-block;
width: 32vw;
height: 100vh;
position: relative;
overflow: hidden !important
}

.image-area {
position: absolute;
width: 100%;
height: 100vh;
opacity: .24;
transition: 2.5s ease;
}

.image-area {
opacity: 1;
}

.image-area img {
margin-top: -312px;
margin-left: -913px;
width: auto;
/* height: auto */
height: 1000px;
/* here we can remove the transition */
}


/* scaling on hover is only applied on the parent elmt */

.image-area>.scaler {
transform: scale(1, 1);
transition: 8s transform;
}

.poster:hover .image-area>.scaler {
transform: scale(1.3, 1.3);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="poster">
<div class="image-area">
<!-- the scaling wrapper-->
<div class="scaler">
<img class="poster" src="https://vignette1.wikia.nocookie.net/logopedia/images/f/fc/Sky_Believe_in_better_logo.jpg/revision/latest?cb=20110910152552" alt="Sky" />
</div>
</div>
</div>

<div class="poster">
<div class="image-area">
<!-- the scaling wrapper-->
<div class="scaler">
<img class="poster" src="https://vignette1.wikia.nocookie.net/logopedia/images/f/fc/Sky_Believe_in_better_logo.jpg/revision/latest?cb=20110910152552" alt="Sky" />
</div>
</div>
</div>

<div class="poster">
<div class="image-area">
<!-- the scaling wrapper-->
<div class="scaler">
<img class="poster" src="https://vignette1.wikia.nocookie.net/logopedia/images/f/fc/Sky_Believe_in_better_logo.jpg/revision/latest?cb=20110910152552" alt="Sky" />
</div>
</div>
</div>

关于javascript - 同时应用两个不同的 CSS 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47755402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com