Как я могу остановить этот аккордеон CSS от автоматической прокрутки вниз? - PullRequest
1 голос
/ 17 мая 2019

Я использую аккордеон, созданный с помощью CSS и jQuery, для сайта, который я делаю.Сайт также использует Bootstrap для стилизации других его частей.

Каждый раз, когда я открываю или закрываю вкладку, страница по какой-то причине автоматически прокручивается вниз, что я должен изменить?Спасибо всем заранее.

$(document).ready(function() {
  $("a.accordion__trigger").click(function() {
    $(this).parent().find(".accordion__content").toggleClass("accordion__content__hidden");
  });
});
.final__accordion {
  position: relative;
  display: block;
  border: 1px solid #e0e0e0;
  font-size: 0.8rem;
}

.final__accordion .accordion__item {
  display: block;
  margin-top: 5px;
}

.final__accordion .accordion__content {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  background-color: rgba(255, 255, 255, 0.5);
  overflow: hidden;
  height: 0;
  -webkit-transition: height 1s ease, padding 0.3s linear;
  -o-transition: height 1s ease, padding 0.3s linear;
  transition: height 1s ease, padding 0.3s linear;
}

.final__accordion .accordion__content p {
  padding: 20px;
  margin: 0;
  text-align: left;
  max-width: initial;
}

.accordion__item .accordion__content {
  overflow: hidden;
  box-sizing: content-box;
  -moz-box-sizing: content-box;
}

.final__accordion .accordion__content__hidden:target {
  /*CHANGED TARGET ON TOGGLE CLASSNAME*/
  height: 150px;
  text-align: left;
}

.accordion__content__hidden {
  height: 0;
}

.final__accordion .accordion__trigger {
  text-decoration: none;
}

.final__accordion .accordion__title {
  position: relative;
  display: block;
  margin: 0;
  padding: 10px;
  font-size: 1em;
  background-color: rgb(234, 10, 42);
  color: #FFFFFF;
  border: 1px solid red;
  cursor: pointer;
}

.final__accordion .accordion__title:hover {
  background-color: red;
}

.final__accordion .accordion__title:after {
  position: absolute;
  top: calc(50% - 12px);
  right: 20px;
  width: 15px;
  height: 15px;
  border-left: 1px solid #FFFFFF;
  border-bottom: 1px solid #FFFFFF;
  -webkit-transform: rotate(-45deg);
  transform: rotate(-45deg);
  content: "";
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="final__accordion" id="#accordion">
  <div class="accordion__item">
    <a href="#final__tab1" class="accordion__trigger accordion__title">Accordion 1</a>
    <div id="final__tab1" class="accordion__content">
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
    </div>
  </div>
  <div class="accordion__item">
    <a href="#final__tab2" class="accordion__trigger accordion__title">Accordion 2</a>
    <div id="final__tab2" class="accordion__content">
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
    </div>
  </div>
  <div class="accordion__item">
    <a href="#final__tab3" class="accordion__trigger accordion__title">Accordion 3</a>
    <div id="final__tab3" class="accordion__content">
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
    </div>
  </div>
  <div class="accordion__item">
    <a href="#final__tab4" class="accordion__trigger accordion__title">Accordion 4</a>
    <div id="final__tab4" class="accordion__content">
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
    </div>
  </div>
  <div class="accordion__item">
    <a href="#final__tab5" class="accordion__trigger accordion__title">Accordion 5</a>
    <div id="final__tab5" class="accordion__content">
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
    </div>
  </div>
  <div class="accordion__item">
    <a href="#final__tab6" class="accordion__trigger accordion__title">Accordion 6</a>
    <div id="final__tab6" class="accordion__content">
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
    </div>
  </div>
</div>

1 Ответ

0 голосов
/ 17 мая 2019
  1. При щелчке по тегу nchor <a> по умолчанию выполняется переход к местоположению, определяемому значением href. Таким образом, все <a> имеют href="#/", что по существу предотвращает такое поведение при прыжке.

  2. При использовании jQuery вам нужно будет использовать #id .01% времени и .class 99,99% времени. Так что все #id удалены.

  3. Для анимационных эффектов, таких как скольжение, есть .slideUp/Down/Toggle()

  4. Поведение аккордеона - только одна секция может быть открыта одновременно. Таким образом, все .content, за исключением .content, который следует за нажатым .trigger (т.е. $(this)), будут .slideUp(). Тогда .content, который следует за нажатием .trigger, будет .slideToggle().

  5. .open означает .toggleClass() на .title для анимации стрелки.

Кстати, я удалил часть .accordion__ из всех классов, чтобы сохранить свое здравомыслие, не стесняйтесь загромождать ее .accordion__, если хотите.

$(".trigger").on('click', function(e) {
  $('.title').not($(this)).removeClass('open');
  $(this).toggleClass('open');
  $('.content').not($(this).next('.content')).slideUp();
  $(this).next('.content').slideToggle();
});
body {
  overflow-y: scroll
}

.accordion {
  position: relative;
  border: 1px solid #e0e0e0;
  font-size: 0.8rem;
}

.accordion .item {
  margin-top: 5px;
}

.accordion .content {
  display: flex;
  align-items: center;
  background-color: rgba(255, 255, 255, 0.5);
  overflow: hidden;
  box-sizing: content-box;
  height: 150px;
}

.accordion .content p {
  padding: 20px;
  margin: 0;
  text-align: left;
  max-width: initial;
}

.content.hidden {
  display: none;
}

.accordion .trigger {
  text-decoration: none;
}

.accordion .title {
  position: relative;
  display: block;
  margin: 0;
  padding: 10px;
  font-size: 1em;
  background-color: rgb(234, 10, 42);
  color: #FFFFFF;
  border: 1px solid red;
  cursor: pointer;
}

.accordion .title:hover {
  background-color: red;
}

.accordion .title::after {
  position: absolute;
  top: calc(50% - 12px);
  right: 20px;
  width: 15px;
  height: 15px;
  border-left: 1px solid #FFFFFF;
  border-bottom: 1px solid #FFFFFF;
  transform: rotate(-135deg);
  transition: 0.7s;
  content: "";
}

.accordion .title.open::after {
  transform: rotate(-45deg);
  transition: 0.7s;
}
<div class="accordion">
  <div class="item">
    <a href="#/" class="trigger title">Accordion 1</a>
    <div class="content hidden">
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
    </div>
  </div>
  <div class="item">
    <a href="#/" class="trigger title">Accordion 2</a>
    <div class="content hidden">
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
    </div>
  </div>
  <div class="item">
    <a href="#/" class="trigger title">Accordion 3</a>
    <div class="content hidden">
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
    </div>
  </div>
  <div class="item">
    <a href="#/" class="trigger title">Accordion 4</a>
    <div class="content hidden">
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
    </div>
  </div>
  <div class="item">
    <a href="#/" class="trigger title">Accordion 5</a>
    <div class="content hidden">
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
    </div>
  </div>
  <div class="item">
    <a href="#/" class="trigger title">Accordion 6</a>
    <div class="content hidden">
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor laborum, rerum quasi rem placeat quo ratione qui.</p>
    </div>
  </div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
...