Skrollr:当我到达正确位置时,使div固定并居中

3

这是我第一次使用skrollr,所以在过去的几个小时里,我试了很多东西,以便更好地理解它。

计划是拥有一个建筑物的3D图像,当我滚动时,建筑物将旋转360度。我目前正在使用汽车作为示例,并且它在一个大的背景图像中,我根据我的位置更改背景的位置。这是我的一段代码片段:

<div data-0="" data-900="" class="skrollable skrollable-before ">                
            <div id="wrap"> 
                <div class="car" data-0="dispay:block;" data-50="display:none;background-position:!0 0px;"></div>
                <div class="car" data-0="display:none;" data-50="display:block;background-position:!0 -500px;" data-100="display:none;"></div>
                <div class="car" data-0="display:none;" data-100="display:block;background-position:!0 -1000px;" data-150="display:none;"></div>
                <div class="car" data-0="display:none;" data-150="display:block;background-position:!0 -1500px;" data-200="display:none;"></div>
                <div class="car" data-0="display:none;" data-200="display:block;background-position:!0 -2000px;" data-250="display:none;"></div>
                <div class="car" data-0="display:none;" data-250="display:block;background-position:!0 -2500px;" data-300="display:none;"></div>
            </div>
        </div>

这个功能已经正常工作了!

但是,这将会在一个长页面中被填充其他内容。我想做的是,在旋转时将建筑物固定在页面上。我尝试使用position:fixed,但我的所有其他内容都被拉动了,看起来有点奇怪。

我错过了什么吗?这应该如何完成?

我见过其他网站实现此功能的示例,我已经尝试检查代码以了解如何实现它,但我似乎找不到它。

任何帮助都将不胜感激!

编辑 ** 最终我得到的结果是:

<div class="wrap" 
        data-0="margin-top: -250px;" 
        data-_foobar--50="opacity: 0;" 
        data-_foobar-0="opacity: 1; display: block;"
            <div class="building"                
                data-_foobar-50="background-position:!0 0px;" 
                data-_foobar-100="background-position:!0 -500px;" 
                data-_foobar-150="background-position:!0 -1000px;"
                data-_foobar-200="background-position:!0 -1500px;" 
                data-_foobar-250="background-position:!0 -2000px;"
                data-_foobar-300="background-position:!0 -2500px;"
            >
            </div>
    </div>

我将“wrap”的位置固定,并设置为隐藏,一旦它在视口内使用常量,则显示。
var viewportHeight = $(window).height();
    var constantsData = Math.floor(viewportHeight * 1); 
    var s = skrollr.init({
        constants: {
            foobar: constantsData
        }
    });

你说的“all my other content then gets pulled around”是什么意思? - Brian Glaz
抱歉,我的意思是一旦我设置了position:fixed,它就会将其移出内容,因此其他内容会一起移动(也就是说,该div不再有间隙——这有意义吗?)我正在尝试使我的动画保持在中心位置,类似于:http://eone-time.com/(向下滚动直到手表随滚动而旋转-它会保持在中间位置并且不会向上滚动) - user1788364
要做类似的事情,我只需创建一个空的 div 并为其设置足够的高度,以便在下一组内容滚动到位之前可以运行整个动画。 - Brian Glaz
我希望它像一次性网站上那样保持在原位。但是,整个过渡过程非常不流畅,因为如果我在滚动了X量后将其从position:fixed切换到position:relative,它看起来很抖动。 - user1788364
1个回答

2
将您的建筑div置于body标签下或具有相对位置的根元素下。
<body>
   <div class="building"></div>

.building
{
  position: fixed;
  z-index: 99;
  top: 10px;
  left: 10px;
  background-image: url(...)
}

您可以根据需要更改顶部和左侧位置。现在,不需要使用许多具有不同data-..的div,您只需要使用以下代码:

 <div class="building" data-50="transform: rotate(45deg)" data-150="transform: rotate(90deg)" data-300="transform: rotate(135deg)"></div>

等等……

我在许多网站上都使用了skrollr,以下是链接,如果您想检查源代码:

http://kiterungame.com/ http://lifesocks.me/


嗨,艾利,知道我可以把所有东西放在一个div里真的很有帮助(现在我已经改变了,谢谢!)。固定位置的方法可以解决问题,但是我该如何告诉它仅对该部分进行固定定位呢?想象一下,我有3个部分-顶部部分是一些文本和普通图像,中间部分是我的skrollx动画建筑-然后第三部分是更多的内容/图像。当我到达中间部分时,我希望它显示固定的建筑物,而不是随着旋转而向上滚动(这有意义吗?) - user1788364
谢谢 Elie,感谢你的所有帮助。我按照你说的做了,确实起作用了,但接着遇到了一个问题。因为用户的显示器差别很大,例如 data-1000 的数据也会不同。所以如果有人使用小屏幕,视口高度为 600 像素,则需要滚动额外的 400 像素才能看到时钟。这是 'data-anchor-target' 起作用的地方吗?理想情况下,我想将我的 '.second' div 设置为相对于时钟,以便无论屏幕大小如何,都可以说当它到达那里时就开始计时。这是我的当前配置:http://lucymo.co.uk/_skrollr/index2.html - user1788364
不要这样,你应该使用常量,检查lifesocks.me网站底部的脚本。 - Elie Andraos
您不需要使用滚动菜单,它是另外一种东西。基本上,您需要获取视口高度并根据其设置常量,然后例如使用data- _foo,其中foo是一个已定义的常量。我在lifesocks.me上遇到了同样的问题。 - Elie Andraos
谢谢Elie的帮助。因为有你,我成功设置了常量,并且基本按照我的想法完成了!非常感谢 :) 我会更新我的帖子,并分享我所做的大部分内容。 - user1788364
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接