0

我有一组图像可以与 Javascript 中的另一组图像交换,但是当它在两个图像之间捕捉时看起来很难看。我希望它们褪色,并且我已经设法使用 CSS 中的网页背景来做到这一点。麻烦的是,我不能让它在图像上工作,我不知道为什么。

这是在图像之间更改的脚本:

    function change_img()
{
    document.images.logo.src = "Images/logo(w).png";
    document.images.about.src = "Images/About50(w).png";
    document.images.projects.src = "Images/Projects50(w).png";
    document.images.contact.src = "Images/Contact50(w).png";
}

function change_back()
{
    document.images.logo.src = "Images/logo.png";
    document.images.about.src = "Images/About50.png";
    document.images.projects.src = "Images/Projects50(2).png";
    document.images.contact.src = "Images/Contact50.png";
}

那是在文件的开头。然后我们有一个要交换的图像的示例:

<center><img class="transition" name="logo" src="Images/logo.png" height="300" style="z-index:1"></center>

这是由其他图像之一上的鼠标悬停事件激活的。总共有四个要更改。最后,我认为会触发转换的 CSS:

.transition{-webkit-transition: all 0.5s ease;
            -moz-transition: all 0.5s ease;
            -ms-transition: all 0.5s ease;
            -o-transition: all 0.5s ease;
            transition: all 0.5s ease;}

很简单,我将过渡规则固定在单个 CSS 规则中,并将其归因于每个图像。我是否以某种方式错误地链接了它?我不明白为什么这不起作用..

4

2 回答 2

0

我已经设法用 CSS 中的网页背景做到这一点

只有 webkit 浏览器支持背景渐变过渡。所以如果你想使用它继续使用背景。假设要交换的徽标是 2 并且它们的大小相等.. 例如 100 像素:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>talk</title>
<style>
#logo{
 width:100px;
 height:100px;
 -webkit-transition: background-image 1s ease-in-out;
 background-image:url("logo1.png");
}
#logo.anotherLogo {
 background-image:url("logo2.png");
}
</style>
<script>
var swap=function(){
 document.getElementById('logo').classList.toggle('anotherLogo');
}
window.onload=function(){
 document.getElementsByTagName('button')[0].addEventListener('click',swap,false);
}
</script>
</head>
<body>
<div id="logo"></div>
<button>swap logo</button>
</body>
</html>

解决方案 2,这个支持更多(适用于大多数现代浏览器,而不仅仅是 webkit 浏览器)

这需要一个 div 内的 2 个图像,并在 css 中使用绝对值,你可以看到更多 css

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>logo</title>
<style>
#logo{
 width:128px;
 height:128px;
}
#logo>img{
 position:absolute;
 width:128px;
 height:128px;
 -webkit-transition:opacity 1s ease-in-out;
}

#logo>img:nth-child(2){
 opacity:0;
}
#logo.anotherLogo>img:nth-child(2){
 opacity:1;
}
#logo.anotherLogo>img:nth-child(1){
 opacity:0;
}
</style>
<script>
var swap=function(){
document.getElementById('logo').classList.toggle('anotherLogo');
}
window.onload=function(){
document.getElementsByTagName('button')[0].addEventListener('click',swap,false);
}
</script>
</head>
<body>
<div id="logo">
<img src="logo1.png"/>
<img src="logo2.png"/>
</div>
<button>swap logo</button>
</body>
</html>

解决方案 3

在这种情况下,div 容器具有其中一个徽标的背景和内部图像。它也具有与您相同的结构,<center><img/></center>并且可以通过较少的修改来替换您现有的代码。但是标签“中心”是一个旧标签,不应该在现代网站中使用。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>logo</title>
<style>
#logo{
 width:128px;
 height:128px;
 background-image:url(logo2.png);
}
#logo>img{
 width:128px;
 height:128px;
 -webkit-transition:opacity 1s ease-in-out;
}
#logo.anotherLogo>img{
 opacity:0;
}
</style>
<script>
var swap=function(){
document.getElementById('logo').classList.toggle('anotherLogo');
}
window.onload=function(){
document.getElementsByTagName('button')[0].addEventListener('click',swap,false);
}
</script>
</head>
<body>
<div id="logo">
<img src="logo1.png"/>
</div>
<button>swap logo</button>
</body>
</html>

*ifu 想要一个特定大小的背景图像,您可以使用背景大小 css

background-size:contain;

包含调整图像大小,以便完整图像在您的 div 内

盖子装满你的容器

或者你也可以使用宽度和高度

background-size:100px 100px;

如果您想为您的多重交换功能提供更多帮助……请问。

于 2013-06-18T21:02:08.330 回答
0

CSS 可以“传输”的是 CSS 属性,而不是像src.

您应该在 DOM 中有两张图像,一张用于当前图像,一张用于新图像,并使后者淡入前者。

像这样的东西:

function change_img() {
    var img = document.getElementsByName("logo")[0],
        newImg = new Image();
    newImg.name = "logo";
    newImg.src = "Images/logo.png";
    img.parentNode.insertBefore(newImg, img.nextSibling);
    newImg.className = "transition";
    setTimeout(function() {img.parentNode.removeChild(img);}, 500);
    ...
}

这是 CSS 部分:

[name="logo"] + img {
    opacity: 0;
    transition: opacity 0.5s ease;
}
.transition {opacity: 1;}
于 2013-06-18T10:48:39.880 回答