สมัครสมาชิกและอ่าน
สิ่งที่น่าสนใจที่สุด
บทความก่อน!

เลื่อนไปที่องค์ประกอบของหน้าโดยใช้ jQuery เลื่อนไปที่องค์ประกอบอย่างราบรื่น - jQuery Jquery เปลี่ยนเป็นองค์ประกอบได้อย่างราบรื่น

สวัสดีเพื่อน. ในบทความนี้ เราจะดูที่เหตุการณ์ jQuery เมื่อหน้าเลื่อนไปที่องค์ประกอบเฉพาะ กล่าวอีกนัยหนึ่งแล้ว... ในตัวอย่างนี้ เราจะเริ่มการทำงานของเหตุการณ์เมื่อมีการเลื่อนหน้าไปยังส่วนท้าย จากนั้นเราจะแสดงหน้าต่างป๊อปอัปเล็กๆ ที่ดูเรียบๆ และเราจะปิดมันด้วยการคลิก ตัดสินใจด้วยตัวเองว่าจะใส่อะไรเข้าไปมีตัวเลือกมากมาย นี่คือสิ่งที่ดูเหมือน:

เริ่มต้นด้วยมาร์กอัป HTML และไม่มีอะไรผิดปกติที่นี่ ทุกอย่างค่อนข้างเรียบง่ายและชัดเจน ผืนผ้าใบข้อความขนาดใหญ่ ส่วนท้ายที่ด้านล่าง และบล็อกที่มีปุ่มที่จะปรากฏขึ้น นี่คือรหัสบล็อก:

1 2 3 4 5 6 7 8 9 10 มีเนื้อหามากมายที่นี่...ข้อความบางส่วน ส่วนท้าย

มีเนื้อหามากมายที่นี่...ข้อความบางส่วน ส่วนท้าย

ตอนนี้เรามาเริ่มออกแบบบล็อกที่ซ่อนอยู่และปุ่มของมันกันดีกว่า:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #block ( แสดง : ไม่มี ; ตำแหน่ง : คงที่ ; บน : 15px ; ขวา : 15px ; สี : #fff ; พื้นหลัง : #4CAF50 ; ช่องว่างภายใน : 10px ; รัศมีเส้นขอบ : 5px ; ความกว้าง : 200px ; กล่องเงา : 0 13px 20px -5px #3a3a3a ; font-family : Arial; text-align : center ; ) .btn( พื้นหลัง : #FF9800 ; border : 2px solid #795548 ; color : #fff ; border-radius : 5px ; cursor : pointer ; padding : 5px 10px ; ขอบด้านบน : 10px ; font-weight : ตัวหนา ; )

#block( จอแสดงผล: ไม่มี; ตำแหน่ง: คงที่; ด้านบน: 15px; ขวา: 15px; สี: #fff; พื้นหลัง: #4CAF50; ช่องว่างภายใน: 10px; รัศมีเส้นขอบ: 5px; ความกว้าง: 200px; กล่องเงา: 0 13px 20px -5px #3a3a3a; ตระกูลแบบอักษร: Arial; การจัดตำแหน่งข้อความ: center; ) .btn( พื้นหลัง: #FF9800; เส้นขอบ: 2px solid #795548; สี: #fff; รัศมีเส้นขอบ: 5px; เคอร์เซอร์: ตัวชี้; การขยาย: 5px 10px; ขอบด้านบน: 10px; น้ำหนักแบบอักษร: ตัวหนา; )

ตอนนี้เรามาจัดการโดยตรงกับสิ่งที่เรียกว่าการเลื่อนไปยังองค์ประกอบ อย่างไรก็ตามภาษาอังกฤษยังเป็นสิ่งจำเป็นสำหรับนักพัฒนา เราเชื่อมต่อ jQuery เป็นมาตรฐาน ฉันจะดำเนินการนี้ผ่าน CDN เนื่องจากจะเป็นเวอร์ชันล่าสุด

จากนั้นโค้ดสคริปต์จะสร้างเวทย์มนตร์บนเพจ:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 $(document).ready (function () ( var $element = $(".footer" ) ; ให้ counter = 0 ; $(window).scroll (function () ( var scroll = $(window).scrollTop () + $(window) .height () ; //หากเลื่อนไปที่จุดสิ้นสุดขององค์ประกอบ //var offset = $element.offset().top + $element.height(); //หากเลื่อนไปที่จุดเริ่มต้นของ องค์ประกอบ var offset = $element .offset () .top if (scroll > offset && counter == 0 ) ( $("#block" ) .fadeIn (500 ) ; counter = 1 ; ) ) ; $(".btn" ) .คลิก (ฟังก์ชั่น () ( $("#block" ) .slideUp () ; ) ) ; ) ) ;

$(document).ready(function())( var $element = $(".footer"); ให้ counter = 0; $(window).scroll(function() ( var scroll = $(window).scrollTop( ) + $(window).height(); //หากเลื่อนไปที่จุดสิ้นสุดขององค์ประกอบ //var offset = $element.offset().top + $element.height(); //หากเลื่อนไปที่จุดเริ่มต้นของ องค์ประกอบ var offset = $element .offset().top if (scroll > offset && counter == 0) ( $("#block").fadeIn(500); counter = 1; ) )); $(". btn").click(function ()( $("#block").slideUp(); )); ));

ตามค่าเริ่มต้น เหตุการณ์จะถูกทริกเกอร์ทันทีที่จุดเริ่มต้นขององค์ประกอบ (ในกรณีนี้คือส่วนท้าย) ปรากฏขึ้นในพื้นที่การมองเห็น แต่คุณสามารถเปลี่ยนค่าได้โดยไม่ใส่เครื่องหมายข้อคิดเห็นบรรทัดที่ 7 จากนั้นฟังก์ชันจะเริ่มทำงานเมื่อการเลื่อนถึงจุดสิ้นสุด ขององค์ประกอบ

นี่เป็นวิธีที่ชาญฉลาดในการแสดงข้อเสนอเฉพาะของคุณแก่ผู้เยี่ยมชมเว็บไซต์ และติดตามการแปลงด้วยการเพิ่มเป้าหมายในการวัด

วันนี้เราจะมาฝึกกับ jQuery กันอีกครั้ง เราจะเขียนสคริปต์เพื่อการเลื่อนที่ราบรื่นเมื่อกดปุ่ม ตรวจสอบให้แน่ใจว่าเมื่อคุณกดปุ่ม ผู้ใช้จะถูกโอนไปยังบล็อกที่ต้องการได้อย่างราบรื่น สคริปต์นี้สามารถใช้เพื่อสร้างเมนูจุดยึดที่สวยงามได้

นี่คือสคริปต์ที่เราต้องการ

สคริปต์ประกอบด้วยฟังก์ชัน พารามิเตอร์เดียวซึ่งเป็นตัวแปรที่มีค่า id ของบล็อกที่คุณต้องการให้การเปลี่ยนแปลงราบรื่น

ภายในฟังก์ชัน บรรทัดแรกจะสร้างออฟเซ็ตตัวแปรที่มีค่า 0

เคลื่อนไหว – ช่วยให้คุณสามารถแสดงภาพเคลื่อนไหวที่กำหนดเองตามการเปลี่ยนแปลงคุณสมบัติ CSS สำหรับองค์ประกอบที่เลือก

scrollTop – รับค่าการเลื่อนด้านบนสำหรับองค์ประกอบแรกในชุด

เมื่อเป็น 1,000 จะมีการระบุระยะเวลาของการเปลี่ยนแปลง การเปลี่ยนครั้งนี้จะทำให้การเลื่อนเร็วขึ้นหรือช้าลง

มันทำงานอย่างไร?

มาเขียนโค้ดทดสอบซึ่งเราจะลองใช้สคริปต์ของเราในการดำเนินการ

เอกสาร #block1 ( ขอบ: 1200px 0px 100px 0px ; ) ขอการโทร! สวัสดี! ฟังก์ชั่น slowScroll(id) ( var offset = 0; $("html, body").animate(( scrollTop: $(id).offset().top - offset ), 1000); return false; )

นี่คือเทมเพลต HTML ปกติ

เพื่อให้สคริปต์ทำงานได้ คุณต้องรวมไลบรารี jquery ไว้ด้วย

นอกจากนี้ เพื่อความชัดเจน ฉันได้ทำการเยื้องระหว่างองค์ประกอบที่ทดสอบเพื่อแสดงสกรอลล์ ฉันไม่ได้สร้างไฟล์แยกต่างหากสำหรับสไตล์เหล่านั้น และเขียนทุกอย่างไว้ในแท็ก head

ขอโทร!

ในแอตทริบิวต์ href เราระบุบล็อกที่เราต้องทำการเปลี่ยนแปลง ซึ่งจะถูกเขียนไว้ในกรณีที่การเลื่อนอย่างราบรื่นไม่ทำงาน เพื่อให้ผู้ใช้ถูกถ่ายโอนไปยังบล็อกที่เลือกอย่างราบรื่น ในเหตุการณ์ onclick เราระบุชื่อของฟังก์ชันและเป็นพารามิเตอร์ที่เราระบุ id ของบล็อกที่เราต้องการทำให้การเปลี่ยนแปลงราบรื่น

แน่นอนว่าคุณเคยเห็นลิงก์ "ไปด้านบน" บนหน้าเว็บซึ่งมีข้อความมากมายอยู่ด้านล่างสุด หรือยกตัวอย่างเนื้อหา (โดยที่เอกสารทั้งหมดอยู่ในหน้ายาวหน้าเดียว) ความหมายก็ใกล้เคียงกัน คลิกที่ลิงค์แล้วคุณจะถูกนำไปยังตำแหน่งเฉพาะในเอกสาร ที่จริงแล้ว เรากรอกลับการเลื่อนโดยทางโปรแกรม

การใช้จุดยึดเป็นเรื่องง่าย แต่จะเกิดอะไรขึ้นถ้าฉันไม่ต้องการไปยังจุดที่ต้องการในทันที แต่ต้องการ "ย้อนกลับ" สกรอลล์ล่ะ?

ทดสอบใน:

  • อส. 6-8
  • ไฟร์ฟอกซ์ 4
  • โอเปร่า 10
  • ซาฟารี 4
  • โครเมียม
งาน

ใช้ซอฟต์แวร์เลื่อนย้อนกลับ

สารละลาย

เราจะใช้ปลั๊กอิน jQuery.ScrollTo ที่พัฒนาขึ้นเป็นพิเศษสำหรับสิ่งนี้ เขาสามารถทำอะไรได้มากมาย ตัวอย่างเช่น มันสามารถย้อนกลับทั้งการเลื่อนหลักของหน้าต่างและการเลื่อนของบางไฟล์ สามารถย้อนกลับไปยังตำแหน่งเฉพาะ (เป็นพิกเซลหรือเปอร์เซ็นต์) หรือไปยังองค์ประกอบเฉพาะ (ระบุ เช่น โดย ) ทั้งหมดนี้ถูกสร้างขึ้นแล้ว งานของเราคือเรียนรู้วิธีใช้งาน

จะดาวน์โหลดอะไร?
  • ดาวน์โหลดไลบรารี jquery หรือ.
  • (2.26 Kb) ปลั๊กอินนั่นเอง
เริ่มต้นอย่างรวดเร็ว

การเชื่อมต่อไลบรารี:

เราเขียนรหัสของใครบางคนเป็น HTML - เราจะกรอกลับหน้าต่างไปที่องค์ประกอบนี้:

หัวเรื่องที่สำคัญ

ตั้งปุ่มควบคุม:

ย้อนกลับไปยังหัวข้อสำคัญ

เมื่อคุณคลิกที่ปุ่ม เราจะเปิดการกรอกลับ:

jQuery(document).ready(function())( jQuery("button").click(function() ( jQuery.scrollTo("#target-el"); )); ));

และตอนนี้มีรายละเอียดเพิ่มเติม

คำสั่ง jQuery.scrollTo() จะย้อนกลับการเลื่อนหลัก หากคุณต้องการกรอกลับการเลื่อนขององค์ประกอบ ให้ใช้สัญลักษณ์เช่น jQuery("selector").scrollTo() ตัวอย่างเช่น:

JQuery("div.pane").scrollTo("#target-el");

พารามิเตอร์ของ scrollTo()

ตามปกติแล้ว ความมหัศจรรย์ทั้งหมดจะอยู่ในพารามิเตอร์:

ชื่อพารามิเตอร์ คำอธิบายแกน ระยะเวลา ผ่อนคลาย ระยะขอบ ชดเชย เกิน คิว บนAfterFirst บนหลังจาก
แกนที่จะเลื่อนคือ "x", "y", "xy" หรือ "yx" "xy" เป็นค่าเริ่มต้น
ระยะเวลาของภาพเคลื่อนไหว
ชื่อของสมการกำลังผ่อนคลาย
หากเป็นจริง ขอบเขตเป้าหมายและระยะขอบจะถูกลบออก
Chilso หรือแฮช (ซ้าย: x, บน:y ) ค่านี้จะถูกเพิ่มไปยังตำแหน่งสุดท้าย (อาจเป็นค่าลบได้)
เพิ่มส่วนหนึ่งของความสูง/ความกว้างขององค์ประกอบ (อาจเป็นค่าลบก็ได้)
หากเป็นจริงและสามารถเลื่อนทั้งสองแกนได้ การเลื่อนบนแกนหนึ่งจะเคลื่อนไหวก่อน จากนั้นจึงเลื่อนไปอีกแกนหนึ่ง ลำดับถูกกำหนดโดยแกนพาราวิตร ("xy" หรือ "yx")
ถ้า Queue=true ฟังก์ชันจะถูกดำเนินการหลังจากการเลื่อนแกนแรก
ฟังก์ชั่นที่ถูกเรียกหลังจากภาพเคลื่อนไหวทั้งหมดเสร็จสิ้น
รายละเอียดเพิ่มเติมเกี่ยวกับการเรียก scrollTo()

เมื่อเรียก scrollTo() พารามิเตอร์สามประเภทจะถูกส่งผ่าน - เป้าหมาย ระยะเวลา การตั้งค่า (ลำดับความสำคัญ)

  • เป้าหมายคือตำแหน่งที่จะย้อนกลับอย่างแน่นอน (ดูรายละเอียดเพิ่มเติมด้านล่าง)
  • ระยะเวลา — พารามิเตอร์ระยะเวลาจากตารางด้านบน
  • การตั้งค่า - พารามิเตอร์ที่เหลือจากตารางด้านบน

เป็นเป้าหมายคุณสามารถใช้:

  • แค่ตัวเลข
  • สตริง ("44", "100px", "+=30px" ฯลฯ)
  • องค์ประกอบ DOM (ลูกขององค์ประกอบที่เลื่อนได้)
  • ตัวเลือก
  • บรรทัด "สูงสุด" เพื่อเลื่อนไปจนสุด
  • สตริงที่ระบุเปอร์เซ็นต์ที่จะไปยังส่วนของคอนเทนเนอร์ (เช่น 50% ไปที่ตรงกลาง)
  • แฮช ( top:x, left:y ), x และ y อาจเป็นตัวเลข/สตริงใดๆ ที่อธิบายไว้ข้างต้น

ตัวอย่างการโทรพร้อมพารามิเตอร์

เมื่อเร็ว ๆ นี้ประเภทของไซต์ที่เรียกว่า Landing Pages ได้รับความนิยมอย่างมาก สะดวกเพราะผู้ใช้ได้รับข้อมูลที่จำเป็นทั้งหมดในหน้าเดียว ส่วนใหญ่แล้วนี่คือข้อมูลเกี่ยวกับผลิตภัณฑ์ซึ่งอธิบายจากทุกด้าน ทำให้สามารถเข้าใจจุดแข็งและข้อดีของผลิตภัณฑ์ และแน่นอน สั่งซื้อได้

ไซต์ดังกล่าวกลายเป็นไซต์ที่ค่อนข้างยาว ดังนั้นเพื่อให้ง่ายต่อการใช้งาน จึงมักสร้างเมนูนำทางพร้อมลิงก์ไปยังส่วนเฉพาะ มาเรียนรู้วิธีตรวจสอบให้แน่ใจว่าเมื่อคุณคลิกลิงก์ เว็บไซต์จะเลื่อนไปยังตำแหน่งที่ต้องการได้อย่างราบรื่น

$("a" ) .click (function () ( var elementClick = $(this ) .attr ("href" ) ; var Destination = $(elementClick) .offset () .top ; $("html, body" ) .animate (( scrollTop: Destination ) , 600 ) ; return false ; ) ) ; มุมมองทางเลือก

ก่อนหน้านี้ เราทำแตกต่างออกไปเล็กน้อย - เราใช้คำจำกัดความของเบราว์เซอร์ - $.browser.safari || $.browser.webkit และขึ้นอยู่กับเงื่อนไขที่ทำอย่างใดอย่างหนึ่ง $("body").animate() หรือ $("html").animate() ในเวอร์ชัน 1.9 jQuery - $.browser ถูกลบออก ดังนั้นจึงใช้งานไม่ได้ แต่คุณสามารถแก้ไขโค้ดและรับสคริปต์ต่อไปนี้:

var ที่ตรงกัน, เบราว์เซอร์; jQuery.uaMatch = function ( ua ) ( ua = ua.toLowerCase () ; var match = /(chrome)[ \/]([\w.]+)/ .exec ( ua ) || /(webkit)[ \ /]([\w.]+)/ .exec ( ua ) || /(โอเปร่า)(?:.*version|)[ \/]([\w.]+)/ .exec ( ua ) || /(msie)[\s?]([\w.]+)/ .exec ( ua ) || /(ตรีศูล)(?:.*? rv:([\w.]+)|)/ .exec ( ua ) || ua.indexOf ("เข้ากันได้")< 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/ .exec ( ua ) || ; return { browser: match[ 1 ] || "" , version: match[ 2 ] || "0" } ; } ; matched = jQuery.uaMatch ( navigator.userAgent ) ; //IE 11+ fix (Trident) matched.browser = matched.browser == "trident" ? "msie" : matched.browser ; browser = { } ; if ( matched.browser ) { browser[ matched.browser ] = true ; browser.version = matched.version ; } $("a" ) .click (function () { var elementClick = $(this ) .attr ("href" ) ; var destination = $(elementClick) .offset () .top ; if (browser.chrome || browser.webkit ) { $("body" ) .animate ({ scrollTop: destination } , 600 ) ; } else { $("html" ) .animate ({ scrollTop: destination } , 600 ) ; } return false ; } ) ;

นั่นคือทั้งหมดที่ ขอให้ทุกคนโชคดี!

ฉันมีองค์ประกอบอินพุตนี้:

จากนั้นฉันก็มีองค์ประกอบอื่นๆ เช่น การป้อนข้อความ ช่องข้อความ ฯลฯ

เมื่อผู้ใช้คลิกที่อินพุตด้วย #subject หน้าควรเลื่อนไปยังองค์ประกอบของหน้าสุดท้ายที่มีภาพเคลื่อนไหวที่สวยงาม ควรเป็นการเลื่อนลงไม่ใช่ขึ้น

องค์ประกอบสุดท้ายของหน้าคือปุ่มส่งที่มี #submit:

ภาพเคลื่อนไหวไม่ควรเร็วเกินไปและควรมีความลื่นไหล

ฉันใช้ jQuery เวอร์ชันล่าสุด ฉันไม่ต้องการติดตั้งปลั๊กอินใด ๆ แต่ใช้ฟังก์ชัน jQuery เริ่มต้นเพื่อให้บรรลุเป้าหมายนี้

30 คำตอบ

สมมติว่าคุณมีปุ่มที่มีรหัสปุ่ม ให้ลองตัวอย่างนี้:

$("#button").click(function() ( $().animate(( scrollTop: $("#elementtoScrollToID").offset().top ), 2000); ));

ฉันเขียนปลั๊กอินน้ำหนักเบานี้เพื่อทำให้การเลื่อนหน้า/องค์ประกอบง่ายขึ้น มีความยืดหยุ่นโดยคุณสามารถส่งผ่านองค์ประกอบเป้าหมายหรือค่าที่กำหนดได้ บางทีนี่อาจเป็นส่วนหนึ่งของการเปิดตัว jQuery อย่างเป็นทางการครั้งต่อไป คุณคิดอย่างไร?

ตัวอย่างการใช้งาน

$("body").scrollTo("#target"); // เลื่อนหน้าจอไปยังองค์ประกอบเป้าหมาย $("body").scrollTo(500); // เลื่อนหน้าจอลง 500 พิกเซล $("#scrollable").scrollTo(100); // เลื่อนแต่ละองค์ประกอบลง 100 พิกเซล

ตัวเลือก:

scrollTarget: องค์ประกอบ สตริง หรือตัวเลขที่ระบุตำแหน่งการเลื่อนที่ต้องการ

offsetTop: ตัวเลขที่ระบุพื้นที่เพิ่มเติมเหนือเป้าหมายการเลื่อน

ระยะเวลา: สตริงหรือตัวเลขที่ระบุระยะเวลาที่ภาพเคลื่อนไหวจะทำงาน

การค่อยๆ เปลี่ยน: สตริงที่ระบุฟังก์ชันการค่อยๆ เปลี่ยนที่จะใช้สำหรับการเปลี่ยน

สมบูรณ์: ฟังก์ชั่นที่จะเรียกหลังจากภาพเคลื่อนไหวเสร็จสิ้น

หากคุณไม่สนใจเอฟเฟกต์การเลื่อนที่ราบรื่นมากนัก และเพียงสนใจที่จะเลื่อนไปยังองค์ประกอบเฉพาะ คุณไม่จำเป็นต้องมีฟังก์ชัน jQuery เพื่อทำสิ่งนี้ Javascript มีสิ่งที่คุณ:

ดังนั้นสิ่งที่คุณต้องทำคือ: $("selector").get(0).scrollIntoView();

Get(0) ถูกใช้เพราะเราต้องการรับองค์ประกอบ JavaScript DOM ไม่ใช่องค์ประกอบ JQuery DOM

ใช้สคริปต์ง่ายๆนี้

If($(window.location.hash).length > 0)( $("html, body").animate(( scrollTop: $(window.location.hash).offset().top), 1000); )

จะทำการเรียงลำดับว่าหากพบแท็กแฮชใน URL ให้ scrollTo เคลื่อนไหว ID หากไม่พบแท็กแฮช ให้ละเว้นสคริปต์

  • ส่วนที่ 1
  • ส่วนที่ 2
  • มาตรา 3

วิธีแก้ปัญหาของ Steve และ Peter ทำงานได้ดีมาก

แต่ในบางกรณี คุณอาจต้องแปลงค่าเป็นจำนวนเต็ม น่าแปลกที่บางครั้งค่าที่ส่งคืนจาก $("...").offset().top float
การใช้งาน: parseInt($("....).offset().top)

ตัวอย่างเช่น:

$("#button").click(function() ( $("html, body").animate(( scrollTop: parseInt($("#elementtoScrollToID").offset().top) ), 2000); ) );

โซลูชัน "ภาพเคลื่อนไหว" เวอร์ชันกะทัดรัด

$.fn.scrollTo = function (speed) ( if (typeof(speed) === "unknown") speed = 1000; $("html, body").animate(( scrollTop: parseInt($(this).offset) ().ความเร็วสูงสุด); );

การใช้งานพื้นฐาน: $("#your_element").scrollTo();

หากคุณเลื่อนไปที่องค์ประกอบอินพุตเท่านั้น คุณสามารถใช้ focus() ได้ ตัวอย่างเช่น หากคุณต้องการเลื่อนไปยังอินพุตที่มองเห็นได้รายการแรก:

$(":input:visible").first().focus();

หรือรายการแรกที่มองเห็นได้ในคอนเทนเนอร์ด้วยคลาส .error:

$(".error:input:visible").first().focus();

ในกรณีส่วนใหญ่ การใช้ปลั๊กอินจะดีกว่า เรื่องตลกกัน ฉันกำลังจะไป . แน่นอนว่ายังมีคนอื่นๆ อีก แต่โปรดตรวจสอบว่าพวกเขาหลีกเลี่ยงข้อผิดพลาดที่คุณต้องการใช้ปลั๊กอินตั้งแต่แรก ไม่ใช่ทั้งหมด

ฉันได้เขียนเกี่ยวกับเหตุผลในการใช้ปลั๊กอินที่อื่นแล้ว โดยสรุป ซับเดียวที่อยู่เบื้องหลังคำตอบส่วนใหญ่ที่นี่

$("html, body").animate(( scrollTop: $target.offset().top ), ระยะเวลา);

UX ไม่ดี

    ภาพเคลื่อนไหวไม่ตอบสนองต่อการกระทำของผู้ใช้ มันทำงานแม้ว่าผู้ใช้จะคลิก เล่นสั้น หรือพยายามเลื่อนก็ตาม

    หากจุดเริ่มต้นของภาพเคลื่อนไหวอยู่ใกล้กับองค์ประกอบเป้าหมาย ภาพเคลื่อนไหวจะช้ามาก

    หากองค์ประกอบเป้าหมายอยู่ใกล้ด้านล่างของหน้า จะไม่สามารถเลื่อนไปที่ด้านบนของหน้าต่างได้ ภาพเคลื่อนไหวแบบเลื่อนหยุดกะทันหัน จากนั้นจึงหยุดเคลื่อนไหวชั่วคราว

เพื่อจัดการกับปัญหาเหล่านี้ (และปัญหาอื่นๆ อีกมากมาย) คุณสามารถใช้ปลั๊กอินของฉัน jQuery.scrollable แล้วจะโทรมา.

$(หน้าต่าง).scrollTo(ตำแหน่งเป้าหมาย);

สำหรับตำแหน่งเป้าหมายนั้น $target.offset().top จะทำให้งานสำเร็จลุล่วงในกรณีส่วนใหญ่ แต่โปรดทราบว่าค่าที่ส่งคืนไม่ได้คำนึงถึงองค์ประกอบ html (ดูการสาธิตนี้) หากคุณต้องการให้ตำแหน่งเป้าหมายแม่นยำในทุกสถานการณ์ ควรใช้ดีกว่า

TargetPosition = $(หน้าต่าง).scrollTop() + $target.getBoundingClientRect().top;

วิธีนี้ใช้ได้แม้ว่าจะตั้งค่าเส้นขอบเป็นองค์ประกอบ html ก็ตาม

นี่คือแนวทางของฉัน โดยสรุป id และ href"s โดยใช้ตัวเลือกคลาสสากล

$(function() ( // ตัวเลือกทั่วไปที่จะใช้ได้ทุกที่ $(".js-scroll-to").click(function(e) ( // รับ href แบบไดนามิก var Destination = $(this).attr(" href"); // ป้องกันไม่ให้ลิงก์ href="#" เปลี่ยนแฮชของ URL (เป็นทางเลือก) e.preventDefault(); // เลื่อนภาพเคลื่อนไหวไปยังปลายทาง $("html, body").animate(( scrollTop: $(destination ).ชดเชย().ด้านบน ), 500); )); ));

ปลั๊กอิน jQuery แบบกำหนดเองที่เรียบง่ายและใช้งานง่าย เพียงเพิ่มแอตทริบิวต์ scroll= ให้กับองค์ประกอบที่คลิกได้ของคุณและตั้งค่าให้เป็นตัวเลือกที่คุณต้องการเลื่อน

อีกด้วย: คลิกฉัน. สามารถใช้กับองค์ประกอบใดก็ได้

(function($)( $.fn.animateScroll = function())( console.log($("")); $("").click(function())( selector = $($(this) attr( "scroll")); console.log(selector); console.log(selector.offset().top); $("html body").animate((scrollTop: (selector.offset().top) ), //- $(หน้าต่าง).scrollTop() 1000); )); ) ))(jQuery); // RUN jQuery(document).ready(function($) ($().animateScroll(); )); // ในตัวอย่าง HTML // เรียกใช้ ONCLICK บนวัตถุด้วย ATTRIBUTE SCROLL=".SELECTOR" // คลิกเพื่อเลื่อน

ภาพเคลื่อนไหว:

// เลื่อนไปด้านบนของหน้า $(".up").click(function () ( $("html, body").animate(( scrollTop: 0 ), 600); return false; )); // เลื่อนหน้าเพื่อยึด $(".menutop b").click(function())( //event.preventDefault(); $("html, body").animate(( scrollTop: $($(this) . attr("href")).offset().top ), 600); return false; )); // เลื่อนไปที่คลาส div $("#button").click(function() ( $("html, body").animate(( scrollTop: $("#target-element").offset().top ), 1,000); )); // div พื้นหลังเคลื่อนไหว $(window).scroll(function () ( var x = $(this).scrollTop(); // freezze div background $(".banner0").css("พื้นหลัง-ตำแหน่ง", " 0px " + x +"px"); // จากซ้ายไปขวา $(".banner0").css("พื้นหลังตำแหน่ง", x+"px " +"0px"); // จากขวาไปซ้าย $( ".banner0").css("พื้นหลัง-ตำแหน่ง", -x+"px " +"0px"); // จากล่างขึ้นบน $("#skills").css("พื้นหลัง-ตำแหน่ง", "0px " + -x + "px"); // ย้ายพื้นหลังจากบนลงล่าง $(".skills1").css("พื้นหลัง-ตำแหน่ง", "0% " + parseInt(-x / 1) + "px" + ", 0% " + parseInt(-x / 1) + "px, ตรงกลางด้านบน"); // แสดงซ่อนเมนู mtop ถ้า (x > 100) ( $(".menu").addClass("menushow"); $(".menu").fadeIn("slow"); $(".menu").animate((ความทึบ: 0.75), 500); ) else ( $(".menu").removeClass("menushow" ); $(".menu").animate((ความทึบ: 1), 500); ) )); // แถบความคืบหน้าของแอนิเมชั่นแบบง่าย $(".bar1").each(function(i) ( var width = $(this).data("width"); $(this).animate(("width" : width + "%" ), 900, function())( // แอนิเมชั่นเสร็จสมบูรณ์ )); ));

$("html, body").animate(...) ไม่เหมาะกับฉันบน iphone, เบราว์เซอร์ chrome

ฉันจำเป็นต้องปรับแต่งองค์ประกอบเนื้อหาเป้าหมายบนเพจ

$("# ติดต่อ"). เคลื่อนไหว (...)

นี่คือสิ่งที่ฉันลงเอยด้วย

ถ้า (navigator.userAgent.match(/(iPod|iPhone|iPad|Android)/)) ( $("#content").animate(( scrollTop: $("#elementtoScrollToID").offset().top ) "ช้า"); ) else( $("html, body").animate(( scrollTop: $("#elementtoScrollToID").offset().top ), "slow"); )

เนื้อหาเต็มผูกกับ #content div

.... ....

หากคุณต้องการเลื่อนในคอนเทนเนอร์โอเวอร์โฟลว์ (แทนที่จะเป็น $("html, body") ซึ่งอยู่ด้านบน) ในขณะที่ทำงานกับการวางตำแหน่งที่แน่นอน นี่คือวิธีที่จะไป:

องค์ประกอบ = $("#myElement"), container = $("#myScrollableContainer"), pos = elem.position().top + container.scrollTop() - container.position().top; คอนเทนเนอร์ animate (( scrollTop: pos)

jQuery(document).ready(function($) ($("a").bind("click.smoothscroll",function (e) ( e.preventDefault(); var target = this.hash, $target = $( เป้าหมาย); $("html, body").stop().animate(( "scrollTop": $target.offset().top-40 ), 900, "swing", function () ( window.location.hash = เป้าหมาย; )); )); ));

  • ส่วนที่ 1
  • ส่วนที่ 2
  • มาตรา 3

$("html, body").animate((scrollTop: Math.min($(to).offset().top-margintop, //margintop คือระยะขอบที่อยู่เหนือเป้าหมาย $("body").scrollHeight-$ ("body").height()) //หากเป้าหมายอยู่ด้านล่าง ), 2000);

หากต้องการแสดงองค์ประกอบทั้งหมด (ด้วยขนาดหน้าต่างปัจจุบันถ้าเป็นไปได้):

องค์ประกอบ Var = $("#some_element"); var elementHeight = element.height(); var windowHeight = $(หน้าต่าง).height(); var offset = Math.min(elementHeight, windowHeight) + element.offset().top; $("html, body").animate(( scrollTop: offset ), 500);

ฉันเขียนฟังก์ชันวัตถุประสงค์ทั่วไปที่เลื่อนดูวัตถุ jQuery ตัวเลือก CSS หรือค่าตัวเลข

ตัวอย่างการใช้งาน:

// เลื่อนไปที่ "#target-element": $.scrollTo("#target-element"); // เลื่อนไปที่ 80 พิกเซลเหนือองค์ประกอบแรกด้วยคลาส ".invalid": $.scrollTo(".invalid", -80); // เลื่อนคอนเทนเนอร์ที่มีรหัส #my-container ถึง 300 พิกเซลจากด้านบน: $.scrollTo(300, 0, "slow", "#my-container");

รหัสฟังก์ชัน:

/** * เลื่อนคอนเทนเนอร์ไปยังตำแหน่งเป้าหมายลบออฟเซ็ต * * @param เป้าหมาย - ปลายทางที่จะเลื่อนไปอาจเป็นวัตถุ jQuery * ตัวเลือก jQuery หรือตำแหน่งตัวเลข * @param offset - ออฟเซ็ตเป็นพิกเซลจากเป้าหมาย ตำแหน่งเช่น * ผ่าน -80 เพื่อเลื่อนไปที่ 80 พิกเซลเหนือเป้าหมาย * @param speed - ความเร็วในการเลื่อนเป็นมิลลิวินาที หรือหนึ่งในสตริง * "เร็ว" หรือ "ช้า" ค่าเริ่มต้น: 500 * @param คอนเทนเนอร์ - วัตถุ jQuery หรือตัวเลือกสำหรับคอนเทนเนอร์ที่จะ * เลื่อน ค่าเริ่มต้น: "html, body" */ jQuery.scrollTo = function (เป้าหมาย, ออฟเซ็ต, ความเร็ว, คอนเทนเนอร์) ( if (isNaN(target)) ( if (!(target instanceof jQuery)) target = $(target); target = parseInt(target.offset().top); )คอนเทนเนอร์ = คอนเทนเนอร์ || "html, body"; if (!(container instanceof jQuery)) คอนเทนเนอร์ = $(container); speed = speed || 500; offset = offset | | 0; container.animate(( scrollTop: target + offset ), ความเร็ว); );

เข้าร่วมการสนทนา
อ่านด้วย
ตัวเลขเป็นภาษาอังกฤษ (สำหรับผู้เริ่มต้น)
Sein และ haben - ภาษาเยอรมันออนไลน์ - เริ่ม Deutsch
Infinitive และ Gerund ในภาษาอังกฤษ