хотел: простой HTML-файл, который раскрывает треугольник <div>скрыть / показать - PullRequest
1 голос
/ 13 марта 2011

У меня есть программа, которая производит текстовый отчет. Я хочу, чтобы он создавал отчет в формате HTML с несколькими раскрывающимися треугольниками, чтобы при щелчке по треугольнику отчет отображался или скрывался. Я согласен с тем, чтобы встроить JavaScript в файл, но я действительно хочу все это в одном файле, без каких-либо дополнительных файлов. Есть ли простой способ сделать это с современными браузерами?

Ответы [ 5 ]

4 голосов
/ 16 июня 2016

Если вам не нужна совместимость с Internet Explorer, вы можете использовать html-тег: http://www.w3schools.com/tags/tag_details.asp

Это очень быстрый способ создания прототипов раскрывающих треугольников. Например:

<details>
  <summary>The contents of the summary tag is always visible</summary>
  <p>Everything else inside the details tag will be hidden in a disclosure triangle</p>
</details>
2 голосов
/ 13 марта 2011

Самый простой способ - что-то вроде этого:

<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<style>.wrapper div { display:none;}</style>
<script>
  $(function() {
     $('.wrapper h2').click(function() { $(this).next().toggle();}); 
  });
 </script>
</head>
<body>
<div class="wrapper">
    <h2>Example header 1</h2>
    <div>bodytext 1</div>
</div>
<div class="wrapper">
    <h2>Example header 2</h2>
    <div>bodytext 2</div>
</div>
<div class="wrapper">
    <h2>Example header 3</h2>
    <div>bodytext 3</div>
</div>
</body>
</html>

Я сделал простой рабочий пример здесь: http://jsfiddle.net/NXuQt/1/

Это не красиво, но должно дать вампростой шаблон, который вам нужен.

Обратите внимание, что в этом решении весь заголовок можно щелкать ... Я полагаю, что добавление изображения и его изменение в рамках события click - это то, о чем вы можете позаботиться самостоятельно, в противном случае дайте мне знать:)

Примечание: javascript основан на включении библиотеки jQuery.

РЕДАКТИРОВАТЬ: я обновил ответ, чтобы скопировать / вставить готовый рабочий код, причина, по которой вы не смогли заставить его работатькак бы то ни было, потому что я взял только самое необходимое из примера со скрипкой.Скрипка автоматически запустила инициализацию обработчика кликов в DOMready, в которую теперь встроен обновленный пример:)

1 голос
/ 13 марта 2011

CSS:

.hidden {
    display: none;
}

Javascript:

function createSection(section, hidden) {
    var triangle = section.children[0]; // assumes the triangle image is the first child of a section (see HTML)
    var contents = section.children[1];
    triangle.onclick = function() {
        if (contents.className.indexOf("hidden") != -1) { // the section is hidden
            contents.className = contents.className.replace("hidden", "");
        } else { // the section wasn't hidden
            contents.className += " hidden";
        }
    }
    if (hidden) {
        contents.className += " hidden";
    }
}

    // Create the sections when window loads
window.onload = function() {
    createSection(document.getElementById("section1"));
    createSection(document.getElementById("section2"), true);
}

HTML:

<div id="section1">
    <img src="triangle.jpg"></img>
    <div>This is the section content</div>
</div>
<div id="section2">
    <img src="triangle.jpg"></img>
    <div>this section is hidden by default</div>
</div>

Очевидно, вам придется изменить некоторые вещи в свой HTML-файл

1 голос
/ 13 марта 2011

С прямым HTML, нет. Это не то, для чего это. Вам, скорее всего, придется использовать язык сценариев, либо JavaScript, либо VBScript.

Это скрипт, который я использовал в прошлом (не мой, но у меня нет URI оригинала):

var timerlen = 5;
var slideAniLen = 250;

var timerID = new Array();
var startTime = new Array();
var obj = new Array();
var endHeight = new Array();
var moving = new Array();
var dir = new Array();

function slidedown(objname)
{
    if(moving[objname])
        return;

    if(document.getElementById(objname).style.display != "none")
        return; // cannot slide down something that is already visible

    moving[objname] = true;
    dir[objname] = "down";
    startslide(objname);
}

function slideup(objname)
{
    if(moving[objname])
        return;

    if(document.getElementById(objname).style.display == "none")
        return; // cannot slide up something that is already hidden

    moving[objname] = true;
    dir[objname] = "up";
    startslide(objname);
}

function startslide(objname)
{
    obj[objname] = document.getElementById(objname);

    endHeight[objname] = parseInt(obj[objname].style.height);
    startTime[objname] = (new Date()).getTime();

    if(dir[objname] == "down")
    {
        obj[objname].style.height = "1px";
    }

    obj[objname].style.display = "block";

    timerID[objname] = setInterval('slidetick(\'' + objname + '\');',timerlen);
}

function slidetick(objname)
{
    var elapsed = (new Date()).getTime() - startTime[objname];

    if (elapsed > slideAniLen)
    {
        endSlide(objname)
    }
    else 
    {
        var d =Math.round(elapsed / slideAniLen * endHeight[objname]);
        if(dir[objname] == "up")
            d = endHeight[objname] - d;

        obj[objname].style.height = d + "px";
    }

    return;
}

function endSlide(objname)
{
    clearInterval(timerID[objname]);

    if(dir[objname] == "up")
        obj[objname].style.display = "none";

    obj[objname].style.height = endHeight[objname] + "px";

    delete(moving[objname]);
    delete(timerID[objname]);
    delete(startTime[objname]);
    delete(endHeight[objname]);
    delete(obj[objname]);
    delete(dir[objname]);

    return;
}

function toggleSlide(objname)
{
    if(document.getElementById(objname).style.display == "none")
    {
        // div is hidden, so let's slide down
        slidedown(objname);
    }
    else
    {
        // div is not hidden, so slide up
        slideup(objname);
    }
}

Вы бы присвоили вызов toggleSlide () событию onclick () элемента, который вы хотите переключить.

0 голосов
/ 14 марта 2011

Что ж, после некоторой возни я смог создать файл, который делает то, что я хочу, используя файлы switchcontent.js и switchicon.js javascript, которые я нашел в http://www.dynamicdrive.com/dynamicindex17/switchcontent2.htm

Вот мой код, основанный на редактировании их кода:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Dynamic Drive DHTML scripts- Switch Content Script II (icon based)</title>
<script type="text/javascript" src="switchcontent.js" ></script>
<script type="text/javascript" src="switchicon.js"></script>
<style type="text/css">
/* Specifies title style */
.iconspan{
  margin: 3px;
  cursor:hand;
  cursor:pointer;
  font-weight: bold;
}
</style>
</head>
<body>
<span id="faqtable1-title" class="iconspan"></span>
How hot is our Sun?<br/>
<div id="faqtable1" class="icongroup2">
The surface of the Sun is around 5800 Kelvin, while the core reaches over 15 million Kelvin.
</div>
<br>

<span id="faqtable2-title" class="iconspan"></span>
How big is our Sun in terms of mass?  <br/>
<div id="faqtable2" class="icongroup2">
The contains more than 99.8% of the total mass of our Solar System.
</div>
<script type="text/javascript">
var faqtable=new switchicon("icongroup2", "div") 
faqtable.setHeader('▼', '▶') //Set header HTML
faqtable.collapsePrevious(false) //Allow more than 1 content to be open simultanously
faqtable.setPersist(true, 7) //Enable persistence to remember last switch content states for 7 days
faqtable.init()
</script>
</body>
</html>

В закрытом виде это выглядит так:

▶ How hot is our Sun?
▶ How big is our Sun in terms of mass? 

И это при открытии:

▼ How hot is our Sun?
The surface of the Sun is around 5800 Kelvin, while the core reaches over 15 million Kelvin.
▼ How big is our Sun in terms of mass? 
The contains more than 99.8% of the total mass of our Solar System.
...