22.03.2012, 12:30
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Размеры фреймов и JavaScript
Знатоки подскажите, как решить казалось бы простую задачу.
Имеется три обычных (не плавающих) фрейма, один вверху, два внизу.
Как нажатием кнопки в верхнем фрейме изменить соотношение размеров двух нижних фреймов?
При этом важно, чтобы код работал во всех современных браузерах.
Пробовал вариант обращения к элементу frameset основного создающего фреймы документа: например, если у задающего нижние фреймы элемента frameset свойство name = N, то изменить размеры нижних фреймов удаётся установкой свойства cols этого framesetа, то есть конструкцией, например, вида parent.N.cols = '23%,*'.
Удаётся, но только в Internet Explorer, в других браузерах (Google Chrome, Mozilla Firefox и им подобных) этот код не срабатывает.
Мастера, помогите создать кроссбраузерный код.
Последний раз редактировалось bes, 22.03.2012 в 12:39.
Причина: опечатка
|
|
22.03.2012, 12:56
|
х.з
|
|
Регистрация: 21.11.2010
Сообщений: 4,588
|
|
|
|
23.03.2012, 10:22
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Спасибо, dmitriymar, за ссылку на неплохую статью, в которой описано как разрешаются ссылки при работе фреймами.
Но ответа на то, как изменять размеры фреймов, к каким свойствами и каких элементов необходимо при этом обращаться, я в этой статье так и не нашёл (если я не заметил того, что должен был заметить, просьба ткнуть носом)).
Давно пытаюсь решить эту задачу, во всех хороших найденных мною статьях описывается лишь то как обращаться к фреймам и их содержимому, но ничего не говорится о том как управлять размерами самих фреймов.
А очевидное, приведённое мною, решение с использованием свойства cols, почему-то работает только в IE, может быть есть какие-нибудь управляющие размерами свойства, наподобие, width и height, но описание подобных свойств я также не встречал.
|
|
23.03.2012, 23:16
|
Новичок на форуме
|
|
Регистрация: 23.03.2012
Сообщений: 7
|
|
пропиши style (
<iframe id="my_frame" ... style="width:500px;height:500px;">
), потом получай свой элемент и меняй ему так как тебе нужно.
$('#my_frame').css('width','100px')
- установил ширину 1000px
|
|
24.03.2012, 11:44
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Спасибо за ответ, ychetka, но данное решение логично для плавающих фреймов (вначале я указал, что речь не про них), возможно я просто не понимаю как применить этот способ к обычным фреймам, если знаешь, подскажи.
Что касается того, что я использую структуру именно из обычных, а не плавающих фреймов, связано с тем, что у них возникают проблемы при масштабировании страницы, а именно в определённый момент масштабирования двух рядом расположенных и растянутых во высоте и в совокупности по ширине на весь экран элементов <iframe> происходит соскакивание правого фрейма вниз под фрейм, который был для него левым.
|
|
24.03.2012, 12:14
|
Новичок на форуме
|
|
Регистрация: 23.03.2012
Сообщений: 7
|
|
ну во первых в твоем случае неважно к какому, плавающий, или не плавающий, фрейму ты применишь style="width:500px;height:500px;". Есть элемент, ты его получаешь и устанавливаешь его размер. А насчет того что у тебя ломается разметка страницы, при использовании iframe, это вообще не проблема, ты где-то ошибся в плане верстки, попробуй позиционировать iframы, style="position absolute,relative,fixed)"
|
|
24.03.2012, 16:56
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Поясни, пожалуйста, ychetka, каким образом применить атрибут style к обычным фреймам, обычным фреймы задаются в установочном файле и обрамлены тегами frameset, перебить свойство cols этих тегов заданием свойств width и height для атрибута style в теге frame лично у меня никак не получается.
|
|
24.03.2012, 17:33
|
х.з
|
|
Регистрация: 21.11.2010
Сообщений: 4,588
|
|
попробуйте через getTagName("N")[0].cols
|
|
25.03.2012, 03:11
|
Новичок на форуме
|
|
Регистрация: 23.03.2012
Сообщений: 7
|
|
Почему вы так упорно не хотите использовать iframe ? там операции со сменой размеров в рамках одного домена делаются именно style="width:500px;height:500px;position:"
Насчет frameset попробуйте задать так (у меня уверенности что это будет работать везде)
<frameset rows="*" cols="*">
<frame tyle="width:500px;height:500px;" src="" id="" name="">
|
|
25.03.2012, 10:38
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Так как добиться результата предложенными вами способами, dmitriymar и ychetka, у меня никак не получается, попробую конкретизировать свой вопрос.
Имеется два файла index.htm и button.htm: первый является установочным для фреймов, второй содержит кнопку, по нажатию которой будет происходить изменение соотношения размеров этих фреймов.
Привожу значимое содержимое этих файлов.
index.htm:
<frameset name="M" id="M" rows="10%,*" >
<frame name="f1" id="f1" src="button.htm" scrolling="no" noresize>
<frameset name="N" id="N" cols="50%,*" >
<frame name="f2" id="f2" src="button.htm" scrolling="auto">
<frame name="f3" id="f3" src="button.htm" scrolling="auto">
</frameset>
</frameset>
button.htm:
<button onclick="parent.N.cols='10%,*'">Button</button>
Данный код, как я уже и отмечал, работает только в IE.
Внесите в код этих двух файлов необходимые предложенные вами изменения, чтобы получился работоспособный кроссбраузерный код.
|
|
|
|