[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: jQuery! колесо мыши
Stasonix
как ограничить прокрутку колесика мыши только 1-им событием, в моем случае это alert(way)?

Дело в том что когда прокручивается колесо мыши, то происходит сразу несколько alert'ов (событий), можете сами убедиться на этом примере:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script
type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script
type="text/javascript">
$(document).ready(function(){

var tempScrollTop,currentScrollTop = 0;

var way = "default"; // направление

$(window).scroll(function()
{

currentScrollTop = $(window).scrollTop();

if (tempScrollTop < currentScrollTop)
{
way= "down"; // крутнули вниз колесо
}
else if (tempScrollTop > currentScrollTop)
{
way= "up"; // крутнули вверх колесо
}

tempScrollTop = currentScrollTop;

alert(way);

});

});
</script>
</head>
<body>
<style>

body { height: 3000px; }
</style>
</body>
</html>


возможно ли как это отрегулировать, чтобы на 1-ну прокрутку срабатывало только 1-но событие, т.е. 1 alert?



Спустя 40 минут, 40 секунд (19.04.2012 - 17:37) SoMeOnE написал(а):
Когда срабатывает алерт, определи какую нибудь переменную как true допустим.
И до события прокрутки проверяй эту переменную. Т.е глобально определи ее как фалсе. И если фалсе тогда события срабатывает, если уже тру, то нет.

Спустя 2 минуты, 51 секунда (19.04.2012 - 17:39) redreem написал(а):
bingo = false;

$(document).ready(function(){

if (bingo) return; else bingo = true;

var tempScrollTop,currentScrollTop = 0;

var way = "default"; // направление

$(window).scroll(function()
{

currentScrollTop = $(window).scrollTop();

if (tempScrollTop < currentScrollTop)
{
way= "down"; // крутнули вниз колесо
}
else if (tempScrollTop > currentScrollTop)
{
way= "up"; // крутнули вверх колесо
}

tempScrollTop = currentScrollTop;

alert(way);

});

});

Спустя 12 минут, 4 секунды (19.04.2012 - 17:51) Stasonix написал(а):
redreem
так вообще alert не срабатывает. Имеется в виду что если 1 раз крутанули, 1 раз он и сработал, затем если еще раз крутанули, опять сработал alert, а не 1 раз крутанули и 30 раз он сработал.

Спустя 9 минут, 1 секунда (19.04.2012 - 18:00) Stasonix написал(а):
по возможности, если кто ни въехал или скрип работает правильно, попробуйте открыть в IE 8, поймете в чем дело.

Спустя 15 минут, 30 секунд (19.04.2012 - 18:16) Stasonix написал(а):
допустим, черт с ним с alert'ом, если там функция допустим анимации:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script
type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script
type="text/javascript">

$(document).ready(function(){


var tempScrollTop,currentScrollTop = 0;

var way = "default"; // направление

$(window).scroll(function()
{


currentScrollTop = $(window).scrollTop();

if (tempScrollTop < currentScrollTop)
{
way= "down"; // крутнули вниз колесо

}
else if (tempScrollTop > currentScrollTop)
{
way= "up"; // крутнули вверх колесо

}

tempScrollTop = currentScrollTop;

// alert(way); console.log('way: '+way);

$('#test').animate({top:"40px"},100,function(){ alert("CALLBACK"); });

});

});
</script>
</head>
<body>
<style>

body { height: 3000px; }
#test { border: 1px solid; width: 100px; height: 100px; }
</style>
<div
id="test"></div>
</body>
</html>



у меня alert('CALLBACK'); сработал 3 раза в chrome.

Спустя 42 минуты, 49 секунд (19.04.2012 - 18:59) redreem написал(а):
$(document).ready(function(){

var tempScrollTop,currentScrollTop = 0;

var way = "default"; // направление

bingo = false;

$(window).scroll(function() {

if (bingo) return; else bingo = true;

currentScrollTop = $(window).scrollTop();

if (tempScrollTop < currentScrollTop) {

way= "down"; // крутнули вниз колесо

} else if (tempScrollTop > currentScrollTop) {

way= "up"; // крутнули вверх колесо

}

tempScrollTop = currentScrollTop;

window.setTimeout(function() {

bingo = false;

},200);

alert(way);

});

});


да ж проверил в IE8 :)

Спустя 5 часов, 34 минуты, 57 секунд (20.04.2012 - 00:34) Stasonix написал(а):
что-то я поспешил радоваться с этими bingo и т.п., так как это локальная задача была, лучше расскажу суть глобальной, потому что не получается у меня с вашими вариантами:

имеется слайдер, который работает по скроллу, скроллит к нужному якорю, все это относится к ИЕ, в частности к 8-й его версии, так как на других я ни тестил, сейчас это выглядит так:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script
type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script
type="text/javascript" src="underscore-min.js"></script>
<script
type="text/javascript">

$(document).ready(function(){


var tempScrollTop,currentScrollTop = 0;

var way = "default";

// array of the anchors
var jak = new Array("jak1","jak2","jak3","jak4");
i = 0;

// scroll to id
function goToByScroll(id)
{
$('html,body').animate({scrollTop: $("#"+id).offset().top},"fast");
}

$(window).scroll(function()
{

currentScrollTop = $(window).scrollTop();

if (tempScrollTop < currentScrollTop)
{
way= "down";
i++;
}
else if (tempScrollTop > currentScrollTop)
{
way= "up";
i--;
}

tempScrollTop = currentScrollTop;

if (i<0) { ++i; }
if (i>=4){ --i; }

// so, we go the current anchor
goToByScroll(jak[i]);

});

});
</script>
</head>
<body>
<style>

html,body { width: 100%; height: 100%;}
div { margin: 0 auto; border: 1px solid; width: 500px; height: 100%; text-align: center; }
</style>
<div
id="jak1">1</div>
<div
id="jak2">2</div>
<div
id="jak3">3</div>
<div
id="jak4">4</div>
</body>
</html>



увы, это нерабочий вариант, обычную анимацию без полосы прокрутки я не могу использовать, это обусловлено тем что в телефонах тогда не будет работать, идиотизм может быть, но других я не вижу вариантов.

Спустя 7 часов, 9 минут, 40 секунд (20.04.2012 - 07:43) redreem написал(а):
глянь код. из монитора увидишь, что проблема в определении направления скрола. дальше сам попробуй попили.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script
type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
</head>
<body>

<style>

html,body { width: 100%; height: 100%;}
div { margin: 0 auto; border: 1px solid; width: 500px; height: 100%; text-align: center; }
</style>

<div
id="monitor" style="position:fixed;width:500px;top:20px;left:0;border:1px solid #faa;height:50px">монитор</div>

<div
id="jak1">1</div>
<div
id="jak2">2</div>
<div
id="jak3">3</div>
<div
id="jak4">4</div>

<script
type="text/javascript">

$$BS = bingoScroller = {

tempScrollTop:0,
currentScrollTop:0,
bingo:false,
way:'default',

jak:new Array("jak1","jak2","jak3","jak4"),
i:0,

monitor:function() {

$('#monitor').html(
'tempScrollTop: ' + $$BS.tempScrollTop +
' currentScrollTop: ' + $$BS.currentScrollTop +
' bingo: ' + $$BS.bingo +
' way: ' + $$BS.way +
' i: ' + $$BS.i
);

},

goToByScroll:function(id) {

var o = $("#"+id).offset().top;

$('html,body').animate({scrollTop: o},"fast", function() {

$$BS.monitor();
window.setTimeout(function() {

$$BS.bingo = false;
$$BS.monitor();

},400);
});

},

onScroll:function() {

this.monitor();

if (this.bingo) return; else this.bingo = true;

this.currentScrollTop = $(window).scrollTop();

if (this.tempScrollTop < this.currentScrollTop) {

this.way= "down";
this.i++;

} else if (this.tempScrollTop > this.currentScrollTop) {

this.way= "up";
this.i--;

}

this.tempScrollTop = this.currentScrollTop;

if (this.i<0) { i = 0; }
if (this.i>4) { i = this.jak.length - 1; }

// so, we go the current anchor
this.goToByScroll(this.jak[this.i]);

}

}
;


$(document).ready(function(){

$(window).scroll( function() { $$BS.onScroll(); } );

});

</script>

</body>
</html>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.