เลื่อนไปที่ด้านล่างของ Div เมื่อโหลดหน้าเว็บ (jQuery)


238

ฉันมี div ในหน้าของฉัน:

<div id='div1' style='overflow:scroll;overflow-x:hidden;max-height:200px;'></div>

ฉันจะเลื่อน div ไปที่ด้านล่างของ div ได้อย่างไร? ไม่ใช่หน้าเพียง DIV

คำตอบ:


610

โซลูชันอื่น ๆ ที่นี่ไม่ทำงานสำหรับ div ที่มีเนื้อหามากมาย - มัน "maxes out" เลื่อนลงไปที่ความสูงของ div (แทนความสูงของเนื้อหาของ div) ดังนั้นมันจะทำงานได้เว้นแต่คุณจะมีเนื้อหาสูงกว่าเนื้อหาในนั้นเป็นสองเท่า

นี่คือรุ่นที่ถูกต้อง:

$('#div1').scrollTop($('#div1')[0].scrollHeight);

หรือรุ่น jQuery 1.6+:

var d = $('#div1');
d.scrollTop(d.prop("scrollHeight"));

หรือเคลื่อนไหว:

$("#div1").animate({ scrollTop: $('#div1').prop("scrollHeight")}, 1000);

5
สิ่งนี้สามารถใช้งานได้: $ ('# div1') scrollTop ($ ('# div1'). attr ("scrollHeight"));
Mike Todd

2
วิธีทำให้งานนี้โดยไม่ตั้งค่าความสูงสัมบูรณ์ (เป็น px) เป็นdiv1อย่างไร
znat

ทำได้ดี! ฉันกำลังมองหาตัวอย่างเพื่อเลื่อนและทั้งหมดที่ฉันสามารถค้นหาได้มันเลื่อนหน้า (html, body) นี่เป็นวิธีแก้ปัญหาที่ยอดเยี่ยมและการใช้ scrollHeight เป็นวิธีการที่ยอดเยี่ยมในการตรวจสอบให้แน่ใจว่ามันถึงด้านล่างเสมอ
Kevin Marmet

น่าอัศจรรย์อันที่สองมันทำงานได้:d = $('#div1'); $(d).scrollTop( $(d).prop("scrollHeight") );
loretoparisi

56

คำตอบทั้งหมดที่ฉันสามารถดูได้ที่นี่รวมถึงคำตอบที่ "ยอมรับ" ในปัจจุบันนั้นเป็นสิ่งที่ผิดในการตั้งค่า:

scrollTop = scrollHeight

ในขณะที่วิธีการที่ถูกต้องคือการตั้งค่า:

scrollTop = scrollHeight - clientHeight

ในคำอื่น ๆ :

$('#div1').scrollTop($('#div1')[0].scrollHeight - $('#div1')[0].clientHeight);

หรือเคลื่อนไหว:

$("#div1").animate({
  scrollTop: $('#div1')[0].scrollHeight - $('#div1')[0].clientHeight
}, 1000);

ฉันมี div พร้อมความสูงที่ตั้งไว้และตั้งค่าโอเวอร์โฟลว์เป็น auto คำตอบแบบเคลื่อนไหวทำงานได้ แต่นี่เป็นทางออกเดียวที่ไม่ใช่ภาพเคลื่อนไหวที่จริงแล้วจะเลื่อนไปที่ด้านล่างของ "เนื้อหา" ไม่ใช่ความสูงที่ตั้งไว้ของ div ไชโย!
Darkloki

23

อัปเดต: ดูโซลูชันของ Mike Toddเพื่อรับคำตอบที่สมบูรณ์


$("#div1").animate({ scrollTop: $('#div1').height()}, 1000);

ถ้าคุณต้องการให้มันเป็นภาพเคลื่อนไหว (มากกว่า 1,000 มิลลิวินาที)

$('#div1').scrollTop($('#div1').height())

ถ้าคุณต้องการมันทันที


8
ไม่ถูกต้อง! .height () ถูก จำกัด ไว้ที่พื้นที่ที่แสดง, .prop ("scrollHeight") คือความสูงจริงของ div
ตัวชี้ Null

5
แน่นอน! นั่นเป็นเหตุผลที่คำตอบของ Mike Todd เป็นคำตอบที่ยอมรับไม่ใช่ของฉัน
Alexis Pigeon

15
$(window).load(function() {
  $("html, body").animate({ scrollTop: $(document).height() }, 1000);
});

สิ่งนี้จะดึงความสูงของหน้าและเลื่อนลงมาเมื่อหน้าต่างโหลด เปลี่ยนเป็น1000สิ่งที่คุณต้องทำเร็วขึ้น / ช้าลงเมื่อเพจพร้อมใช้งาน


นี่เลื่อนทั้งหน้าใช่ไหม? ฉันแค่ต้องการให้ div เลื่อนไปที่ด้านล่างของ div
DobotJr

2
Touche ตรรกะเดียวกันตัวเลือกที่แตกต่างกัน
คอร์ด


5

เลื่อนหน้าต่างไปที่ด้านล่างของ div เป้าหมาย

function scrollToBottom(id){
  div_height = $("#"+id).height();
  div_offset = $("#"+id).offset().top;
  window_height = $(window).height();
  $('html,body').animate({
    scrollTop: div_offset-window_height+div_height
  },'slow');
}

scrollToBottom('call_div_id');

5

ต่อไปนี้จะใช้งานได้ โปรดทราบ[0]และscrollHeight

$("#myDiv").animate({ scrollTop: $("#myDiv")[0].scrollHeight }, 1000);

5

สำหรับภาพเคลื่อนไหวใน jquery (เวอร์ชั่น> 2.0)

var d = $('#div1');
d.animate({ scrollTop: d.prop('scrollHeight') }, 1000);

4

สิ่งเหล่านี้ไม่ได้ผลสำหรับฉันฉันมีระบบข้อความในเว็บแอพที่คล้ายกับ Facebook messenger และต้องการให้ข้อความปรากฏที่ด้านล่างของ div

นี่ใช้งาน Javascript ขั้นพื้นฐานได้

window.onload=function () {
     var objDiv = document.getElementById("MyDivElement");
     objDiv.scrollTop = objDiv.scrollHeight;
}

1
คุณอาจไม่ได้ติดตั้ง jQuery คุณกำลังทำงานกับ native dom พวกเขากำลังใช้ jQuery jquery.com
csga5000

ทางออกที่เรียบร้อยและสง่างามมาก
Divyanshu Das

2

ฉันกำลังทำงานใน codebase ดั้งเดิมที่พยายามย้ายไปยัง Vue

ในสถานการณ์ที่เฉพาะเจาะจงของฉัน (div ที่เลื่อนได้ในโหมด bootstrap), v-if แสดงเนื้อหาใหม่ซึ่งฉันต้องการให้หน้าเลื่อนลงไป เพื่อให้พฤติกรรมนี้ทำงานได้ฉันต้องรอให้ vue เสร็จสิ้นการเรนเดอร์อีกครั้งจากนั้นใช้ jQuery เพื่อเลื่อนไปที่ด้านล่างของคำกริยา

ดังนั้น...

this.$nextTick(function() {
    $('#thing')[0].scrollTop = $('#thing')[0].scrollHeight;
})

0

คุณสามารถใช้รหัสด้านล่างเพื่อเลื่อนไปที่ด้านล่างของ div เมื่อโหลดหน้าเว็บ

$(document).ready(function(){
  $('div').scrollTop($('div').scrollHeight);
});

0

คุณสามารถตรวจสอบ scrollHeight และ clientHeight ด้วย scrollTop เพื่อเลื่อนไปที่ด้านล่างของ div เช่นโค้ดด้านล่าง

$('#div').scroll(function (event) {
  if ((parseInt($('#div')[0].scrollHeight) - parseInt(this.clientHeight)) == parseInt($('#div').scrollTop())) 
  {
    console.log("this is scroll bottom of div");
  }
  
});


โปรดทดสอบรหัสของคุณก่อนที่จะนำเสนอโซลูชั่น
ลักษมี

-2

เมื่อหน้าโหลดแล้วเลื่อนเป็นค่าสูงสุด

นี่คือกล่องข้อความเมื่อผู้ใช้ส่งข้อความแสดงการแชทล่าสุดเสมอลงเพื่อให้ค่าการเลื่อนเป็น maxium เสมอ

$('#message').scrollTop($('#message')[0].scrollHeight);

ดูภาพ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.