Решил заморочиться и сделать выдвигающееся меню . выдвигаться оно будет сверху. HTML Код (Text): <div id="menu" style="position:absolute; background-color:blue; height:100px;width:100%;top:-100px;"></div> <div id="button" style="background-color:black;width:40px;height:40px;position:absolute;"></div> JS Код (Text): window.onload=function () { var button=document.getElementById('button'), menu=document.getElementById('menu'); button.onclick= function () { menu.style.top='0'; } } 1) Так как js изучаю совсем недолго не могу понять как сделать чтобы при втором щелчке оно обратно задвигалось. 2) Как реализовать плавное выдвижение (css3 не хочу использовать). 3) Почему Код (Text): document.getElementsByTagName('body').style.top='200'; является неправильным??? Cannot set property 'top' Просьба сам код не выкладывать а натолкнуть на мысль ...
Одним словом - "флаг". Чуть расшифровав: сначала "флаг" = false, после открытия - "флаг" = true, закрыли - опять false и т.д. Для плавности: setInterval или setTimeout - каждый интервал времени какое-то одно маленькое действие P.S. Заметил, что вы добавили еще третий пункт. Ответ - нет, не правильно. И не правильно по двум причинам: 1. Не правильный синтаксис. Корректней так: Код (Text): document.getElementsByTagName('body')[0].style.top='200px'; При этом, у body должно быть свойство position: absolute; или position: fixed; 2. Не правильно с точки зрения самого подхода. BODY - это как основной холст и манипулировать им не есть гуд , лучше создать внутреннюю обёртку для всех элементов и извращаться над ней.
Код (Text): window.onload=function () { var button=document.getElementById('button'), menu=document.getElementById('menu'); button.onclick= function () { if button.hasClass('closed'){ menu.style.top='0'; this.removeClass('closed').addClass('open'); } else if button.hasClass('open'){ menu.style.top='-100'; } } } Я правильно понял?? или несовсем?? Этой функцией я хочу сказать следующее: Если кнопка с id 'button' имеет класс 'closed' тогда menu top='0' удаляем класс 'closed' добавляем 'open', если кнопка имеет класс 'open' menu top='100' ;
Что-то вы тут намешали... hasClass, addClass и removeClass - это методы jQuery. Когда вы работаете с этой библиотекой, то методы применяются не к DOM-элементу, а к объекту jQuery. Например, если на чистом JS мы используем this, то в jQuery - $(this). Поэтому, для начала определитесь - вы изучаете нативный JavaScript или его библиотеку. К тому же window.onload - это плохой подход, но пока, пару дней , можете на этом не заострять внимание. И дополнил ответ в предыдущем своём ответе.
да это я подглядел в код который на JQery, я так понимаю hasClass , addClass removeClass должны быть на чистом js
Неправильный подход в том, что вы нахватались кода на каком-то ресурсе и, не понимая его смысла, пытаетесь "лепить из *овна пулю". Если начали изучение, то или читайте обучающую литературу, или пользуйтесь правильными ресурсами. Для начала изучите (хотя бы) основы JavaScript (вот очень хороший ресурс), а потом уже можете освоить и jQuery. Не рвите сцепление, а двигайтесь постепенно.
На данный момент пытаюсь изучить чистый js в Jquery лезть не хочу (покачто), addClass, removeClass, использовал потомучто не знал что они с кода написанного на Jquery. В общем я понял что мне нужно Условие если true то выполняется top='0', если false = '-100' , только вот какое условие написать я не пойму((((
А вы за своё. Ладно, я вам покажу простейший пример, как желательно писать сценарий, когда нам нужно всего-навсего менять цвет бэкграунда у элемента по клику. Вот ссылочка. А потом, сами себе задайте вопрос: "Смогу ли я написать эту грёбаную менюху, если даже элементарных основ не знаю?"
К сожалению не могу понять этот вот код ... что это за условие зачем оно? Код (Text): // функция кроссбраузерной установки обработчиков событий function addEvent(elem, type, handler){ if(elem.addEventListener){ elem.addEventListener(type, handler, false); } else { elem.attachEvent('on'+type, handler); } return false; } менюшку реализовал через такое условие Код (Text): if (menu.style.top == '0px') { menu.style.top = '-100px'; } else { menu.style.top = '0px'; }
Осёл восьмой версии не понимает addEventListener ... да и не только это. Но мириться с этим пока еще приходится, т.к. по умолчанию с Windows 7 , устанавливается и IE8. И не все могут, по тем или иным причинам, установить нормальный браузер.
Подскажите пожалуйста как реализовать плавное выдвижение через SetInterval или setTimeout, я пробовал вставить один из методов в функцию отвечающее за появление блока , только вот установив setTimeout я всеголишь указываю что функция выполняется (например) через 3с, и блок появляется через 3с (лочично))))). но как плавно реализовать не доходит((( Код (Text): button.onclick= function top() { menu.style.top=(flag ? '-100px' : '-90px'); flag=!flag; //return false; setInterval (top,3000); }
Вот простой примерчик. Существуют полярные мнения по поводу того, что лучше использовать для анимации: setInterval или setTimeout, но решите для себя сами. Я же показал вам выше просто схему того, как это можно реализовать.
Deonis я тут обверрнул это всё дело в функцию 'go()' и подключил событие onclick к диву, только вот теперь хочу чтобы по второму клику менюшка обратно заезжала. решил делать через flag, только вот с выражением (pos++)+'px' у меня проблемы(((( http://jsfiddle.net/62U2F/3/
Сегодня нет много времени, посему коротко: задумывайтесь над тем, какие переменные должны быть глобальны и инициализироваться один раз и второе - onclick, да и вообще смешивание js и html это плохо. Уже рекорд побил по тому, сколько раз за пару дней это сказал. http://jsfiddle.net/Deonis/62U2F/4/
Deonis, http://www.lol.domstroi69.ru нажмите на черный квадрат, выйдет менюшка, но проблема в том что она тормозит (хром и опера) в ИЕ всё норм, убрал css свойство background-size:cover; в хроме норм стало, есть идеи??? можно ли bg-size:cover заменить скриптом?? так как ие 8ой его не понимает(( , или может быть мой js на выезжающий блок слегка кривой? JS Код (Text): var flag = true, pos = -150, position = 0, pozner = 0; function go() { var el = document.getElementById('myblock'), knopka = document.getElementById('button'), block = document.getElementById('bg'), timer = setInterval(function () { el.style.top = (flag ? pos++ : pos--) + 'px'; knopka.style.top = (flag ? position++ : position--) + 'px'; block.style.top = (flag ? pozner++ : pozner--) + 'px'; if (pos >= 0 || pos < -150) { clearInterval(timer); flag = !flag; } }, 5); } //document.getElementById('button').addEventListener('click', go, false); 2)кстати браузер выдает ошибку на .addEventListener. (( пришлось в html на кнопку ставить... 3) для ускорения менюшки ставил значение setInterval на '1' но чтото не очень быстро както (во всех браузерах по разному), а вот когда в скрипт дублируешь строки Код (Text): knopka.style.top = (flag ? position++ : position--) + 'px'; block.style.top = (flag ? pozner++ : pozner--) + 'px'; то помогает... Есть варианты как исправить торможение это??