javascript - 使用超时/间隔的 jQuery 图像幻灯片/旋转横幅问题

标签 javascript jquery html css timeout

我正在尝试使用 HTML、CSS、JavaScript 和 JQuery 为我的网站构建一个简单的网页。我想要的是在页面顶部显示我的一些图像的幻灯片。我只希望图片在用户关闭浏览器之前一个接一个地淡出和淡入。我希望每张图片显示一定的时间,之后它会淡出,另一张图片会淡入。

我提到了 this以及this在 SO 上发帖但找不到解决方案。我从 this 得到了一些想法页面并尝试开发一些代码。

网站整体布局如下:

This is what I want and I am getting, I just want to animate the photograph here

为此,我的 index.html 页面如下所示:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
    <title>Home Page</title>
    <link rel="stylesheet" href="css/style.css" />
    <script language="javascript" src="js/jquery-1.10.2.min.js"></script>
    <script language="javascript" src="js/common.js"></script>
    <script language="javascript" src="js/banner_rotator.js"></script>
</head>
<body onload="loadBody();">
<div id="wrapper">
    <img id="headerlogo" />
<div id="nav">
<a href="javascript: void(0);">Home</a>
<a href="javascript: void(0);">About</a>
<a href="javascript: void(0);">Weddings</a>
<a href="javascript: void(0);">Portraiture</a>
<a href="javascript: void(0);">Landscapes</a>
<a href="javascript: void(0);">Products</a>
<a href="javascript: void(0);">Miscellaneous</a>
<a href="javascript: void(0);">Services</a>
<a href="javascript: void(0);">Contact</a>
</div>
    <div id="container">
        <div id="content">
<!-- Main content starts here -->
<p>
Welcome to the world of The Siblings' photography.
</p>
imgpos = <span id="imgposspan"></span>
<!-- Main content ends here -->
        </div>
    </div>
</div>
</body>
</html>

CSS 是这样的:

body {
    background-color: transparent; color: #d0d0d0;
    font: normal normal 11px verdana; margin: 0 auto;
}
#wrapper {
    background-color: transparent; width: 960px; margin: 0 auto;
}
#headerlogo {
    border-radius: 0px 0px 5px 5px; display: block;
    width: 960px; height: 350px;
    background-color: #d0d0d0;
}
#container {
    width: 100%; margin-top: -35px;
}
#nav {
    background-color: transparent;
    color: #888888; border-radius: 5px; padding: 10px;
    width: 100%; position: relative; top: -40px;
}
#nav>a {
    border-radius: 5px; display: inline-block; padding: 5px 19px;
    font-weight: bold; border: 1px solid transparent;
    color: #888888; background: none none transparent no-repeat;
}
#nav>a:link {
    text-decoration: none; border-color: transparent; background-image: none;
}
#nav>a:visited {
    text-decoration: none; border-color: transparent; background-image: none;
}
#nav>a:hover{
    text-decoration: none; border-color: #ffa500; background-image: url("/img/1x30_ffa500.gif");
    background-repeat: repeat-x; box-shadow: 0px 0px 5px #ffd700;
}
#nav>a:active {
    text-decoration: underline; border-color: transparent;
    background-image: none;
}

#content {
    background-color: #f0f0f0; color: #202020;
    padding: 5px; border-radius: 5px;
}

common.js 文件是这样的:

$(document).ready(function (){
    var images = new Array();
    images[0] = new Image();
    images[0].src = "img/coverpics/sea_link.jpg";
    images[1] = new Image();
    images[1].src = "img/coverpics/marine_drive.jpg";
    images[2] = new Image();
    images[2].src = "img/coverpics/backbay.jpg"
    banner_rotator("headerlogo", images, 0);
});

banner_rotator.js 文件是这样的:

function banner_rotator(imgid, imgarray, imgpos) {
    setInterval(function() {
        if (imgpos >= imgarray.length || imgpos == undefined)
            imgpos = 0;
        $("#"+imgid).attr({ "src" : imgarray[imgpos].src });
        $("#"+imgid).fadeIn(1000, "linear");
        $("#"+imgid).delay(6500);
        $("#"+imgid).fadeOut(500);
        // $("#imgposspan").html(imgpos);
        imgpos++;
    }, 8000);
}

现在,我的问题描述如下:

  1. 前几秒顶部是空白的。图像没有显示,即使我正在开发并且所有文件都在我的本地机器上。

  2. 第一张图片直接在屏幕上弹出,而不是淡入。

  3. 此图像淡出后,图像 block 消失,就好像它被设置为 display: none; 一秒钟。图像后面的整个页面向上移动。然后,下一张图片淡入等等一切正常。

因此,简而言之,我在启动此幻灯片时遇到问题。有人可以帮忙吗?

另外,请告诉我我可以将代码放在哪里,以便这里的每个人都可以访问并亲自查看它是如何运行的?

JSFIDDLE

最佳答案

 <img id="headerlogo" />

不要那样做(没有 src 属性的图片标签)

放置一个 div 来容纳空间(在 css 中设置 position:relative 和 width & height)

那么问题是你在你的时间循环中改变你的 src 属性,这并不顺利

在您的 CSS 中,假设您将 slider 包装器命名为 headerlogo_wrapper

 div.headerlogo_wrapper > img {position:absolute;display:none;left:0;top:0}

然后你将你的图像附加到你创建的空间持有者(它们不会明显显示)

然后你 fadeIn 你的第一张图片然后你启动你的 setInterval :

//after having appended the images to the slider wrapper :

var $img = $("div.headerlogo_wrapper > img");
$img.eq(0).fadeIn(1000, "linear");
var ivisible = 0;


setInterval( function() {
$img.eq(ivisible).fadeOut(500);
++ivisible;
if (ivisible>$img.length-1) ivisible = 0;

$img.eq(ivisible).stop().fadeIn(1000, "linear");

}, 8000);

(如果您希望在加载过程中显示图像,只需进行一些简单的更改;此外,如果第一个间隔立即开始,您显然不需要“手动”淡入第一张图像)

关于javascript - 使用超时/间隔的 jQuery 图像幻灯片/旋转横幅问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19888941/

相关文章:

javascript - __lookupGetter__ VS getOwnPropertyDescriptor 检索 getter

javascript - jQuery 将外部 html 页面 &lt;title&gt; 插入另一个 html 页面

javascript - jQuery 获取文本但没有 html

javascript - 在网站中自动检测/选择语言的最有效方法?

html - Bootstrap : 100% height div inside a th with rowspan

javascript - 使用 d3 更新值

javascript - 是否可以在鼠标停止移动时触发事件?

javascript - jQuery获取div的值并显示到其他div

html - 文本/链接背景在渐变背景上应该是透明的,但为白色

javascript - 选择的 jquery 插件基本 ui 不起作用