Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 25.11.2014, 22:49
Новичок на форуме
Отправить личное сообщение для learner Посмотреть профиль Найти все сообщения от learner
 
Регистрация: 15.11.2014
Сообщений: 9

Хотите верьте, хотите нет. Написал как Вы предложили:
myFnc = function(){
    var div  = document.getElementById("nav");
        if (window.innerWidth <= 320) {
            div.style.width = window.innerHeight + "px";
        }             
}   //здесь нужна точка с запятой?
window.onload = myFnc();
window.onresize = myFnc();

Всё работало, и при подключении скрипта в head и из внешнего файла, при чём так:
window.onload = window.onresize = myFnc(); тоже работало.
Потом решил попробовать перестроить дизайн и изменил ширину экрана для начала трансформации nav с <= 320 на <= 600 и уже никак не работает, не из head, не из внешнего файла. Вернул на <= 320, хотя это уже шаманство, не заработало. В итоге работает только так:
window.onload = function(){
    var div  = document.getElementById("nav");
        if (window.innerWidth <= 320) {
            div.style.width = window.innerHeight + "px";
        }             
}

window.onresize = function(){
    var div  = document.getElementById("nav");
        if (window.innerWidth <= 320) {
            div.style.width = window.innerHeight + "px";
        }             
}

Как же с этим быть, если в скриптах повторятся? Редактор и меня phpDesigner8 в связке с Denver3.
Что же касается способа удаления стилей навешанных через js:
if (window.innerWidth > 320) {
    div.style.width = window.innerHeight + "px";
}
else {
    div.removeAttribute('style');
}

то при увеличении ширины окна nav это срабатывает, но если отыграть назад, то nav уже не растягивается на всю высоту окна, причём то же и при ресайзе окна по высоте. Перезагрузка страницы не помогает, выходит, что вариант с удалением атрибута 'style' вообще блокирует работу скрипта. Перепробовал все варианты:
div.removeAttribute('style');
div.removeAttribute('style.width');
div.removeAttribute('width');
div.removeAttribute('window.innerHeight);

Последний раз редактировалось learner, 25.11.2014 в 22:51.
Ответить с цитированием
  #12 (permalink)  
Старый 26.11.2014, 08:00
Профессор
Отправить личное сообщение для krasovsky Посмотреть профиль Найти все сообщения от krasovsky
 
Регистрация: 21.12.2012
Сообщений: 869

Сообщение от learner
Вернул на <= 320, хотя это уже шаманство, не заработало.
Незнаю что тебе тут еще сказать.....смотри что ты НЕПРАВИЛЬНО сделал, разбирайся. Открой консоль и работай с ней.

Ты кстати смотришь что вообще пишешь?
if (window.innerWidth > 320) {//если ширина окна БОЛЬШЕ 320
div.style.width = window.innerHeight + "px";//задать ширину дива ширине экрана

И это при том что у тебя выше код
window.onresize = function(){
var div = document.getElementById("nav");
if (window.innerWidth <= 320) {если ширина окна МЕНЬШЕ 320
div.style.width = window.innerHeight + "px";//задать ширину дива ширине экрана
}
}

??

Сообщение от learner
что вариант с удалением атрибута 'style' вообще блокирует работу скрипта
Не выходит

Сообщение от learner
div.removeAttribute('style.width');
div.removeAttribute('width');
div.removeAttribute('window.innerHeight);
??
Ответить с цитированием
  #13 (permalink)  
Старый 27.11.2014, 02:45
Новичок на форуме
Отправить личное сообщение для learner Посмотреть профиль Найти все сообщения от learner
 
Регистрация: 15.11.2014
Сообщений: 9

Сообщение от krasovsky
Не знаю что тебе тут еще сказать.....смотри что ты НЕПРАВИЛЬНО сделал, разбирайся.
Ну, не знаю, я уже думал, что может мой редактор после многократного редактирования скрипта оставил какие-то вспомогательные символы, из-за которых скрипт читается с ошибками. Короче, взял новый документ и написал всё заново, но вариант с оборачиванием в функцию, не работает ни в одном браузере, а вот так:
window.onload = function(){
    var div = document.getElementById("nav");
    if (window.innerWidth <= 320){
        div.style.width = window.innerHeight + "px";
    }
}
window.onresize = window.onload;

работает с одним лишь только но. В Opera(12.17) при старом условии <= 320, тоже всё ок, но если его изменить на любое другое, то скрипт работает только при подключении в head. Причём, если сузить окно до прежнего <= 320, то работает, перезагрузишь страницу, снова отказ, вот такая вот ерунда, но это не критично.
Вы можете мне подсказать как написать такую строку на js?
var div = document.getElementById("nav");
	if (window.innerWidth > 320) {
	    div.style.width = снова равна 100% ширине #wrap;
	}

Это уже последняя просьба и, в любом случае, ещё раз спасибо за Ваши ответы, они мне очень помогли.
Ответить с цитированием
  #14 (permalink)  
Старый 28.11.2014, 08:05
Профессор
Отправить личное сообщение для krasovsky Посмотреть профиль Найти все сообщения от krasovsky
 
Регистрация: 21.12.2012
Сообщений: 869

Я лично уже запутался. Опиши какая конкретно задача у тебя стоит?
Если только менять ширину блока под разные разрешения экрана - так с эти замечательно справиться css media queries. И не нужно никакого js вообще.
@media (max-width:320px) {
   #nav {
      width:320px;
      //или
      width:100%;
   }
}

При этом ширина предка #nav должна естественно равняться ширине экрана.
Ответить с цитированием
  #15 (permalink)  
Старый 29.11.2014, 03:30
Новичок на форуме
Отправить личное сообщение для learner Посмотреть профиль Найти все сообщения от learner
 
Регистрация: 15.11.2014
Сообщений: 9

Сообщение от krasovsky
Я лично уже запутался.
Смотрите, есть nav, который располагается обычно, то есть горизонтально, его ширина 100% ширины #wrap и, разумеется, для адаптивного дизайна я использую медиа-запросы. При ширине экрана 320px я его переворачиваю на 90 градусов и при помощи fixed прижимаю к верхнему левому углу экрана и он становится узкой полосой параллельно скроллингу, просто такое дизайнерское решение.
Задача была, и которая благодаря Вам уже решена, чтобы nav, при ширине окна 320рх и меньше, в качестве своей ширины принимал высоту окна, тогда он будет резиновым на любом устройстве, с любой высотой viewport.
Вот код устанавливающий nav в положение параллельно скроллингу:
@media (max-width: 320px) {
#nav { 
                height: 20px;
                position: fixed;
                top: 0;
                left: 0;
                transform-origin: 0 0;
                transform: translateX(20px) rotate(90deg);
            }
}

Вот скрипт, отредактированный Вами, который делает его резиновым в этом перевёрнутом положении:
window.onload = function(){
	    var div = document.getElementById("nav");
	    if (window.innerWidth <= 320){
	        div.style.width = window.innerHeight + "px";	    }
	}
window.onresize = window.onload;

window.onresize = window.onload; Эта строка, делает nav резиновым при ресайзе окна по высоте (только по высоте, ширина 320рх!) без перезагрузки страницы. Осталось только сделать так, чтобы при ресайзе окна по ширине с 321рх и больше, nav, за свою ширину снова принял своё старое значение ширины, а именно, 100% ширины #wrap.
Я ведь, только при ширине 320рх и меньше его переворачиваю, а при 321рх и больше действуют старые правила, где он горизонтальный и значение высоты окна мне уже не нужно.
Как я понимаю, это условие должно выглядеть так:
if (window.innerWidth > 320) {
	        div.style.width = снова равна 100% ширине #wrap; 
	    }

А я, как Вы знаете, мало что пока понимаю в этом вопросе.
снова равна 100% ширине #wrap, как вот такую строку, или строку с более грамотно сформулированной задачей, прописать на JS?

Последний раз редактировалось learner, 29.11.2014 в 04:09.
Ответить с цитированием
  #16 (permalink)  
Старый 01.12.2014, 14:43
Профессор
Отправить личное сообщение для krasovsky Посмотреть профиль Найти все сообщения от krasovsky
 
Регистрация: 21.12.2012
Сообщений: 869

Можно попробовать что то типо этого
if (window.innerWidth <= 320){
     div.style.width = window.innerHeight + "px";        
}
else {
    div.style.width = '100%'; //если ширина не <= 320 установить ее в 100% или подставь свое значение
}
Ответить с цитированием
  #17 (permalink)  
Старый 02.12.2014, 01:02
Новичок на форуме
Отправить личное сообщение для learner Посмотреть профиль Найти все сообщения от learner
 
Регистрация: 15.11.2014
Сообщений: 9

Работает! Да-а, как всё просто в руках мастера , ещё раз огромное Вам спасибо.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ширина блока в пикселях zebulun Events/DOM/Window 1 06.03.2013 00:34
Ширина блока Prazdnic jQuery 2 15.09.2012 16:02
Масштабирование блока, в зависимости от разрешения экрана Keksman jQuery 2 25.05.2012 03:49
Помогите с калькулятором piton1175 AJAX и COMET 0 16.06.2011 14:29
Изменение размера блока реклама в зависимости от разрешения экрана. toxiz77 Общие вопросы Javascript 3 11.02.2009 14:12