Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
5 / 5 / 3
Регистрация: 28.03.2010
Сообщений: 146

События пользовательских объектов

27.03.2011, 22:39. Показов 1379. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Посоветуйте, пожалуйста, как задать пользовательскому объекту обработку событий?
Например, есть объект:
JavaScript
1
2
3
4
5
6
7
8
9
function Lina(x)
{
    this.x =x;
    this.Draw();
}
Lina.prototype.Draw = function()
{
<отрисовка объекта>
}
Как организовать в этом объекте обработку событий, например, "onclick" если на него нажали???
Буду рад любой помощи)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.03.2011, 22:39
Ответы с готовыми решениями:

Одинаковые события для разных объектов
Добрый день. у меня в каталоге товаров надо при наведении мышки, что бы менялась информация. Написал скрипт: &lt;div...

Копирование объектов пользовательских классов
Доброго времени суток) Есть вот такие структуры: Struct A { Shape *S; }; Struct B

Множество set из пользовательских объектов
Всем хай! Сразу к делу. Есть такая структура, описывающая точку на плоскости: struct Tpoint { int x; int y; Tpoint(int px,...

8
28.03.2011, 08:19

Не по теме:

Captain Obvious to the rescue!
Необходимо всякий раз, когда пользователь что-то кликает, определять координаты курсора, по ним определять объект, который был там отрисован, затем вызывать совытие этого объекта. Всякое упрощение может быть связано только с первыми двумя пунктами, потому что так всегда деляют, а значит и для JS, возможно, разработали систему, упрощающую контроль курсора.

0
 Аватар для Kdn
307 / 165 / 25
Регистрация: 07.02.2011
Сообщений: 319
28.03.2011, 12:18
SphiNkSs, Нарисованный объект Lina будет иметь какую то структуру (HTML разметку). Для начала нужно определится какой элемент будет реагировать на клик и в функции Draw инициализировать для этого элемента обработчик.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function Lina(x)
{
        this.x =x;
        this.Draw();
}
Lina.prototype.Draw = function()
{
 var id = "someId";
 var HtmlTemplate = '<div><span id="'+id+'"><span></div>';
 
 this.element = document.getElementById('someId');
 this.element.onclick = this.onElementClick();
}
 
Lina.prototype.onElementClick = function(e){
 
}
0
5 / 5 / 3
Регистрация: 28.03.2010
Сообщений: 146
29.03.2011, 06:48  [ТС]
а если этот объект является просто линией на <canvas>??? Как тогда будет выглядеть HtmlTemplate??

Добавлено через 15 часов 59 минут
вобще есть смысл это искать или гораздо перспективней написать обработчик для окна, чтобы по координатам определялся объект?
0
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
29.03.2011, 11:39
SphiNkSs, надо добавить обработчик самому canvas'у, примерно так:
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
(function() {
 
var canvas=document.getElementById("can"),
    ctx=can.getContext("2d")
    figures=[]
setInterval(function() {
    var current
    for (var i=0, L=figures.length; i<L; i++) {
        current=figures[i]
        if (current.type=="point") {ctx.drawRectangle(current.x, current.y, 1, 1)}
    }
}, 1)
canvas.onclick=function(e) {
    if (!e) {e=window.event}
    var x=e.pageX ? e.pageX-can.offsetLeft : e.clientX+document.documentElement.scrollLeft-can.offsetLeft,
        y=e.pageY ? e.pageY-can.offsetTop : e.clientY+document.documentElement.scrollTop-can.offsetTop,
        current
    for (var i=0, L=figures.length; i<L; i++) {
        current=figures[i]
        if (current.type=="point") {
            if (current.x==x && current.y==y) {current.onclick(e)}
        }
    }
}
 
})()
 
var point={
    x: 10,
    y: 45,
    type: "point",
    onclick: function(e) {alert("IS")}
}
figures.push(point)
HTML5
1
<canvas id="can" />
Не тестировал, надеюсь, заработает
1
5 / 5 / 3
Регистрация: 28.03.2010
Сообщений: 146
29.03.2011, 20:58  [ТС]
Я об этом думал, но как Вы думаете, насколько снизится производительность скрипта, если таких линий (ну или "figures", как у Вас в примере) будет штук 200-300?...
Просто у мну опыта в web-программировании мало, а опытным путем проверять не хочется)... Время поджимает...
0
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
29.03.2011, 21:03
SphiNkSs, другого способа просто нет.

Добавлено через 44 секунды
Если бы вы использовали svg, то вы бы через атрибут добавили обработчик, но в случае с canvas'ом такое не выйдет.
1
5 / 5 / 3
Регистрация: 28.03.2010
Сообщений: 146
29.03.2011, 22:01  [ТС]
а svg это идея! спасибо!
ЗЫ Ну и все таки не можешь на вскидку подсказать, насколько заметен будет процесс обработки события для пользователя на средней машине с достаточно большим количеством линий?
Мне опыта не хватает оценить)...
0
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
30.03.2011, 11:08
SphiNkSs, этого я не знаю, надо тестировать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.03.2011, 11:08
Помогаю со студенческими работами здесь

Хранение пользовательских объектов в list
Вот такое вот пишет: error C2679: бинарный &quot;==&quot;: не найден оператор, принимающий правый операнд типа &quot;const Person&quot; (или...

Запись пользовательских объектов в виде строки
Всем привет, как переписать содержимое полиморфных объектов в строку? Что-то вроде: Person mas = new Person; mas = new...

Передача объектов пользовательских классов через QVariant
Требуется передать объект пользовательского класса , не наследованного от QObject, через QVariant. Как это можно сделать, не могу...

Реализовать поиск в массиве пользовательских объектов по заданному полю (использовать std::vector)
помогите,пожалуйста,очень нужно!!!!!! Имеются сведения(модель-цена). Выделить заданное число самых дешевых моделей.(ЧЕРЕЗ ВЕКТОР)

В массиве пользовательских объектов типа toys найти игрушку, цена которой больше заданного значения
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; struct toys { char name; char color; char firm; ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru