Изменение размера JavaScript без проблемы с CSS3

#javascript #html #css

#javascript #HTML #css

Вопрос:

Я пишу расширение для Firefox, и одна из функций заключается в возможности добавления дополнительного «ряда» значков в интерфейсе. Я делаю это, используя комбинацию CSS и JavaScript, но у меня возникает странная проблема, если я слишком быстро нажимаю на кнопку «развернуть» или «заключить контракт», где добавляется случайное количество пикселей к высоте. Я думаю, это потому, что он получает высоту из css, и во время перехода он имеет «растущую» высоту, поэтому он выполняет уравнение JS с неправильной высотой.

CSS:

 #wrapper {
    background: rgba(0,0,0,.85);
    box-shadow: 0px 0px 5px #000;
    color: #fff;
    height: 100px;
    width: 250px;
            -moz-transition: height 1s;
}
  

JavaScript:

 function expand() {
            var orig = document.getElementById("wrapper").clientHeight;
            if (orig < 300) {
                var changed = orig   100;
                document.getElementById("wrapper").style.height=changed;
                // debug
                document.getElementById("print").innerHTML="height: "   changed   "px";
                // end debug
            } else {
                // do nothing
            }
        }
        function contract() {
            var orig = document.getElementById("wrapper").clientHeight;
            if (orig > 100) {
                var changed = orig - 100;
                document.getElementById("wrapper").style.height=changed;
                // debug
                document.getElementById("print").innerHTML="height: "   changed   "px";
                // end debug
            } else {
                // do nothing
            }
        }
  

HTML:

 <div id="wrapper">
    <a onclick="expand()">Exand Div</a> - <a onclick="contract()">Contract Div</a><br />
    <span id="print">height: 100px</span>
</div>
  

Комментарии:

1. Не могли бы вы пояснить, в чем заключается странная проблема?

2. ах, извините, я думал, что отредактировал это, должно быть, не нажал сохранить…

3. Какую версию Firefox нужно использовать, чтобы это работало? Я не вижу никакой проблемы … или какого-либо «перехода».

Ответ №1:

Событие transitionend может быть решением здесь.

Просто отключите обработчики onclick после нажатия, затем снова включите, когда transitionend сработает.

Комментарии:

1. Не могли бы вы дать мне фрагмент кода для просмотра? Я довольно новичок в JS ^^;