Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
16 / 16 / 10
Регистрация: 21.09.2014
Сообщений: 180

Как сделать функцию "красивее"?

21.09.2014, 20:47. Показов 1194. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
необходимо запомнить первое вхождение в функцию, вот мой вариант(упрошенный):
JavaScript
1
2
3
4
5
6
7
8
9
10
11
function delay(id_image)
{
                width_default[i] = document.getElementById(id_image).offsetWidth;
        if (i > 0)
        {
            this.width_default.pop();
            i = 0;
        }
        i++;
                setTimeout('delay(id_image)', 500);
}
в моем случае при первой же итерации в массив width_default[i] записывается первоначальное значение ширины елемента по id, при последующих итерациях идет запись в последний элемент массива и сразу же его удаление
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.09.2014, 20:47
Ответы с готовыми решениями:

Как сделать красивее?
Постараюсь объяснить кратко. Вот часть кода: print("Введите действие которое хотите совершить:", "1. Создать новую...

Как сделать код красивее?
///Graph's class Graph = class public ///Set of all edges Edges: set of GEdge; private pS, pS2: Style;...

Как сделать кнопки красивее?
Есть элемент ToolBar, на нем у меня находится несколько кнопок, посоветуйте как сделать их не просто кнопками, а кнопками с картинкой ?...

8
10 / 10 / 0
Регистрация: 12.04.2012
Сообщений: 333
21.09.2014, 21:22
dennis_k,

Можно вот так вроде написать:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
function delay(id_image)
{
setTimeout(
                width_default[i] = document.getElementById(id_image).offsetWidth;
        if (i > 0)
        {
            this.width_default.pop();
            i = 0;
        }
        i++;
                , 500);
}
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
21.09.2014, 21:26
Савва, нет. Передавать необходимо функцию, а не блок кода. То есть так:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
function delay(id_image){
   setTimeout(
      function () {
         width_default[i] = document.getElementById(id_image).offsetWidth;
         if (i > 0){
            this.width_default.pop();
            i = 0;
        }
        i++;
      },
      500
   );
}
0
qm
25 / 24 / 7
Регистрация: 15.08.2014
Сообщений: 60
21.09.2014, 21:26
Что значит сделать красивее?
Объясните подробнее, что должна делать ваша функция, мне совсем непонятно зачем записывать что-то в массив и тут же это удалять.
По сути после первого вызова delay(); последующие ничего полезного в себе не несут.
0
16 / 16 / 10
Регистрация: 21.09.2014
Сообщений: 180
21.09.2014, 21:49  [ТС]
да, в том то и причина, мне нужно запомнить первое вхождение переменной в функции, что бы потом ею оперировать, переменная динамически меняется, по этому я запомнил ее в первый элемент массива, что бы она не затерлась в последующих итерациях.
как можно обойтись без массива?
0
qm
25 / 24 / 7
Регистрация: 15.08.2014
Сообщений: 60
21.09.2014, 22:15
dennis_k, а вызвать функцию единожды не вариант? Зачем ее вызывать повторно через таймер?
Если же это необходимо и нужно запомнить только одно значение (при первом вызове), то можно обойтись и без массивов конечно.
JavaScript
1
2
3
4
5
6
7
var width_default = null;
function delay(id_image) {
  if (!width_default) {
    width_default = document.getElementById(id_image).offsetWidth;
  }
  setTimeout('delay(id_image)', 500);
}
0
16 / 16 / 10
Регистрация: 21.09.2014
Сообщений: 180
21.09.2014, 22:56  [ТС]
ладно, не хотел закидывать громоздкий код, но видно придется
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
function Class()
{
this.increment_image_big_to_small = 0;
    this.index_array = 0;
    this.width_default = new Array();
    
    this.image_big_to_small = function (id_image, number_decrement, delay_ms){
        var self = this;
        this.id_image = id_image;
        this.number_decrement = number_decrement;
        this.delay_ms = delay_ms;
 
        // вот здесь собсна и происходит чудо запоминания первого вхождения
        this.width_default[this.index_array] = document.getElementById(id_image).offsetWidth;
        if (this.index_array > 0)
        {
            this.width_default.pop();
            this.index_array = 0;
        }
        this.index_array++;
                //******************************************************
 
        var left_position = document.getElementById(id_image).offsetLeft;
        var top_position = document.getElementById(id_image).offsetTop;
        var width_position = document.getElementById(id_image).offsetWidth;
        var height_position = document.getElementById(id_image).offsetHeight; 
        this.id_clean = setTimeout(function(){self.image_big_to_small(self.id_image, self.number_decrement, self.delay_ms)}, this.delay_ms);
        
        if (width_position >=  this.width_default[0] - this.number_decrement && this.increment_image_big_to_small < 1){                                                     //decrement
            document.getElementById(id_image).style.width = width_position - 5+'px';
            document.getElementById(id_image).style.left = left_position + 1+'px';
            document.getElementById(id_image).style.height = height_position - 5+'px';
            document.getElementById(id_image).style.top = top_position + 1+'px';
        }
        else if (width_position < this.width_default[0]){                               //increment
            document.getElementById(id_image).style.width = width_position + 1+'px';
            document.getElementById(id_image).style.left = left_position - 1+'px';
            document.getElementById(id_image).style.height = height_position + 1+'px';
            document.getElementById(id_image).style.top = top_position - 1+'px';
            this.increment_image_big_to_small = 1;
        }
        else if (width_position >= this.width_default[0]){
            this.increment_image_big_to_small = 0; 
            clearTimeout(this.id_clean);    
        }
    }   
}
Добавлено через 9 минут
задача состоит в том, что бы написать метод, который сжимает и разжимает картинку.
в теле первого if, происходит сжатие. в теле else if, происходит разжимание до первоначального придела. так вот для того что бы задать условие первоначальной ширины, мне и понадобилась переменная которая запомнит первое вхождение.
0
qm
25 / 24 / 7
Регистрация: 15.08.2014
Сообщений: 60
21.09.2014, 23:10
Лучший ответ Сообщение было отмечено dennis_k как решение

Решение

Ну и что вам мешает сделать как я предложил выше?
JavaScript
1
this.width_default = new Array();
Поменять на (можно оставить undefined):
JavaScript
1
this.width_default = null;
Кусок кода с запоминанием:
JavaScript
1
2
3
4
5
6
7
8
// вот здесь собсна и происходит чудо запоминания первого вхождения
this.width_default[this.index_array] = document.getElementById(id_image).offsetWidth;
if (this.index_array > 0) {
  this.width_default.pop();
  this.index_array = 0;
}
this.index_array++;
//******************************************************
теперь выглядит так:
JavaScript
1
2
3
4
if (this.width_default === null) { 
  //если this.width_default не инициализирован -- инициализируем
  this.width_default = document.getElementById(id_image).offsetWidth;
}
Теперь this.width_default не массив, осталось заменить this.width_default[0] на this.width_default.
1
16 / 16 / 10
Регистрация: 21.09.2014
Сообщений: 180
21.09.2014, 23:41  [ТС]
гениально!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.09.2014, 23:41
Помогаю со студенческими работами здесь

Как сделать код красивее?
Здравствуйте, в js код красивый и понятный Поля tasks и project большие и там много данных, я их опустил здесь let unDoneTasks; ...

Как сделать программу красивее?
Вот написал программу на Java, и хочу штоб внешне она выглядела немного получше, вот только не знаю как можно пристроить в программу што то...

Как это можно сделать красивее?
uint8_t sommomd = 0x55; uint16_t u16Temp = 0; u16Temp = GPIO_ReadOutputData(GPIOA)&amp;0xFF00; u16Temp |= sommomd; GPIO_Write(GPIOA,...

Как сделать красивый советский автомобиль ещё красивее
Как сделать красивый советский автомобиль ещё красивее. Москвич АЗЛК-2140 SL после компьютерного улучшайзинга

Как можно сделать рамку вокруг таблицы красивее и объемнее
Есть таблица .tg {border-collapse:collapse;border-spacing:0; width:100%; cellpadding:15 px; cellspacing:3; border-radius:15px;} .tg...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru