Переход по высоте с использованием стиля javascript.высота

#javascript #html #css

Вопрос:

Чтобы управлять свойством высоты, поэтому я использую javascript, а не jquery, тогда у меня возникла проблема.
Проблема в том, что я не могу изменить высоту обратно на ноль, как только я установил высоту прокрутки элемента.

Вот мой js-код:

 let isClosed = true;
var cals = document.getElementsByClassName('h-strench-box');

for (var i = 0; i < cals.length; i   ) {
   cals[i].addEventListener('click', function(e) {
       if (isClosed) {
           this.classList.add('h-strench-box-out');
           var content = this.querySelector('.h-strench-content');
           content.style.height = content.scrollHeight   'px';
           isClosed = false;
       } else {
           if (this.classList.contains('h-strench-box-out')) {
               this.classList.remove('h-strench-box-out');

               // this.querySelector('.h-strench-content').style.height = '0';
               // This not working
               isClosed = true;
           } else {
               for (var j = 0; j < cals.length; j   ) {
               cals[j].classList.remove('h-strench-box-out');
               cals[j].querySelector('.h-strench-content').style.height = '0';
               // This not working
               }
           this.classList.add('h-strench-box-out');
           var content = this.querySelector('.h-strench-content');
           content.style.height = content.scrollHeight   'px';
           }
        }
                        
    });
}
 

CSS

 .h-strench-content {
    height: 0;
    padding: 0;
    display: none;
    overflow: hidden;
    transition: height 0.4s ease-in;
}
.h-strench-box-out .h-strench-content {
    display: block;
}
.h-strench-btn {
    transition: transform 0.3s ease-out;
}
.h-strench-btn::before {
    content: 'f13a';
    font-family: "Font Awesome 5 Free";
    font-size: 27px;
    font-weight: 600;
}
 

Еще один вопрос. Как я могу изменить значение высоты(B), а не element.style (A). Пожалуйста, сравните изображение ниже. Пожалуйста, помогите, спасибо!

введите описание изображения здесь

Ответ №1:

Первый шаг: убедитесь, что вызовы querySelector возвращают правильные элементы. Он всегда будет возвращать первый элемент, соответствующий селектору.

Что касается css: Высота A является встроенным css, что означает, что он всегда будет иметь приоритет над высотой B, если высота B не отмечена !important . Чтобы вернуться к высоте B, высоту A необходимо полностью удалить с помощью свойства удалить или просто установить значение null.

 var obj = document.getElementById('name');
obj.style.removeProperty('height');
// if you want to return the old value...
// var oldValue = obj.style.removeProperty('height');
 

Если вы хотите изменить содержимое таблицы стилей, см. Этот пример:

 var declaration = document.styleSheets[0].rules[0].style;
var oldValue = declaration.removeProperty('height');
 

… Однако будьте осторожны с примером таблицы стилей, так как изменение индексов может сбить это с толку. Было бы гораздо безопаснее найти альтернативу, которая вместо этого добавляет/удаляет классы с нужными вам значениями.