javascript - 有没有更简单的方法来实现多个 if else JavaScript?

标签 javascript html css

<分区>


关闭 9 年前

  • 要求提供代码的问题必须表现出对所解决问题的最低限度的理解。包括尝试过的解决方案、为什么它们不起作用,以及预期结果。另请参阅:Stack Overflow question checklist
  • 关于您编写​​的代码问题的问题必须在问题本身中描述具体问题 — 并且包括有效代码 以重现它。参见 SSCCE.org寻求指导。

所以我是 JS 的新手并写了这篇文章。基本上,我用绝对位置和 0 不透明度堆叠图像,当您单击一个按钮时,它会将图片的不透明度设为 1,然后将其余图片的不透明度设为 0。其中还有一个过渡效果。无论如何,如果您查看我代码中的 JavaScript,我的问题是:

A:我这样做对吗? B:有没有更好的方法不用那么多代码?

相关代码如下:

<div id="navwrap">

<a href="#" onclick="toggle()">pic 1</a>
<a href="#" onclick="toggle2()">pic 2</a>
<a href="#" onclick="toggle3()">pic 3</a>
<a href="#" onclick="toggle4()">pic 4</a>

</div>

<img id="pic1" class="pic" src="http://miriadna.com/desctopwalls/images/max/Ideal-landscape.jpg">

<img id="pic2" class="pic" src="http://www.hdwallpaperscool.com/wp-content/uploads/2013/11/nature-landscape-hd-wallpapers-widescreen-nature-desktop-images.jpg">

<img id="pic3" class="pic" src="http://images.fanpop.com/images/image_uploads/JAPAN-LANDSCAPE-japan-419407_1920_1440.jpg">

<img id="pic4" class="pic" src="http://www.personaltouchcolorado.com/wp-content/uploads/2013/01/Lawn-Landscape.jpg">

<script>
var w=document.getElementById('pic1'); 
var x=document.getElementById('pic2');
var y=document.getElementById('pic3');
var z=document.getElementById('pic4');
</script>

<script>
function toggle()
{
    if (w.style.opacity=='0')
    {
        w.style.opacity='1';
    }
    else
    {
        w.style.opacity='0';
    }
    if (w.style.opacity=='1')
    {
        w.style.opacity='1';
    }
    else
    {
        w.style.opacity='1';
    }
    {
        x.style.opacity='0';
    }
    {
        y.style.opacity='0';
    }
    {
        z.style.opacity='0';
    }
}
</script>

<script>
function toggle2()
{
    if (x.style.opacity=='1')
    {
        x.style.opacity='0';
    }
    else
    {
        x.style.opacity='1';
    }
    if (x.style.opacity=='1')
    {
        x.style.opacity='1';
    }
    else
    {
        x.style.opacity='1';
    }
    {
        w.style.opacity='0';
    }
    {
        y.style.opacity='0';
    }
    {
        z.style.opacity='0';
    }
}
</script>

<script>
function toggle3()
{
    if (y.style.opacity=='1')
    {
        y.style.opacity='0';
    }
    else
    {
        y.style.opacity='1';
    }
    if (y.style.opacity=='1')
    {
        y.style.opacity='1';
    }
    else
    {
        y.style.opacity='1';
    }
    {
        w.style.opacity='0';
    }
    {
        x.style.opacity='0';
    }
    {
        z.style.opacity='0';
    }
}
</script>

<script>
function toggle4()
{
    if (z.style.opacity=='1')
    {
        z.style.opacity='0';
    }
    else
    {
        z.style.opacity='1';
    }
    if (z.style.opacity=='1')
    {
        z.style.opacity='1';
    }
    else
    {
        z.style.opacity='1';
    }
    {
        w.style.opacity='0';
    }
    {
        x.style.opacity='0';
    }
    {
        y.style.opacity='0';
    }
}
</script>

最佳答案

参数化调用:

<a href="#" onclick="toggle(1)">pic 1</a>
<a href="#" onclick="toggle(2)">pic 2</a>
<a href="#" onclick="toggle(3)">pic 3</a>
<a href="#" onclick="toggle(4)">pic 4</a>

并制作一个更智能的函数:

function toggle(id)
{
    var el = document.querySelectorAll('.pic');
    for(var i = 0; i != el.length; i++)
        el[i].style.opacity = 0;
    document.getElementById('pic'+id).style.opacity = 1;
}

document.querySelectorAll 仅适用于较新的浏览器(特别不适用于 IE8 或更低版本),但这是相当学术的 - 在生产站点上,您将使用像 Mootools 或 jQuery 这样的库来抽象它在下面。

关于javascript - 有没有更简单的方法来实现多个 if else JavaScript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20713827/

上一篇:css - 如何在CSS中平滑浮雕

下一篇:html - 使用下拉动画创建纯 css 子菜单时出现问题

相关文章:

javascript - Firefox javascript错误函数 "undefined"在IE中工作正常

javascript - AngularJS ng-template with ng-messages-include

javascript - 响应式设计。 float div 的网格布局,但有一个异常(exception)

css - 将标题和字段放在其他联系表旁边 7

javascript - 导航 100% 分布在一个 div 中,填充均匀

html - overflow 仅适用于元素符号,不适用于 li 的内容

javascript - OpenLayers MouseUp 事件 - 鼠标仍然拖动 map

Javascript 性能 : multiple fooBaz VS multiple Foo. Bar.Baz

javascript - 如何从 Chrome 扩展程序中的新选项卡中打开 URL?

javascript - 利用 HTML5 中的前景和背景 Canvas