首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法在DIV中实现视差?

有没有办法在DIV中实现视差?
EN

Stack Overflow用户
提问于 2013-03-18 03:57:30
回答 1查看 10.9K关注 0票数 2

可能完全找错了树,但你能用div背景图像元素制作一个视差滚动图像吗?

我想要发生的是,我目前有一些DIVs的图像与文本效果滚动,但我,因为我正在使用视差的背景图像,我想保持与所有网站的图像的3D主题。

编辑:例如,是否可以使此页面上的蓝色框:

Www.parkhalmanor.co.uk/new

使用视差效果滚动单独的图像?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-18 04:47:26

是的,这是可能的。

正如你可能知道的那样,正常的视差效果只是将一张bg图像放在body标签上,并在滚动时改变其背景偏移量,或者在其上移动一些div,速度比滚动速度慢。

由于您希望在每个窗口中都有单独的图像,因此需要使用背景偏移方法。在CSS中,每个div都是这样的:

代码语言:javascript
运行
复制
#div1 {
    background: url('/ui/div1bg.jpg') 0 -800px no-repeat;
}

0 -800px就是background-position。当窗口向下滚动时,您希望通过逐渐增加第二个值来向下移动背景,以模拟透视。在模拟的视角中,较远的物体缓慢地从你身边经过,较近的物体移动得很快。

因此,您只需获取scroll事件:

代码语言:javascript
运行
复制
$(window).scroll(function () {
    parallax();
});

收集您将使用的指标:

代码语言:javascript
运行
复制
function parallax() {
    var ev = {
        scrollTop: document.body.scrollTop || document.documentElement.scrollTop
    };
    ev.ratioScrolled = ev.scrollTop / (document.body.scrollHeight - document.documentElement.clientHeight);
    render(ev);
}

并呈现更改:

代码语言:javascript
运行
复制
function render(ev) {
    var t = ev.scrollTop;
    var y = Math.round(t * 2/3) - 800;
    $('#div1, #div2, #div3').css('background-position', '0 ' + y + 'px');
}

因此,随着t变量的增加(用户向下滚动),图像会以2/3的速率移动。它从-800px开始,一旦用户向下滚动到1200px,它就会逐渐变为0。如果页面长度超过1200px,并且元素仍然可见,则必须调整数学运算,因为在此之后,代码将滚动经过图像顶部。如果到那个时候它们已经超过了元素,那么你可以忽略它。

显然,您应该调整那里的数字,以获得适合您的div和图像的效果。

如果你想把它建立在总页面高度上,不管它是什么,你可以使用上面的第二个指标.ratioScrolled,如下所示:

代码语言:javascript
运行
复制
var y = Math.round((1 - ev.ratioScrolled) * -100);

因此,举个例子,如果你有一个高度为150px的div和一个高度为250px的图片,上面的图片将完美地工作-它从-100px开始(向上移动),当页面滚动时,无论它有多长,它都会以0px结束(没有移位-所以底部的100px被裁剪了)。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15465481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档