[英]Smooth blend/transition between images on mousemove
最近我访问了一个网站,在 mousemove 上背景变化很好,它以某种方式与鼠标 position 相连。请看这里。
事实上,只有两个图像显示,并且它们之间有一个平滑的过渡。 这就是为什么我试图用我自己的小提琴来达到同样的目的。
我的 html 在这里:
<section id="test">
<div class="container">
<div class="row">
<div class="col-lg-12 text-center link-danger">
testing background
</div>
</div>
</div>
<div class="masked" id="maskedImages">
<picture>
<img src="https://images4.alphacoders.com/108/thumb-1920-1082562.jpg" alt="test" />
</picture>
<picture>
<img src="https://images3.alphacoders.com/108/thumb-1920-1082567.jpg" alt="test" />
</picture>
</div>
</section>
CSS:
section#test {
background:url('https://images5.alphacoders.com/117/thumb-1920-1178361.jpg') center center/cover no-repeat;
}
section#test .masked {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 0
}
section#test .masked img {
width: 100%;
height: 100%;
object-fit: cover;
position: absolute;
left: 0;
top: 0
}
section#test .masked picture:nth-child(2) img {
-webkit-mask-image: linear-gradient(-90deg, rgba(0, 0, 0, 0) 0, #000 50%);
mask-image: linear-gradient(-90deg, rgba(0, 0, 0, 0) 0, #000 50%);
-webkit-mask-position: 0 0;
mask-position: 0 0;
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-size: 200% auto;
mask-size: 200% auto
}
和 JS(取自该网站):
var n = $("maskedImages");
if (n) {
var o = n.getElement('div[data-vid="time2"] video');
o && n.addEvent("mousemove", function(e) {
var t = -2 * e.client.x;
o.setStyle(("chrome" == Browser.name ? "-webkit-" : "") + "mask-position", t + "px 0")
});
var s = n.getElements("img")[1];
s && n.getParent().addEvent("mousemove", function(e) {
var t = -2 * e.client.x;
s.setStyle(("chrome" == Browser.name ? "-webkit-" : "") + "mask-position", t + "px 0")
})
}
正如您所想象的,我的解决方案不起作用。 目前我收到一个错误: Uncaught TypeError: n.getElement is not a function
恕我直言,它与定义我的 html 中不存在的 var o 有关(但是当我检查该网站的源代码时,变量中的元素无论如何都与我试图重现的元素无关)。 如何实现这种效果?
我当前的 jsfiddle 在这里: https://jsfiddle.net/kcpuz238/2/
function getElement
来自 jquery 之类的名为mootools
的库。 老实说,我以前从未听说过它。 我将代码转换为纯 js 并附在下面。
工作演示
var n = document.querySelector("#maskedImages"); if (n) { var s = n.querySelectorAll("img")[1]; s && n.addEventListener("mousemove", function(e) { var t = -2 * e.clientX; s.style["-webkit-mask-position"] = t + "px 0"; s.style["mask-position"] = t + "px 0"; }) }
section#test { background: url('https://images5.alphacoders.com/117/thumb-1920-1178361.jpg') center center/cover no-repeat; } section#test.masked { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 0 } section#test.masked img { width: 100%; height: 100%; object-fit: cover; position: absolute; left: 0; top: 0 } section#test.masked picture:nth-child(2) img { -webkit-mask-image: linear-gradient(-90deg, rgba(0, 0, 0, 0) 0, #000 50%); mask-image: linear-gradient(-90deg, rgba(0, 0, 0, 0) 0, #000 50%); -webkit-mask-position: 0 0; mask-position: 0 0; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-size: 200% auto; mask-size: 200% auto }
<section id="test"> <div class="container"> <div class="row"> <div class="col-lg-12 text-center link-danger"> testing background </div> </div> </div> <div class="masked" id="maskedImages"> <picture> <img src="https://images4.alphacoders.com/108/thumb-1920-1082562.jpg" alt="test" /> </picture> <picture> <img src="https://images3.alphacoders.com/108/thumb-1920-1082567.jpg" alt="test" /> </picture> </div> </section>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.