Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.09.2014, 15:34
Новичок на форуме
Отправить личное сообщение для AlexGermm Посмотреть профиль Найти все сообщения от AlexGermm
 
Регистрация: 26.09.2014
Сообщений: 2

Не правильно работает установка offset
Доброго времени суток!
Пишу для сайта функционал, который группирует несколько объектов в один div и позволяет работать с ними, как с группой, т.е. изменять размер, крутить и т.п. Проблема возникла с сохранением параметров этих объектов внутри общего div'а, а именно не получается задать им правильную позицию с помощью offset.
function grouped_objects_saving(merged_block_id){ 
    var count = $("#"+merged_block_id+" > .merged").length;
    var angle = transform_to_angle(merged_block_id);
    var scaleX = transform_to_scale(merged_block_id, "x");
    var scaleY = transform_to_scale(merged_block_id, "y");
    var brows = browser();
    var topOff = [];
    var leftOff = [];
    var objId = [];
    var width = [];
    var height = [];
    var imageAngle = [];
    var resultAngle = [];
    var transform = "";
    var check = false;
        switch(brows){
            case "Chrome":
                transform = $('#'+merged_block_id).css('-webkit-transform');
            break;
            case "IE":
                transform = $('#'+merged_block_id).css('-ms-transform');
            break;
            case "Firefox":
                transform = $('#'+merged_block_id).css('-moz-transform');
            break;
            default:
                transform = $('#'+merged_block_id).css('transform');
            break;
        }
        for (i=0; i<count; i++) {
            objId[i] = $("#"+merged_block_id+" > .merged").eq(i).attr('id');
            topOff[i] = $("#"+merged_block_id+" > .merged").eq(i).offset().top;
            leftOff[i] = $("#"+merged_block_id+" > .merged").eq(i).offset().left;
            width[i] = $("#"+objId[i]).width();
            height[i] = $("#"+objId[i]).height();
            imageAngle[i] = transform_to_angle(objId[i]);
            resultAngle[i] = imageAngle[i]+angle;
            $("#"+objId[i]).offset({top: topOff[i], left: leftOff[i]});
        }
        for (i=0; i<count; i++) {
            $("#"+objId[i]).appendTo($('#workarea'));
            switch(brows){
                case "Chrome":
                    $("#"+objId[i]).css({'-webkit-transform': 'rotate('+resultAngle[i]+'deg)'});
                break;
                case "IE":
                    $("#"+objId[i]).css({'-ms-transform': 'rotate('+resultAngle[i]+'deg)'});
                break;
                case "Firefox":
                    $("#"+objId[i]).css({'-moz-transform': 'rotate('+resultAngle[i]+'deg)'});
                break;
                default:
                    $("#"+objId[i]).css({'transform': 'rotate('+resultAngle[i]+'deg)'});
                break;
            }
            $("#"+objId[i]).width(width[i]*scaleX);
            $("#"+objId[i]).height(height[i]*scaleY);
            $("#"+objId[i]).css({"position": "relative"});
            $("#"+objId[i]).appendTo($('#'+merged_block_id));
            //$("#"+objId[i]).addClass("editable selectable"); 
            if (i==count-1) {
                check = true;
            }
        }
        if (check==true){
            for (i=0; i<count; i++) {
                console.log('$("#'+objId[i]+'").offset({top:'+topOff[i]+', left:'+leftOff[i]+'});');
                $("#"+objId[i]).offset({top: topOff[i], left: leftOff[i]});
            }
        }
    return true;
}

Проблема заключается в последних строках:
$("#"+objId[i]).offset({top: topOff[i], left: leftOff[i]});

Offset просто не устанавливается. Причем, если я скопирую строку, которая приходит в браузер отсюда:
console.log('$("#'+objId[i]+'").offset({top:'+topOff[i]+', left:'+leftOff[i]+'});'

например
$("#custom-image-58clx").offset({top:393.089111328125, left:407.17822265625});

и просто запущу её в консоли, то всё устанавливается правильно.

Бьюсь уже который час, пытаюсь понять причины такого поведения, но ничего не выходит.
Ответить с цитированием
  #2 (permalink)  
Старый 26.09.2014, 17:55
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,127

Приведение типов
Ответить с цитированием
  #3 (permalink)  
Старый 26.09.2014, 19:48
Новичок на форуме
Отправить личное сообщение для AlexGermm Посмотреть профиль Найти все сообщения от AlexGermm
 
Регистрация: 26.09.2014
Сообщений: 2

Хм, а причем здесь типы? Все объекты в массиве ObjId - строковые. Можете объяснить, что именно вы имели в виду?
Ответить с цитированием
  #4 (permalink)  
Старый 09.05.2015, 18:15
Новичок на форуме
Отправить личное сообщение для Aldebrand Посмотреть профиль Найти все сообщения от Aldebrand
 
Регистрация: 09.05.2015
Сообщений: 2

Сам провозился, пока не понял, что offset работает с числами, а не строками. Поэтому, строковый элемент массива нужно перевести в число.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ajax при заходе на страницу из поисковика - не работает Алексей_ГР Ваши сайты и скрипты 2 03.09.2013 00:03
Скрипт правильно работает только один раз, после начинает выдавать ошибку. xodock Events/DOM/Window 2 23.07.2012 13:04
ява-скрипт выборочно работает-не работает zeta777 Internet Explorer 0 20.01.2010 11:41
iframe, как правильно обратиться? Geddar Opera, Safari и др. 22 28.05.2009 16:47
скрипт не работает на сервере, на домашней машине отличн работает... ffx Общие вопросы Javascript 10 15.05.2009 11:53