【问题标题】:How to Expand / Collapse a section of a Web Site and also change the image using JavaScript如何展开/折叠网站的一部分并使用 JavaScript 更改图像
【发布时间】:2014-07-25 09:50:29
【问题描述】:

编辑#1

感谢回复的 2 位用户,他们的解决方案非常有效!我在原帖中忘记提到的是,有没有办法调整用户的视图,以便当用户折叠展开的部分时,他们的“视图”(或实际网页)可以调整到锚点?

原帖

我希望首先折叠网站的某个部分,使其无法被用户查看。然后,当他们点击屏幕上的箭头时,将显示隐藏的内容,并且图像需要从“向下”箭头变为“向上”箭头。

我现在可以使用以下代码执行此操作,但我必须有两个箭头。任何人都可以帮助我在屏幕上只有一个箭头,并且它会根据用户点击它的时间而改变吗?我还希望用户可以无限次执行此操作(即,如果用户单击“向下”箭头,则该部分会展开并且箭头会变为“向上”箭头,但是当用户点击该“向上”箭头,该部分将折叠,并且箭头变回“向下”箭头。可能吗?

<script language="JavaScript" type="text/javascript">
<!--
function sizeTbl(h) {
var tbl = document.getElementById('tbl');
tbl.style.display = h;
}
// -->
</script> 
<br>

<a href="javascript:sizeTbl('none')"><img src="up_arrow.png"></a> 

<a href="javascript:sizeTbl('block')"><img src="down_arrow.png"></a>

感谢您的帮助!

【问题讨论】:

    标签: javascript jquery html image


    【解决方案1】:

    我已经添加了你的代码并为你创建了一个 jsfiddle...

    更改代码:-

    function sizeTbl(h) {
    
        var tbl = document.getElementById('container');
        tbl.style.display = h;
        if (h == "block") {
            document.getElementById('down').style.display = 'none';
            document.getElementById('up').style.display = 'block';
        } else {
            document.getElementById('up').style.display = 'none';
            document.getElementById('down').style.display = 'block';
    
        }
    }
    

    工作示例:- 点击查看示例:-http://jsfiddle.net/XUjAH/1089/

    谢谢

    【讨论】:

    • 谢谢。这非常适合我的想法。当用户折叠展开的部分时,是否有可能将页面调整回页面上的特定位置?
    【解决方案2】:

    我已经从你的sizeTbl 方法中取出了参数

    然后我得到图像的src 属性(注意我已经给它一个ID)。根据src,我们可以显示/隐藏表格并更改图像属性

    这是一个jsFiddle

    <script language="JavaScript" type="text/javascript">
    <!--
    
        function sizeTbl() {
    
            var tbl = document.getElementById('tbl');
            var icon = document.getElementById('toggle-table');
            if (icon.src === 'down_arrow.png'){
    
                tbl.style.display = 'block';
                icon.src = 'up_arrow.png';
            }
            else {
                tbl.style.display = 'none';
                icon.src = 'down_arrow.png';    
            }
        }
    
    // -->
    </script> 
    <br>
    
    <a href="javascript:sizeTbl()"><img src="down_arrow.png" id="toggle-table"></a>
    

    您在问题中添加了一些额外要求。您已标记 jQuery,这是此场景最简单的解决方案。

    从您的&lt;anchor&gt; 标记中删除javascript:sizeTbl()。这称为内联 JS,不建议这样做,因为这意味着您将演示代码与业务逻辑混合在一起。

    您使&lt;anchor&gt; 标记充当普通锚标记,并在文档的ready 事件中附加点击事件。

    function sizeTbl() {
        var tbl = document.getElementById('tbl');
        var icon = document.getElementById('toggle-table');
        if (icon.innerText === 'show') {
    
            tbl.style.display = 'block';
            icon.innerText = 'hide';
        } else {
            tbl.style.display = 'none';
            icon.innerText = 'show';
        }
    }
    
    $(document).ready(function(){
        $('#sizeTbl').on('click', sizeTbl);
    });
    

    我创建了一个新的 jsFiddle 来证明这一点。

    注意事项:

    • 你需要使用 jQuery 才能工作
    • 请注意,我已为&lt;anchor&gt; 标签指定了一个ID。这样我就可以在代码中找到它

    如果您有任何其他 cmets,那么 SO 的礼仪是提出新问题。否则答案会变得太长太复杂

    【讨论】:

    • 干得好!这确实起到了作用,尽管我实际上希望首先隐藏而不是显示内容,所以我在“if”和“then”部分交换了图标和表格显示。我要问的另一件事是我最初忘记提及的。有什么方法可以调整用户浏览器中的“视图”,以便当他们使用“向上”箭头折叠该部分时,视图会回到该部分的顶部?
    • @Slider257 你可以使用锚标签。示例见here
    • 感谢您的想法,但在您的解决方案中,我无法在链接中使用锚点,因为它已经具有“javascript:sizeTbl()”位代码。知道合并锚点的好方法,但只有在单击“折叠”视图时才可以?
    • 感谢您的更新。我喜欢这个想法,但我很难让它在我的场景中正常工作,因为我希望首先隐藏内容并且在扩展或压缩部分时需要发生图像更改。根据您的建议,我在这里提出了一个新问题:stackoverflow.com/questions/25004013/… 再次感谢,如果您想对新问题发表评论,我将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 2020-08-30
    • 2015-01-01
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    相关资源
    最近更新 更多