আমি অন্যান্য মোবাইল চ্যাটিং অ্যাপগুলির নকল করার চেষ্টা করছি যেখানে আপনি 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>