Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.08.2012, 14:47
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Рациональное использование функции
Функция создает новые элементы, каждый раз прибавляя к значению top 70px.

В результате чего абсолютно позиционированные элементы идут друг за другом

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="UTF-8">
    <title>выпвып</title>
</head>

<body>
<button id="button">создать новый элемент</button>
<script>
    var gfunc = 20;

    function newPosition() {
        gfunc += 70;
        return gfunc + "px";
    }

    function create() {

        var  div = document.createElement("div");
        div.style.position = "absolute";
        div.style.top = newPosition();
        div.style.left = "20px";
        div.style.width = "200px";
        div.style.height = "50px";
        div.style.border = "1px solid #000";
        document.body.appendChild(div);
    }
    document.getElementById("button").addEventListener("click", create);
</script>
</body>
</html>



Вопрос:
как сделать функцию newPosition() внутри функции create(), чтобы код приобрел более аккуратный вид?
Ответить с цитированием
  #2 (permalink)  
Старый 26.08.2012, 14:50
Профессор
Отправить личное сообщение для PashPP Посмотреть профиль Найти все сообщения от PashPP
 
Регистрация: 26.07.2012
Сообщений: 281

как вариант добавить
div.className = 'myDiv'

и стиль
div.style.left = "20px";
div.style.width = "200px";
div.style.height = "50px";
div.style.border = "1px solid #000";

Вынести в цсс.

ну и.

function create() {
gfunc += 70;
var div = document.createElement("div");
div.className = 'myDiv'
div.style.top = gfunc + 'px';
document.body.appendChild(div);
}

Зачем для одного счетчика целую функцию объявлять?

Последний раз редактировалось PashPP, 26.08.2012 в 14:56.
Ответить с цитированием
  #3 (permalink)  
Старый 26.08.2012, 15:31
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Maxmaxmахimus,

имел в виду в том числе глобальную переменную

PashPP,

у меня ваш вариант не работает, если не трудно выложите в run - виде, можно без css и классов
Ответить с цитированием
  #4 (permalink)  
Старый 26.08.2012, 15:44
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Maxmaxmахimus,

все равно, слишком сложное написание, для функции, которая выполняет простейшее действие (
ладно, будем думать сами, как надумаем, выложим
Ответить с цитированием
  #5 (permalink)  
Старый 26.08.2012, 16:05
Профессор
Отправить личное сообщение для PashPP Посмотреть профиль Найти все сообщения от PashPP
 
Регистрация: 26.07.2012
Сообщений: 281

dmitry111,
Все там работает. Наверно, ты не перенес обьявление var gfunc просто со своего варианта.
PS. А как тут вылаживать в run - виде?

<!DOCTYPE html>
<style>
.myDiv {
   position: absolute;
   left: 20px;
   width: 200px;
   height: 500px;
   border: 1px solid #000;
}
</style>
<body>
</body>
<script type="text/javascript">
var gfunc = 20;
function create() {
 gfunc += 70;
 var div = document.createElement("div");
 div.className = 'myDiv'
 div.style.top = gfunc + 'px';
 document.body.appendChild(div);
}
create()
create()
create()
</script>
Ответить с цитированием
  #6 (permalink)  
Старый 26.08.2012, 16:11
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

PashPP,

работает, только вот, как и у Maxmaxmахimus, имеется глобальная переменная, использовать которую для простейшей функции нецелесообразно
Ответить с цитированием
  #7 (permalink)  
Старый 26.08.2012, 16:22
Аватар для lord2kim
Профессор
Отправить личное сообщение для lord2kim Посмотреть профиль Найти все сообщения от lord2kim
 
Регистрация: 03.05.2011
Сообщений: 848

dmitry111,
div.style.top = parseInt(document.getElementsByTagName("div")[document.getElementsByTagName("div").length - 1].style.top) + 70 + "px";
Ответить с цитированием
  #8 (permalink)  
Старый 26.08.2012, 16:28
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Что ж не работает-то
<button id="button">создать новый элемент</button>
<script>
window.onload = function () {
    var gfunc = 20;//уже не глобальная

    function create() {
		gfunc += 70;
        var  div = document.createElement("div");
        div.style.position = "absolute";
        div.style.top =  gfunc + 'px';
        div.style.left = "20px";
        div.style.width = "200px";
        div.style.height = "50px";
        div.style.border = "1px solid #000";
        document.body.appendChild(div);
    }
    document.getElementById("button").addEventListener("click", create);
}
</script>
Ответить с цитированием
  #9 (permalink)  
Старый 26.08.2012, 16:41
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

PashPP, [html run]
Ответить с цитированием
  #10 (permalink)  
Старый 26.08.2012, 16:49
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

lord2kim,

гениально! Этот подход мне нравится!

Вот он в работе:

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="UTF-8">
    <title>выпвып</title>
</head>

<body>
<button id="button">создать новый элемент</button>
<script>

    function create() {
        function size() {
            var sss = document.getElementsByTagName("div")[0];
            if (sss) {
            var rrr = parseInt(document.getElementsByTagName("div")[document.getElementsByTagName("div").length - 1].style.top) + 70 + "px";
            return rrr;
            }
            else {
                return "50px";
            }
        }

        var  div = document.createElement("div");
        div.style.position = "absolute";
        //div.style.top = newPosition();
        div.style.left = "20px";
        div.style.top =  size();
        div.style.width = "200px";
        div.style.height = "50px";
        div.style.border = "1px solid #000";
        document.body.appendChild(div);
    }
    document.getElementById("button").addEventListener("click", create);
</script>
</body>
</html>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование $(this) внутри функции Dorian_bs Общие вопросы Javascript 6 21.11.2011 11:10
Использование значений в функции klubnichkaaa Общие вопросы Javascript 1 13.10.2011 14:11
Использование магической функции __autoload() romantik2011 Серверные языки и технологии 7 30.07.2011 13:56
использование функции larpug Общие вопросы Javascript 2 30.03.2010 22:30
Использование одной функции для элементов с разными ID Ferroks Общие вопросы Javascript 10 11.09.2009 08:51