ウィンドウがあり、通常は上下、左右、斜めにスクロールできるとしましょう。言い換えれば、私たちは同時に下にスクロールして左にスクロールすることができます。私がやりたいのは、一度に一方向だけスクロールすることです。上下または左右のいずれか。対角線をスクロールしたくありません。
それはHTMLで可能ですか?
ウィンドウがあり、通常は上下、左右、斜めにスクロールできるとしましょう。言い換えれば、私たちは同時に下にスクロールして左にスクロールすることができます。私がやりたいのは、一度に一方向だけスクロールすることです。上下または左右のいずれか。対角線をスクロールしたくありません。
それはHTMLで可能ですか?
通常、Webサイトの幅が画面サイズを超えない限り、x方向にスクロールすることはできません。唯一の方法は、CSSでオーバーフローを防ぐことoverflow-x: hidden
です。
ただし、ユーザーがコンテンツを表示できなくなったり(スマートフォンのディスプレイなど)、ブラウザズームを使用したりする場合は、非表示のコンテンツに問題がある可能性があります...
私は個人的に純粋なHTMLメソッドを知りませんが、一方向のスクロールについてはSlyプラグインをチェックしてください。トリックを行う必要があります。
マウスの中ボタンのスクロールを無効にする場合は、これをhead
HTMLドキュメントのセクションに配置できます(これにより、実際には中ボタンが無効になることに注意してください)。
$(document).ready(function(){
document.onmousedown = window.onmousedown = function (e) {
if(e.which == 2)
{
e = e || window.event;
if (e.preventDefault)
e.preventDefault();
e.returnValue = false;
}
};
});
これらの答えはあなたが望んでいたものではないようです。私はここに来て同じ質問をし、もっと簡単な方法を探しましたが、これはやらなければならないようです:
//When scrolling, execute the "Lock Direction" function lockdir()
<body onscroll="lockdir()">
体の中に(または頭も機能すると思いますが)、次のスクリプトを追加します。
<script>
//Scroll Variables
var scr = {
initPos: [0, 0], //Initial Mouse Position
cPos: [0, 0], //Current Mouse Position
locked: 0, //A direction is locked
timeout: 0, //Scroll timeout counter
}
//Lock Direction Function
function lockdir(){
scr.timeout = 0; //Keep scroll counter at 0 while scrolling
//Get the current mouse position and find difference to initial position
scr.cPos = [
document.body.scrollTop,
document.body.scrollLeft
];
var dif = [
Math.abs(cPos[0] - scr.initPos[0]),
Math.abs(cPos[1] - scr.initPos[1])
];
//If no direction is locked (0), lock direction moved least when scrolling started
if (scr.locked === 0){
if (dif[1] > dif[0]){
scr.locked = 2; //Lock Vertical Scrolling
}else{
scr.locked = 1; //Lock Horizontal Scrolling
}
}
//Reset Locked Direction to initial value
if (scr.locked === 1){
document.body.scrollLeft = scr.initPos[1];
}else{
document.body.scrollTop = scr.initPos[0];
}
}
//Cancels Lock if timer exceeds 20 milliseconds
function cancelLock(){
if (scr.timeout > 20){
scr.locked = 0;
scr.initPos = scr.cPos;
}
scr.timeout++;
}
window.setInterval(cancelLock, 1); //Repeats cancel lock
</script>