使用 jquery 进行后台定位在 IE7 中不起作用

发布于 2024-08-19 20:15:56 字数 1845 浏览 10 评论 0原文

我的脚本应该在单击按钮时动态更改背景位置(在当前值中添加或减去 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);

感谢您对可能导致此问题的任何建议。 -西蒙

My script is supposed to dynamically change the background-position when clicking on a button (adding or substracting 1 percent from the current value). Works fine in Fx and Chrome, and ie8 too (i believe), though not in ie7.

Here's my code:

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);

Thanks for any advices on what could cause this.
-Simon

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧话新听 2024-08-26 20:15:56

对于 Internet Explorer,您需要使用 background-position-xbackground-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 + '%');
    });
}

我还没有测试过,但它应该可以工作。

For Internet Explorer, you need to use the background-position-x and background-position-y attributes.

Here's an example on how you can support IE also. I also refactored your code a bit to reduce redundancy:

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 + '%');
    });
}

I haven't tested that but it should work.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文