আমি গতকাল একটি অনুরূপ প্রশ্ন জিজ্ঞাসা করেছি কিন্তু এটি খারাপভাবে ব্যাখ্যা করেছি, এবং খাঁটি সিএসএস সমাধানের জন্য আমার আকাঙ্ক্ষা নির্দিষ্ট করেছিলাম না, যা আমি মনে করি এটি সম্ভব হওয়া উচিত, তাই আমি আবার চেষ্টা করছি।
মূলত, আমার একটি সমস্যা রয়েছে যেখানে আমার স্ক্রোলযোগ্য বার্তাগুলির একটি ডিভ এবং এর নীচে একটি ইনপুট ক্ষেত্র রয়েছে। আমি যখন একটি বোতামে ক্লিক করি, আমি চাই ইনপুট ক্ষেত্রটি বার্তাটি স্ক্রোল না করেই 100 পিক্সেল বাম্প করা উচিত।
এখানে এমন একটি ঝাঁকুনি যা সমস্যাটিকে পুরোপুরি দেখায়
আপনি দেখতে পাচ্ছেন, আপনি যখন "মার্জিন যুক্ত করুন" বোতামটি ক্লিক করেন, বার্তাগুলি ডিভ স্ক্রলও আপ করে দেয়। আমি এটি যেখানে ছিল সেখানে থাকতে চাই। একইভাবে, আপনি যদি সামান্য স্ক্রোল করে থাকেন তবে আপনি কেবল দ্বিতীয় থেকে শেষ বার্তাটি দেখতে পান, বোতামটি ক্লিক করলে একইভাবে ক্লিক করার পরে সেই অবস্থানটি ধরে রাখা উচিত।
মজার বিষয় হ'ল এই আচরণটি "কখনও কখনও" সংরক্ষণিত হয়। উদাহরণস্বরূপ, কিছু পরিস্থিতিতে (যা আমি যথেষ্ট পরিমাণে অনুমান করতে পারি না) স্ক্রোলের অবস্থান ধরে রাখা হয়। আমি ঠিক এটির মতো ধারাবাহিকভাবে আচরণ করা চাই।
window.onload = function(e) {
document.querySelector(".messages").scrollTop = 10000;
};
function test() {
document.querySelector(".send-message").classList.toggle("some-margin");
}
.container {
width: 400px;
height: 300px;
border: 1px solid #333;
display: flex;
flex-direction: column;
}
.messages {
overflow-y: auto;
height: 100%;
}
.send-message {
width: 100%;
display: flex;
flex-direction: column;
}
.some-margin {
margin-bottom: 100px;
}
<div class="container">
<div class="messages">
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
</div>
<div class="send-message">
<input />
</div>
</div>
<button onclick="test()">add margin</button>
div
যে স্ক্রোল করছে তা নয়, এটি ডিভের উচ্চতা হ্রাস পাচ্ছে। সুতরাং কেন এই ব্যাপার? ঠিক আছে, এর অর্থ হ'লscrollbar
এটির অবস্থানটি সামঞ্জস্য করছে না। স্ক্রোলবারটি কেবল তার ধারকটির শীর্ষ থেকে তার অবস্থানটি মনে করে। যখন ডিভের উচ্চতা হ্রাস পাবে তখন মনে হচ্ছে স্ক্রোলবারটি স্ক্রোল করে চলেছে তবে এটি আসলে তা নয়।