【问题标题】:How do I change my background on scroll using CSS?如何使用 CSS 更改滚动背景?
【发布时间】:2021-12-12 14:37:06
【问题描述】:

我的网站有完美的全页背景图片。我从css tricks 获取了它的代码。

如果您访问我的网站,您可以看到它的实际效果:<site no longer available>

我想知道的是,有没有办法让我在滚动一定长度后将此图像更改为不同的图像?

我的目标是拥有相同的图像,但从狗嘴里冒出一个对话泡泡,我猜 2 张图像可以做到这一点。

这只能在 CSS 中实现吗?

这是我目前正在使用的代码。

html { 
background: url(http://robt.info/wp-content/uploads/2013/06/funny-kids-comic-animals.jpg) no-repeat center center fixed; 
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
}

【问题讨论】:

  • 从类似的问题中检查我的answer
  • 我认为仅使用 CSS 是不可能的。我认为没有办法可以从没有 javascript 的元素中检测到“scrollTop”或“可见性”。
  • 我也是这么想的。最好的方法是什么?我是否必须牺牲“完美的整页背景”才能实现?

标签: css image background scroll


【解决方案1】:

正如其他人已经说过的,不,你不能只用CSS,但一点点js code 可以为你做。

例如

jQuery(window).scroll(function(){
    var fromTopPx = 200; // distance to trigger
    var scrolledFromtop = jQuery(window).scrollTop();
    if(scrolledFromtop > fromTopPx){
        jQuery('html').addClass('scrolled');
    }else{
        jQuery('html').removeClass('scrolled');
    }
});

在你的 CSS 文件中:

html {
    background-repeat: no-repeat;
    background-position: center center;
    background-attachment: fixed;
    -webkit-background-size: cover;
    -moz-background-size: cover;
    -o-background-size: cover;
    background-size: cover;
}

html {
    background-image:url(http://robt.info/wp-content/uploads/2013/06/funny-kids-comic-animals.jpg);
}

html.scrolled {
    background-image:url(http://robt.info/wp-content/uploads/2013/06/funny-kids-comic-animals_2.jpg);
}

所以基本上你是用javascript(在这种情况下是jQuery)在距离顶部一定距离的HTML tag中添加或删除一个类......以及CSS,改变那个图像。

现在……您可以对图像应用一些过渡效果,或者使用代码使其成为 slideToggle,而不是更改类……以及许多其他选项。

祝你好运

编辑: 小提琴示例:http://jsfiddle.net/pZrCM/

【讨论】:

  • 是否可以轻松添加更多图像,例如 400 和 700 像素?
  • 如果是easy or not 不是问题... 你必须找出你想做什么以及如何做,然后找到最好的系统来做。 因此,如果您想要一张非常大的肖像图片,只需向下滚动即可看到它...或者添加更多图片,您将获得相同的效果。但是...我们在这里与jQuery 交谈的方式实际上与页面交互,这取决于用户的移动(在这种情况下是滚动)所以乱七八糟的changes an object style properties 修改DOM。
  • 忘记了之前的评论,我误解了这个问题。是的,这很简单,只需在scroll function 中添加几个if elseif else
  • 好的,关于位置的基本background-image 更改在您的示例中有效(谢谢),但是有没有办法让它在 IE 中也有效?我知道,这是一个愚蠢的问题,但我不得不问。实际上,它在 IE 中工作(至少 8 个),但是每当发生更改时(在上面的示例中超过 200 像素),屏幕(或者更可能是具有切换背景的元素)都会闪烁。无论如何告诉IE(也许)预加载背景?或者也许使用较小的背景文件?谢谢
  • 不确定我是否理解您的问题,我给出的示例已在 CR、FF、IE10/09/8/7/6 中测试并运行。您能否尝试解释一下……或者,如果问题与 OP 不同,请打开一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-31
  • 2020-04-20
  • 2017-12-27
  • 2017-06-28
  • 1970-01-01
相关资源
最近更新 更多