Фоновое позиционирование с помощью jquery не работает в IE7 - PullRequest
0 голосов
/ 01 февраля 2010

Мой скрипт должен динамически изменять положение фона при нажатии на кнопку (добавление или вычитание 1 процента от текущего значения).Прекрасно работает в Fx и Chrome, и ie8 тоже (я полагаю), хотя не в ie7.

Вот мой код:

function makeClicker(index) {
    $('#leftbutton' + index).click(function() {
        var bPos = $('#div' + index).css('background-position');
        bPos = bPos.replace(/%/g, '').split(' ');
        var bPosResult = (1 + parseInt(bPos[0], 0));
        bPos = bPosResult + '% ' + bPos[1] + '%';
        $('#div' + index).css('background-position', bPos);
        $('#vposition' + index).attr("value", bPosResult + '%');
    });
    $('#rightbutton' + index).click(function() {
        var bPos = $('#div' + index).css('background-position');
        bPos = bPos.replace(/%/g, '').split(' ');
        var bPosResult = (-1 + parseInt(bPos[0], 0));
        bPos = bPosResult + '% ' + bPos[1] + '%';
        $('#div' + index).css('background-position', bPos);
        $('#vposition' + index).attr("value", bPosResult + '%');
    });
    $('#upbutton' + index).click(function() {
        var bPos = $('#div' + index).css('background-position');
        bPos = bPos.replace(/%/g, '').split(' ');
        var bPosResult = (1 + parseInt(bPos[1], 0));
        bPos = bPos[0] + '% ' + bPosResult + '%';
        $('#div' + index).css('background-position', bPos);
        $('#hposition' + index).attr("value", bPosResult + '%');
    });
    $('#downbutton' + index).click(function() {
        var bPos = $('#div' + index).css('background-position');
        bPos = bPos.replace(/%/g, '').split(' ');
        var bPosResult = (-1 + parseInt(bPos[1], 0));
        bPos = bPos[0] + '% ' + bPosResult + '%';
        $('#div' + index).css('background-position', bPos);
        $('#hposition' + index).attr("value", bPosResult + '%');
    });
}

for(var i = 1; i <= 5; i++)
    makeClicker(i);

Спасибо за любые советы о том, что может вызвать это.-Simon

1 Ответ

2 голосов
/ 01 февраля 2010

Для Internet Explorer вам нужно использовать атрибуты background-position-x и background-position-y.

Вот пример того, как вы можете также поддерживать IE. Я также немного переработал ваш код, чтобы уменьшить избыточность:

function makeClicker(index) {

    var el = ['#leftbutton'+index, '#rightbutton'+index, '#upbutton'+index, '#downbutton'+index];

    $(el).click(function() {
        var bPosResult;
        var bPos = $('#div' + index).css('background-position').replace(/%/g, '').split(' ');

        switch($(this).attr('id')) {
            case 'leftbutton':
                bPosResult = (1 + parseInt(bPos[0], 0));
                bPos = bPosResult + '% ' + bPos[1] + '%';
                break;
            case 'rightbutton':
                bPosResult = (-1 + parseInt(bPos[0], 0));
                bPos = bPosResult + '% ' + bPos[1] + '%';
                break;
            case 'upbutton':
                bPosResult = (1 + parseInt(bPos[1], 0));
                bPos = bPos[0] + '% ' + bPosResult + '%';
                break;
            case 'downbutton':
                bPosResult = (-1 + parseInt(bPos[1], 0));
                bPos = bPos[0] + '% ' + bPosResult + '%';
                break;
        }

        // Detect IE
        if(!$.support.cssFloat) {
            $('#div' + index).css({
                backgroundPositionX: bPos.split[' '][0],
                backgroundPositionX: bPos.split[' '][1]
            });
        } else {
            $('#div' + index).css('background-position', bPos);
        }
        $('#vposition' + index).attr("value", bPosResult + '%');
    });
}

Я не проверял это, но оно должно работать.

...