send-message
Metin kutusunu seçtiğinizde ve sanal klavyeyi açtığınızda, en alttaki mesaj hala görüntülenmekte olan diğer mobil sohbet uygulamalarını taklit etmeye çalışıyorum . Bunu CSS ile inanılmaz bir şekilde yapmanın bir yolu yok gibi görünüyor, bu nedenle JavaScript resize
(klavyenin açılıp kapatıldığı zaman öğrenmenin tek yolu) olaylar ve kurtarmaya manuel kaydırma.
Birisi bu çözümü sağladı ve her ikisinin de işe yaradığı görülen bu çözümü buldum .
Bir durum hariç. Herhangi bir nedenle, MOBILE_KEYBOARD_HEIGHT
mesajlar div'in altındaki piksellerde (benim durumumda 250 piksel), mobil klavyeyi kapattığınızda garip bir şey olur. Önceki çözümle, aşağı doğru kayar. İkinci çözümle, MOBILE_KEYBOARD_HEIGHT
pikselleri alttan yukarı kaydırır .
Bu yüksekliğin üzerine kaydırılırsanız, yukarıda verilen her iki çözüm de kusursuz çalışır. Sadece altta olduğunuzda bu küçük sorunu yaşıyorlar.
Belki de sadece garip bir sokak koduyla buna neden olan benim programım olduğunu düşündüm, ama hayır, bir keman bile ürettim ve bu tam bir sorun var. Bunu hata ayıklamak için çok zor yaptığım için özür dilerim, ancak telefonunuzda https://jsfiddle.net/t596hy8d/6/show (show soneki tam ekran modu sağlar) adresine giderseniz, aynı davranış.
Bu davranış, eğer yeterince yukarı kaydırırsanız, klavyeyi açıp kapatarak konumu korur. Ancak, klavyeyi alttan pikseller içinde kapatırsanız , MOBILE_KEYBOARD_HEIGHT
bunun yerine alt kısma kaydırıldığını görürsünüz.
Buna ne sebep oluyor?
Kod üretimi:
window.onload = function(e){
document.querySelector(".messages").scrollTop = 10000;
bottomScroller(document.querySelector(".messages"));
}
function bottomScroller(scroller) {
let scrollBottom = scroller.scrollHeight - scroller.scrollTop - scroller.clientHeight;
scroller.addEventListener('scroll', () => {
scrollBottom = scroller.scrollHeight - scroller.scrollTop - scroller.clientHeight;
});
window.addEventListener('resize', () => {
scroller.scrollTop = scroller.scrollHeight - scrollBottom - scroller.clientHeight;
scrollBottom = scroller.scrollHeight - scroller.scrollTop - scroller.clientHeight;
});
}
.container {
width: 400px;
height: 87vh;
border: 1px solid #333;
display: flex;
flex-direction: column;
}
.messages {
overflow-y: auto;
height: 100%;
}
.send-message {
width: 100%;
display: flex;
flex-direction: column;
}
<div class="container">
<div class="messages">
<div class="message">hello 1</div>
<div class="message">hello 2</div>
<div class="message">hello 3</div>
<div class="message">hello 4</div>
<div class="message">hello 5</div>
<div class="message">hello 6 </div>
<div class="message">hello 7</div>
<div class="message">hello 8</div>
<div class="message">hello 9</div>
<div class="message">hello 10</div>
<div class="message">hello 11</div>
<div class="message">hello 12</div>
<div class="message">hello 13</div>
<div class="message">hello 14</div>
<div class="message">hello 15</div>
<div class="message">hello 16</div>
<div class="message">hello 17</div>
<div class="message">hello 18</div>
<div class="message">hello 19</div>
<div class="message">hello 20</div>
<div class="message">hello 21</div>
<div class="message">hello 22</div>
<div class="message">hello 23</div>
<div class="message">hello 24</div>
<div class="message">hello 25</div>
<div class="message">hello 26</div>
<div class="message">hello 27</div>
<div class="message">hello 28</div>
<div class="message">hello 29</div>
<div class="message">hello 30</div>
<div class="message">hello 31</div>
<div class="message">hello 32</div>
<div class="message">hello 33</div>
<div class="message">hello 34</div>
<div class="message">hello 35</div>
<div class="message">hello 36</div>
<div class="message">hello 37</div>
<div class="message">hello 38</div>
<div class="message">hello 39</div>
</div>
<div class="send-message">
<input />
</div>
</div>