ปิดใช้งานการเลื่อนแนวนอน [ปิด]


180

ตกลงด้วยเหตุผลบางอย่างที่หน้าเว็บของฉันเลื่อนจากซ้ายไปขวาและแสดงพื้นที่ที่น่าเกลียดมาก

ฉันค้นหาผลลัพธ์ แต่พวกเขาเพิ่งทำแถบเลื่อนHIDDEN

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

ฉันลองแล้ว: overflow-x:hiddenใน css บนhtmlแท็กของฉันแต่มันทำให้แถบเลื่อนถูกซ่อนและไม่ได้ปิดการใช้งานการเลื่อน

โปรดช่วยฉันด้วย!

นี่คือลิงค์ไปยังหน้า: http://www.green-panda.com/usd309bands/ (ลิงค์เสีย)

นี่อาจทำให้คุณมีความคิดที่ดีขึ้นเกี่ยวกับสิ่งที่ฉันกำลังพูดถึง

นี่คือเมื่อหน้าแรกโหลด:

ป้อนคำอธิบายรูปภาพที่นี่

และนี่คือหลังจากที่ฉันเลื่อนไปทางขวา:

ป้อนคำอธิบายรูปภาพที่นี่


1
คุณจะเลื่อนในแนวนอนได้อย่างไรหากไม่มีแถบเลื่อนแนวนอน?
Roddy of Peas แช่แข็ง

9
ใช้สองนิ้วบนเมาส์ซ้ายไปขวาบนแล็ปท็อป
user2371301

1
จากความอยากรู้อะไรในหน้าของคุณสร้างแถบเลื่อนเริ่มต้น?
Trojan

4
วิธีการเลื่อนแบบไม่มีแถบเลื่อน? ลากคลิกกลางล้อบน Windows
Nayuki

จะต้องมีการบล็อกซึ่งจะมีช่องว่างภายในเป็นพิเศษคือการขยายความกว้าง 100% ลบที่จะมีการปฏิบัติที่ดี
ผื่น

คำตอบ:


494

ลองเพิ่มสิ่งนี้ลงใน CSS ของคุณ

html, body {
    max-width: 100%;
    overflow-x: hidden;
}

5
มันใช้งานได้ดีมาก ฉันดีใจที่พบคนที่เข้าใจสิ่งที่ฉันพูด! ฉันจะยอมรับโดยเร็วที่สุด
2371301

44
ใน Chrome 34 นี่ไม่ได้เป็นการป้องกันการเลื่อน มันซ่อนแถบเลื่อน แต่ด้วยการเลื่อนปุ่มกลางฉันยังคงเห็นองค์ประกอบที่ซ่อนอยู่ทางซ้าย
gphilip

2
สิ่งนี้จะไม่ทำงานเมื่อคุณย่อขนาดหน้าต่างเบราว์เซอร์ให้เล็กสุดเท่าที่จะเป็นไปได้
dspacejs

4
: - / การเลื่อนแบบสัมผัส / โมเมนตัมที่ทำให้หยุดทำงานบน iPhone
MarkWPiper

2
ฉันรักคุณนะ !!
rochasdv

13

นี่เป็นลูกที่น่ารังเกียจของรหัสของคุณ :)

.container, .navbar-static-top .container, .navbar-fixed-top .container, .navbar-fixed-bottom .container {
width: 1170px;
}

แทนที่ด้วย

.container, .navbar-static-top .container, .navbar-fixed-top .container, .navbar-fixed-bottom .container {
width: 100%;
}

13

ดังนั้นเพื่อแก้ไขปัญหานี้อย่างถูกต้องฉันทำสิ่งที่คนอื่นทำที่นี่และใช้ css เพื่อซ่อนแถบเครื่องมือแนวนอน:

.name {
  max-width: 100%;
  overflow-x: hidden;
}

จากนั้นใน js ฉันสร้างผู้ฟังเหตุการณ์เพื่อค้นหาการเลื่อนและต่อต้านผู้ใช้ที่พยายามเลื่อนแนวนอน

var scrollEventHandler = function()
{
  window.scroll(0, window.pageYOffset)
}

window.addEventListener("scroll", scrollEventHandler, false);

ฉันเห็นบางคนทำสิ่งที่คล้ายกัน แต่ดูเหมือนจะไม่ทำงาน อย่างไรก็ตามมันก็ใช้ได้ดีสำหรับฉัน


มันใช้งานได้สำหรับฉัน อย่างไรก็ตามมีกระวนกระวายใจบนมือถือเมื่อปัด; ในขณะที่การเคลื่อนไหวช้าลง
แทบจะไม่สามารถประกาศได้

"ถูกต้อง" ไม่มาก แต่ก็ยังเป็นคำตอบที่ดีและสร้างสรรค์
Feathercrown

9

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

นี่คือลิงค์ไปยังโพสต์ในCSS Tricks

var docWidth = document.documentElement.offsetWidth;
[].forEach.call(
  document.querySelectorAll('*'),
  function(el) {
    if (el.offsetWidth > docWidth) {
      console.log(el);
    }
  }
);

มันอาจส่งคืนสิ่งนี้:

<div class="div-with-extra-width">...</div>

จากนั้นคุณเพียงลบความกว้างพิเศษออกจากdivหรือตั้งค่าmax-width:100%

หวังว่านี่จะช่วยได้!

มันแก้ไขปัญหาให้ฉัน:]


ในฐานะบันทึกย่อของไซต์ boundingClientRect มีความแม่นยำมากกว่า offsetWidth: - developer.mozilla.org/en-US/docs/Web/API/Element/… - stackoverflow.com/questions/43537559/…
The Fool

ประหยัดชีวิตแน่นอน!
ก้อย

8

ลองใช้อันนี้เพื่อปิดการใช้งานการเลื่อนความกว้างสำหรับร่างกายโดยเฉพาะเอกสารทั้งหมดเป็นเพียงเนื้อหา body{overflow-x: hidden;}


5

koala_dev ตอบว่าสิ่งนี้จะทำงาน:

html, body {
   max-width: 100%;
   overflow-x: hidden;
}

และ MarkWPiper ให้ความเห็นว่า ": - / / การเลื่อนแบบสัมผัส / โมเมนตัมที่ทำให้หยุดทำงานบน iPhone"

ทางออกของการสัมผัส / โมเมนตัมบน iPhone คือการเพิ่มบรรทัดนี้ในบล็อก css สำหรับ html, body:

    height:auto!important;

จะวางที่ไหน ใต้แท็กเนื้อหาหรือข้อความค้นหาสื่อสำหรับหน้าจอขนาดเล็ก
Umair

1
@ Umair ขอบคุณ - ความคิดเห็นที่แก้ไขเพื่อชี้แจงว่า height: auto line ไปใน html, body css block
ffffff

ขอบคุณมากสำหรับความสูง: โซลูชันอัตโนมัติ!
Torben

2

คำตอบของ Koala_dev จะใช้ได้ แต่ในกรณีที่คุณสงสัยว่านี่คือเหตุผลว่าทำไมมันถึงได้ผล:

.
q.html, body {              <--applying this css block to everything in the
                             html code.

q.max-width: 100%;          <--all items created must not exceed 100% of the 
                             users screen size. (no items can be off the page 
                             requiring scroll)

q.overflow-x: hidden;       <--anything that occurs off the X axis of the 
                             page is hidden, so that you wont see it going 
                             off the page.     

.


ขอบคุณฉันรักการศึกษา
Pimp Trizkit

2

หากคุณต้องการปิดการใช้งานการเลื่อนแนวนอนตลอดความกว้างหน้าจอให้ใช้รหัสนี้

element {
  max-width: 100vw;
  overflow-x: hidden;
}

สิ่งนี้ทำงานได้ดีกว่า "100%" เพราะจะไม่สนใจความกว้างพาเรนต์และใช้วิวพอร์ตแทน


2

คุณสามารถลองวิธีทั้งหมดนี้ได้ในหน้า html ของเรา ..

วิธีที่ 1

body { overflow-x:hidden; }

วิธีที่ 2 คุณสามารถใช้สิ่งต่อไปนี้ในแท็ก body CSS ของคุณ:

overflow-y: scroll; overflow-x: hidden;

ที่จะลบแถบเลื่อนของคุณ

วิธีที่ 3

body { min-width: 1167px; }

วิธีที่ 5

html, body { max-width: 100%; overflow-x: hidden; }

วิธีที่ 6

element { max-width: 100vw; overflow-x: hidden; }

วิธีที่ 4 ..

var docWidth = document.documentElement.offsetWidth; [].forEach.call( document.querySelectorAll('*'), function(el) { if (el.offsetWidth > docWidth) { console.log(el); } } );

ตอนนี้ฉันกำลังค้นหาข้อมูลเพิ่มเติม .. !!!!


1

ฉันต้องจัดการกับมันด้วยตัวเอง หลังจากทั้งหมดฉันพบวิธีนี้ง่ายที่สุดและมีประโยชน์ เพียงเพิ่ม

overflow-x: hidden;

ถึงผู้ปกครองภายนอกของคุณ ในกรณีของฉันดูเหมือนว่านี้:

<body style="overflow-x: hidden;">

คุณต้องใช้overflow-xเพราะถ้าคุณใช้เพียงแค่overflowคุณปิดการใช้งานการเลื่อนแนวตั้งเช่นกันoverflow-y

หากการเลื่อนแนวตั้งยังคงปิดใช้งานอยู่คุณสามารถเปิดใช้งานการเลื่อนอย่างชัดเจนด้วย:

overflow-y: scroll;

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


1
.name 
  { 
      max-width: 100%; 
       overflow-x: hidden; 
   }

คุณใช้สไตล์ข้างต้นหรือคุณสามารถสร้างฟังก์ชั่นในjavaScriptเพื่อแก้ไขปัญหานั้น


0

คุณสามารถแทนที่เหตุการณ์การเลื่อนเนื้อหาด้วย JavaScript และรีเซ็ตการเลื่อนแนวนอนเป็น 0

function bindEvent(e, eventName, callback) {
    if(e.addEventListener) // new browsers
        e.addEventListener(eventName, callback, false);
    else if(e.attachEvent) // IE
        e.attachEvent('on'+ eventName, callback);
};

bindEvent(document.body, 'scroll', function(e) {
    document.body.scrollLeft = 0;
});

ฉันไม่แนะนำให้ทำเช่นนี้เพราะมัน จำกัด การใช้งานสำหรับผู้ใช้ที่มีหน้าจอขนาดเล็ก


2
ฉันจะลองสิ่งนี้การแก้ไข CSS ไม่สามารถใช้งานได้ในโครงการของฉันแม้จะไม่ได้ผล :(
Leon Gaban

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