Я пытался кодировать его сам, основываясь на исследовании inte rnet. Я смог исправить это внизу. При щелчке оно выдвигается из меню; но он выдвигается вниз, когда должен был нажать на вкладку вверх, чтобы отобразить меню. Если я использую отрицательное поле и просто изменяю bottom: -150
на bottom: 0px
при клике, это приводит к желаемому поведению, сдвигая его за нижнюю часть окна, и оно отображается правильно. Но это означает, что меню толкает страницу за нижнюю часть страницы, а не просто скрывается. Поэтому, когда он «скрыт», можно просто прокрутить вниз и увидеть полное меню, чего не должно быть.
Поэтому вместо того, чтобы использовать bottom
, я попытался использовать $(this).show("slide")
. Меню получилось искаженным благодаря использованию скользящей анимации.
Вот фрагмент:
var supTabState = false;
$("#dccontainer").css('bottom', '-150px');
$("#dcsupporttab").click(function() {
$('#dcsupportcontainer').slideToggle(500, function() {
//execute this after slideToggle is done
});
supTabState = !supTabState;
if (supTabState) {
// $("#dccontainer").css('bottom', '0px');
$(this).show("slide", {
direction: "down"
}, 1000);
} else {
// $("#dccontainer").css('bottom', '-150px');
$(this).show("slide", {
direction: "up"
}, 1000);
}
});
#dccontainer {
position: absolute;
bottom: 0;
width: 300px;
left: 50%;
height: 200px;
margin-left: -150px;
transition: .5s;
overflow: hidden;
}
#dccontainer * {
margin-top: 0;
margin-bottom: 0;
padding-top: 0;
padding-bottom: 0;
font-family: 'Roboto', 'Helvetica', 'Arial', 'sans-serif';
font-weight: bold;
/* font-family: 'Catamaran', 'Roboto', 'Helvetica', 'Arial', 'sans-serif'; */
}
#dcsupporttab {
background-color: #f5f5f5;
color: #434343;
text-align: center;
width: 150px;
padding: 10px;
padding-bottom: 3px;
margin: auto;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
cursor: pointer;
}
#dcsupportcontainer {
background-color: #f5f5f5;
padding-top: 10px;
color: #434343;
display: flex;
flex-direction: column;
justify-content: space-evenly;
align-items: center;
/*height: calc(100% - 43px); */
display: none;
}
.dcbutton {
display: flex;
text-align: center;
background-color: #fff;
border-radius: 10px;
flex-direction: column;
justify-content: center;
align-items: center;
width: 230px;
height: 40px;
}
.dcthelabel {
text-decoration: none;
color: #434343;
text-transform: uppercase;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.nonsolid {
background-color: #f5f5f5;
border-color: #fff;
border-style: solid;
border-width: 3px;
}
#dcmessageus {
text-transform: none;
}
#dcaslnow {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="dccontainer">
<p id="dcsupporttab">Support</p>
<div id="dcsupportcontainer">
<div class="dcbutton" id="dcaslnow">
<a href="#" class="dcthelabel">ASL Now</a>
</div>
<div class="dcbutton" id="dctextchat">
<a href="#" class="dcthelabel">Text Chat</a>
</div>
<div class="dcbutton nonsolid" id="dcmessageus">
<a href="#" class="dcthelabel">Send Us a Message</a>
</div>
<p id="dcvpinfo">Video Chat: (123) 456-7890</p>
</div>
</div>
Я пробовал различные техники. Я пытался переключаться только с CSS, используя CSS анимацию и toggleClass
, я пытался использовать slide
, и я пытался использовать slideToggle
. Я также попытался использовать display: block;
вместо flexbox. Оба имели одинаковый эффект. Исследование inte rnet привело к нескольким возможным решениям (которые я пробовал, но все получили одинаковый результат), и они обычно не основывались на элементе, который был зафиксирован в нижней части окна. Единственное, что подошло ближе всего к тому, что я искал, это:
http://atomicrobotdesign.com/blog_media/toggleslide_multiple.html
Но странно, когда я пытался использовать тот же код, который использовал, ничего не случилось. Нажатие не вызывало меню. Я в растерянности на данный момент. Куда я иду не так?
Это моя последняя попытка (используя приведенный выше код): https://codepen.io/doncullen/pen/JjdrxzY