मैं अन्य मोबाइल चैटिंग ऐप्स की नकल करने की कोशिश कर रहा हूं, जब आप send-message
टेक्स्टबॉक्स का चयन करते हैं और यह वर्चुअल कीबोर्ड को खोलता है, तो नीचे-सबसे संदेश अभी भी देखने में है। सीएसएस के साथ आश्चर्यजनक रूप से ऐसा करने का कोई तरीका प्रतीत नहीं होता है, इसलिए जावास्क्रिप्ट resize
(केवल यह पता लगाने के लिए कि कीबोर्ड कब खोला गया है और जाहिरा तौर पर बंद है) घटनाओं और मैनुअल स्क्रॉलिंग को बचाव के लिए।
किसी ने प्रदान की इस समाधान और मुझे पता चला इस समाधान , जो दोनों काम करने लगते हैं।
सिवाय एक मामले में। के लिए कुछ कारण है, अगर आप के भीतर हैं MOBILE_KEYBOARD_HEIGHT
(मेरे मामले में 250 पिक्सल) संदेशों div के नीचे के पिक्सल, जब आप मोबाइल कीबोर्ड बंद, कुछ अजीब होता है। पूर्व समाधान के साथ, यह नीचे तक स्क्रॉल करता है। और बाद के समाधान के साथ, यह MOBILE_KEYBOARD_HEIGHT
नीचे से पिक्सल को स्क्रॉल करता है।
यदि आपको इस ऊंचाई से ऊपर स्क्रॉल किया जाता है, तो ऊपर दिए गए दोनों समाधान त्रुटिपूर्ण रूप से काम करते हैं। यह केवल तभी है जब आप नीचे हैं कि उनके पास यह मामूली समस्या है।
मैंने सोचा कि शायद यह सिर्फ मेरा कार्यक्रम था, जो कुछ अजीब आवारा कोड के साथ ऐसा कर रहा था, लेकिन नहीं, मैंने एक फिडेल को भी पुन: पेश किया और इसका सटीक मुद्दा है। इसे डिबग करने के लिए मेरी क्षमा याचना, लेकिन अगर आप अपने फोन पर https://jsfiddle.net/t596hy8d/6/show (शो प्रत्यय एक पूर्ण-स्क्रीन मोड प्रदान करता है) पर जाते हैं, तो आपको देखने में सक्षम होना चाहिए समान व्यवहार।
यदि आप पर्याप्त स्क्रॉल करते हैं, तो कीबोर्ड खोलना और बंद करना, इस स्थिति को बनाए रखता है। हालाँकि, यदि आप नीचे के पिक्सेल के भीतर कीबोर्ड बंद करते हैं , तो आप MOBILE_KEYBOARD_HEIGHT
पाएंगे कि यह नीचे की ओर स्क्रॉल करता है।
यह क्या कारण है?
कोड प्रजनन यहाँ:
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>