23

我想做的就是在页面加载时淡入我的徽标。我今天是 jQuery 的新手,我无法在加载时淡入淡出,请帮忙。抱歉,如果这个问题已经得到解答,我已经看过并尝试针对不同的问题调整其他答案,但似乎没有任何效果,它开始让我感到沮丧。

谢谢。

代码:

<script type="text/javascript">                                         
$(function () {
.load(function () {
      // set the image hidden by default    
      $('#logo').hide();.fadeIn(3000);
                                }}                     
 </script>                
    <link rel="stylesheet" href="challenge.css"/>  
<title>Acme Widgets</title>         
  </head>     
  <body> 
     <div id="wrapper"> 
     <div id="header">
     <img id="logo" src="logo-smaller.jpg" /> 
     </div>
      <div id="nav">
      navigation
     </div>
      <div id="leftCol">
      left col
     </div>
      <div id="rightCol">
        <div id="header2">
        header 2
        </div>
        <div id="centreCol">
        body text
        </div>
        <div id="rightCol2">
        right col
        </div>
     </div>
     <div id="footer">
     footer
     </div>
     </div>
  </body>
</html>
4

13 回答 13

49

这个线程似乎有不必要的争议。

如果您真的想正确解决这个问题,请使用 jQuery,请参阅下面的解决方案。

问题是“jQuery 如何让图像在加载时淡入?”

首先,快速说明。

这不是 $(document).ready 的好候选...

为什么?因为在加载 HTML DOM 时文档就准备好了。此时徽标图像还没有准备好 - 实际上它可能仍在下载!

所以首先回答一般问题“jQuery How do you get an image to fade in on load?” - 此示例中的图像具有 id="logo" 属性:

$("#logo").bind("load", function () { $(this).fadeIn(); });

这正是问题所要求的。当图像加载后,它会淡入。如果你改变图像的来源,当新的来源加载时,它会淡入。

有一条关于在 jQuery 旁边使用 window.onload 的评论。这是完全可能的。有用。可以办到。但是,window.onload 事件需要特别小心。这是因为如果您多次使用它,您会覆盖之前的事件。示例(随意尝试...)。

function SaySomething(words) {
    alert(words);
}
window.onload = function () { SaySomething("Hello"); };
window.onload = function () { SaySomething("Everyone"); };
window.onload = function () { SaySomething("Oh!"); };

当然,您的代码中不会有三个如此接近的 onload 事件。您很可能有一个执行加载操作的脚本,然后添加您的 window.onload 处理程序以淡入您的图像 - “为什么我的幻灯片停止工作!!?” - 因为 window.onload 问题。

jQuery 的一个重要特性是,当您使用 jQuery 绑定事件时,它们都会被添加。

所以你有它 - 问题已被标记为已回答,但根据所有评论,答案似乎不足。我希望这可以帮助任何来自世界搜索引擎的人!

于 2010-03-26T20:39:56.863 回答
20

第 5 行出现语法错误:

$('#logo').hide();.fadeIn(3000);

应该:

$('#logo').hide().fadeIn(3000);
于 2009-09-05T17:51:44.600 回答
10

只需将徽标的样式设置为display:hidden并调用fadeIn,而不是先调用hide

$(document).ready(function() {
    $('#logo').fadeIn("normal");
});

<img src="logo.jpg" style="display:none"/>
于 2009-09-05T17:51:53.693 回答
6

要对多个图像执行此操作,您需要通过一个.each()函数运行。这可行,但我不确定它的效率如何。

$('img').hide();
$('img').each( function(){
    $(this).on('load', function () {
        $(this).fadeIn();
    });
});
于 2011-11-06T22:49:22.737 回答
5

使用来自 Sohnee 和 karim79 的示例。我对此进行了测试,它在 FF3.6 和 IE6 中都有效。

<script type="text/javascript">
    $(document).ready(function(){
        $("#logo").bind("load", function () { $(this).fadeIn('slow'); });
    });
</script>

<img src="http://www.gimp.org/tutorials/Lite_Quickies/quintet_hst_big.jpg" id="logo" style="display:none"/>
于 2010-09-21T20:38:16.493 回答
4

window.onload 不是那么值得信赖。我会使用:

<script type="text/javascript">
    $(document).ready(function () {
        $('#logo').hide().fadeIn(3000);
    });
</script>
于 2010-01-11T01:54:05.660 回答
4

使用Desandro 的 imagesloaded插件

1 - 在 CSS 中隐藏图像:

#content img { 
    display:none; 
}

2 - 使用 javascript 加载图像时淡入淡出:

var imgLoad = imagesLoaded("#content");
imgLoad.on( 'progress', function( instance, image ) {
    $(image.img).fadeIn();
});
于 2014-09-21T12:53:47.570 回答
4

关键是使用$(window).load(function(){}所以我们知道图像已加载。通过 css 函数隐藏图像,然后使用 fadeIn 将其淡入:

$(function() {

  $(window).load(function(){
    $('#logo').css({visibility: 'visible', opacity: 0}).fadeIn(1000);
  });

});

想法来自:http ://www.getpeel.com/

于 2011-05-09T16:19:40.763 回答
3

就像 Sohne 提到的那样,但我会补充一点:

$("img").hide();

$("img").bind("load", function () { $(this).fadeIn(); });

或者:

$("img").bind("load", function () {
 $(this).css({opacity: 0, visibility: "visible"}).animate({opacity: 1}, "slow"); 
});
于 2011-04-05T22:06:59.557 回答
3

好的,所以我做了这个并且它有效。它基本上是从这里的不同响应中破解的。由于在这个线程中仍然没有一个明确的答案,我决定发布这个。

<script type="text/javascript">
  $(document).ready(function () {
    $("#logo").hide();
    $("#logo").bind("load", function () { $(this).fadeIn(); });
  });
</script>

在我看来,这似乎是最好的方法。尽管 Sohnee 的意图是最好的,但他没有提到必须首先使用 CSS 将对象设置为 display:none。这里的问题是,如果出于某种原因,用户的 JS 无法正常工作,那么该对象将永远不会出现。不好,特别是如果它是 frikin' 标志。

此解决方案将项目单独留在 CSS 中,并首先隐藏,然后使用 JS 将其全部淡入。这样,如果 JS 无法正常工作,该项目将正常加载。

希望能帮助任何偶然进入这个谷歌排名第一的不太有用的线程的人。

于 2011-02-08T11:00:57.450 回答
2

CSS3 + jQuery 解决方案

我想要一个不使用 jQuery 的淡入淡出效果的解决方案,因为这会导致许多移动设备出现延迟。

借用史蒂夫芬顿的回答,我已经改编了一个版本,它使用 CSS3 过渡属性和不透明度来淡入图像。这也考虑了浏览器缓存的问题,在这种情况下,图像不会使用 CSS 显示出来。

这是我的代码和工作小提琴

HTML

<img src="http://placehold.it/350x150" class="fade-in-on-load">

CSS

.fade-in-on-load {
    opacity: 0;
    will-change: transition;
    transition: opacity .09s ease-out;
}

jQuery 代码段

$(".fade-in-on-load").each(function(){
    if (!this.complete) {
        $(this).bind("load", function () {
            $(this).css('opacity', '1');
        });
    } else {
        $(this).css('opacity', '1');
    }
});

这里发生的是您想要在加载时淡入的图像(或任何元素),需要.fade-in-on-load事先将类应用于它。这将为其分配 0 不透明度并分配过渡效果,您可以编辑淡入淡出速度以在 CSS 中品尝。

然后 JS 将搜索具有该类的每个项目并将加载事件绑定到它。完成后,不透明度将设置为 1,图像将淡入。如果图像已经存储在浏览器缓存中,它将立即淡入。

将其用于产品列表页面。

这可能不是最漂亮的实现,但效果很好。

于 2014-08-25T22:26:33.920 回答
2

我尝试了以下一个但没有奏效;

    <span style="display: none;" id="doneimg">
        <img alt="done" title="The process has been complated successfully..." src="@Url.Content("~/Content/App_Icons/icos/tick_icon.gif")" />
    </span>

    <script type="text/javascript">
        //$(document).ready(function () {
            $("#doneimg").bind("load", function () { $(this).fadeIn('slow'); });
        //});
    </script>

但是以下一个工作得很好;

<script type="text/javascript">
        $(document).ready(function () {
            $('#doneimg').fadeIn("normal");
        });
</script>

            <span style="display: none;" id="doneimg">
                <img alt="done" title="The process has been complated successfully..." src="@Url.Content("~/Content/App_Icons/icos/tick_icon.gif")" />
            </span>
于 2011-02-19T10:37:00.390 回答
-3

我知道答案了!您需要使用如下所示的 window.onload 函数。感谢技术人员和卡里姆的帮助。注意:您仍然需要使用文档准备功能。

window.onload = function() {$('#logo').hide().fadeIn(3000);};
$(function() {$("#div").load(function() {$('#div').hide().fadeIn(750);); 

当放置在图像之后,它也对我有用......谢谢

于 2009-09-06T14:39:36.183 回答