Какое большое недоразумение между событиями и делегатами !!! Делегат задает тип TYPE (например, class
или interface
), тогда как событие является просто своего рода членом (например, полями, свойствами и т. Д.). И, как и любой другой член, событие имеет тип. Тем не менее, в случае события тип события должен быть указан делегатом. Например, вы НЕ МОЖЕТ объявлять событие типа, определенного интерфейсом.
В заключение мы можем сделать следующее наблюдение: тип события ДОЛЖЕН быть определен делегатом. Это основное отношение между событием и делегатом и описано в разделе II.18 Определение событий разделов I-VI ECMA-335 (CLI): :
При типичном использовании TypeSpec (если присутствует) идентифицирует делегата, чья подпись соответствует аргументам, переданным методу пожара события.
blockquote>Однако этот факт НЕ означает, что событие использует резервную копию поле делегата. По правде говоря, событие может использовать поле поддержки любого другого типа структуры данных по вашему выбору. Если вы явно реализуете событие на C #, вы можете выбрать способ хранения обработчиков событий (обратите внимание, что обработчики событий являются экземплярами типа события, который, в свою очередь, является мандатным типом делегата --- из предыдущего наблюдения ). Но вы можете хранить эти обработчики событий (которые являются экземплярами делегатов) в структуре данных, такой как
List
илиDictionary
или любое другое другое, или даже в поле делегирования поддержки. Но не забывайте, что не обязательно использовать поле делегата.
Вот то, как я делаю это:
// Based on: http://www.quirksmode.org/js/findpos.html
var getCumulativeOffset = function (obj) {
var left, top;
left = top = 0;
if (obj.offsetParent) {
do {
left += obj.offsetLeft;
top += obj.offsetTop;
} while (obj = obj.offsetParent);
}
return {
x : left,
y : top
};
};
Это может быть хитро в зависимости от браузера и версии. Я предложил бы использовать jQuery и плагин положений.
Можно пользоваться библиотекой, такой как Прототип или jQuery, или можно использовать эта удобная функция :
Это возвращает массив.
myPos = findPos(document.getElementById('something'))
x = myPos[0]
y = myPos[1]
function findPos(obj) {
var curleft = curtop = 0;
if (obj.offsetParent) {
curleft = obj.offsetLeft
curtop = obj.offsetTop
while (obj = obj.offsetParent) {
curleft += obj.offsetLeft
curtop += obj.offsetTop
}
}
return [curleft,curtop];
}
Я не уверен, для чего Вы нуждаетесь в нем, и такие вещи всегда относительны (экран, окно, документ). Но когда я должен был понять это, я нашел этот сайт полезным: http://www.mattkruse.com/javascript/anchorposition/source.html
И я также нашел, что плагин подсказки, который кто-то сделал для jQuery, имел все виды интересного понимания к x, y располагающие приемы (посмотрите на его класс области просмотра и базовую поддержку, jQuery предусматривает его). http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/