Привязать перемещение мыши к событию mousedown (jQuery) - PullRequest
1 голос
/ 28 декабря 2010

Я создаю сайт с горизонтальной прокруткой. Не ненавидь! Кажется, все работает нормально, кроме случаев, когда я связываю событие mousemove в mousedown, свойство dom scrollLeft не меняется. 'moving' и 'mouseup' записываются в консоль в соответствующее время. Вот мой код ... РЕДАКТИРОВАТЬ: Кроме того, я заметил, что если я пишу $ ('# container'). ScrollLeft на консоль mousedown, он возвращает 'function ()' вместо значения.

$(document).ready(function() {
    $('#container').mousedown(function(event) {
        $(this)
            .data('down',true)
            .data('x',event.pageX)
            .data('scrollLeft',this.scrollLeft)
            .css({'cursor':'url("http://www.loodieloodieloodie.com/images/closedhand.cur"),auto'});
        $('body').bind('mousemove',function(event) {
            console.log('moving');
            $('#container').scrollLeft = $('#container').data('scrollLeft') + ($('#container').data('x') - event.pageX) * 2;
        }).bind('mouseup',function() {
            $('#container')
                .data('down',false)
                .css({'cursor':'url("http://www.loodieloodieloodie.com/images/openhand.cur"),auto'});
            console.log('mouseup');
            $(this).unbind('mousemove');
        });
        return false;
    }).css({
        'overflow':'hidden',
        'cursor':'url("http://www.loodieloodieloodie.com/images/openhand.cur"),auto'
    });
});

и вот основной HTML ...

<body>
    <div id="container">
        <div id="inner">
            CONTENT
        </div>
    </div>
</body>

Спасибо за помощь, B

1 Ответ

2 голосов
/ 28 декабря 2010

В объектах jQuery отсутствует .scrollLeft свойство , поэтому вместо tis:

$('#container').scrollLeft = $('#container').data('scrollLeft') + ($('#container').data('x') - event.pageX) * 2;

Вам нужна функция .scrollLeft() вызов, как это:

$('#container').scrollLeft($('#container').data('scrollLeft') + ($('#container').data('x') - event.pageX) * 2);

или .css() вызов, как это:

$('#container').css({ scrollLeft: $('#container').data('scrollLeft') + ($('#container').data('x') - event.pageX) * 2 });
...