Сопоставьте положение и размер двух элементов в двух разных фреймах на одной родительской странице.

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

С помощью следующего кода мне удалось сопоставить положение и размер div ("div_parent_page ') на родительской странице с положением элемента (' element_in_iframe-1" ) внутри iframe ('iframe-1') на той же родительской странице:

function myFunction() {
function getOffset( el ) {
var _x = 0;
var _y = 0;
while( el && !isNaN( el.offsetLeft ) && !isNaN( el.offsetTop ) ) {
    _x += el.offsetLeft - el.scrollLeft;
    _y += el.offsetTop - el.scrollTop;
    el = el.offsetParent;
}
return { top: _y, left: _x };
}
var positionInfo = ( document.getElementById('iframe-
1').contentWindow.document.getElementById('element_in_iframe-1') 
).getBoundingClientRect();
var yheight = positionInfo.height;
var xwidth = positionInfo.width;
var x = getOffset( document.getElementById('iframe-
1').contentWindow.document.getElementById('element_in_iframe-1') ).left;
var y = getOffset( document.getElementById('iframe-
 1').contentWindow.document.getElementById('element_in_iframe-1') ).top;
var d = document.getElementById('div_parent_page');
d.style.position = "absolute";
d.style.left = x+'px';
d.style.top = y+'px';
d.style.width = xwidth;
d.style.height = yheight; ` 
}

var timer =  setInterval(myFunction, 1000);

Теперь я помещаю еще один iframe ('iframe-2') в упомянутый выше div, и моя цель - сопоставить положение и размер элемента ('elementXXX' ) внутри iframe-2 внутри div с позицией и размером element_in_iframe-1. Я добавил код ниже:

var v = document.getElementById('iframe-
2').contentWindow.document.getElementsByClassName('elementXXX');
v.style.position = "absolute";
v.style.left = x+'px';
v.style.top = y+'px';
v.style.width = xwidth;
v.style.height = yheight;
}

Судя по всему, это не сработало, но я не уверен, как этого добиться. Надеюсь, вы, ребята, просветите меня, потому что я действительно бабушка в программировании. Спасибо ~


person Kelvin C    schedule 09.06.2017    source источник
comment
Но как изменить положение элемента в iframe на основе координат на родительской странице?   -  person Kelvin C    schedule 09.06.2017
comment
У каждого iframe src и родительского location.href одинаковое происхождение?   -  person guest271314    schedule 09.06.2017
comment
Да у них есть.   -  person Kelvin C    schedule 09.06.2017
comment
Web Workers и MessageChannel могут решить эту проблему?   -  person Kelvin C    schedule 09.06.2017
comment
Вы должны иметь возможность общаться между контекстами просмотра, используя MessageChannel или Worker   -  person guest271314    schedule 09.06.2017
comment
Проблема в том, что ваши переменные x и y равны нулю там, где вы ожидаете, что они будут иметь значения?   -  person entitycs    schedule 09.06.2017


Ответы (1)


  1. Если проблема в том, что у вас отключено позиционирование getOffset, см. Приведенную здесь функцию для другого примера сбора позиции объекта под одним или несколькими родителями:

Как я могу получить объект абсолютное положение на странице в Javascript?

  1. Если проблема в том, что ваши переменные var x и var y теперь пусты, поскольку они находятся в iframe, см. Этот jFiddle для примера позиционирования одного элемента абсолютно в frame2 с учетом значений, взятых из frame1.

https://jsfiddle.net/5aLp24dd/2/

    var imframe1 = document.getElementById('iframe-1');
    var innerDoc1 = imframe1.contentDocument ||
                    imframe1.contentWindow.document;
    var x = innerDoc1.getElementById ( "carbonads" ).offsetLeft;
    var y = innerDoc1.getElementById ( "carbonads" ).offsetTop;
    alert('x offset: ' + x);
    alert('y offset: ' + y);

    var imframe2 = document.getElementById('iframe-2');
    var innerDoc2 = imframe2.contentDocument ||
                    imframe2.contentWindow.document;
    innerDoc2.getElementById ( "carbonads" ).style.position = "absolute";
    innerDoc2.getElementById ( "carbonads" ).style.left = (x - 30) + 'px';
    innerDoc2.getElementById ( "carbonads" ).style.top = (y - 30) + 'px';
person entitycs    schedule 09.06.2017
comment
Ваш ответ наверняка будет полезен. Большое спасибо! Я выложу обновление позже! - person Kelvin C; 11.06.2017