2012-02-13 2 views
1

Я смотрел видео-учебник по версии автора CODE # 2, но вместо этого я немного изменил его на CODE # 1 Так в чем разница между обоими кодами, как выполнять те же самые задачи, любую техническую или хорошую практику здесь?Image Rollovers byand <a> events

КОД # 1: Б eventhandlers MouseOver и MouseOutof тега

<a href="http://www.google.com" > 
    <img alt="arrow" name="ArrowImage" 
     onmouseover="document.ArrowImage.src='Images/arrow_on.gif'" 
     onmouseout="document.ArrowImage.src='Images/arrow_off.gif'" 
     src="Images/arrow_off.gif" /> 
</a> 

КОД # 2: Б eventhandlers MouseOver и MouseOut тега

<a href="http://www.google.com" 
    onmouseover="document.arrow.src='images/arrow_on.gif'" 
    onmouseout="document.arrow.src='images/arrow_off.gif'"> 
    <img src="images/arrow_off.gif" width="147" height="82" 
      name="arrow" alt="arrow" /> 
</a> 
+2

Инлайн JavaScript, как правило, плохая практика ISN» это? – KTastrophy

+2

Почему бы просто не использовать CSS? –

+0

@KThompson вы правы, но я нахожусь на стадии обучения :) –

ответ

2

В первом примере , события onmouseover и onmouseout связаны с тегом <img> , поэтому их активирует <img>. Во втором примере они связаны с тегом <a>, в котором содержится <img>.

Для ваших двух примеров результат будет идентичным, поскольку <img> является единственным элементом внутри тега <a>.

Однако, если больше текста было включено в тег <a> и события, связанные только с <img>, эффект опрокидывания не будет возникать, когда мышь над текстом.

Например:

<a href="http://www.google.com" > 
    This is some text explaining the image. If you mouse over it, the rollover won't change. 
    <img alt="arrow" name="ArrowImage" 
     onmouseover="document.ArrowImage.src='Images/arrow_on.gif'" 
     onmouseout="document.ArrowImage.src='Images/arrow_off.gif'" 
     src="Images/arrow_off.gif" /> 
</a> 

<a href="http://www.google.com" 
    onmouseover="document.arrow.src='images/arrow_on.gif'" 
    onmouseout="document.arrow.src='images/arrow_off.gif'"> 
    This is some text explaining the image. If you mouse over it, the rollover WILL change. 
    <img src="images/arrow_off.gif" width="147" height="82" 
      name="arrow" alt="arrow" /> 
</a> 
+0

Спасибо за четкое объяснение :) –

3

Если нет никакого форматирования или дополнительного контента внутри <a>, вы можете использовать либо, и это не будет иметь значения.

Если в ссылке есть форматирование или дополнительный контент CSS, граница <a> может отличаться от границы img. В этом случае это зависит от фактического намерения: вы хотите изменить источник изображения только при наведении изображения или при зависании оставшейся части ссылки.

Но так как вы просите хорошая практика: Не рекомендуется использовать встроенный JavaScript, т. Е. Не смешивать HTML и JavaScript. При применении хорошей практики вы, вероятно, поймаете события мыши в отдельном <script> внизу вашего документа HTML или определите стиль, используя псевдокласс класса CSS :hover.

+0

Как «CSS: hover pseudo class», может css взаимодействовать HTML-документ Я имею в виду DOM, как JavaScript может –

+2

Вы можете увидеть это [http://w3schools.com/cssref/sel_hover.asp] для зависания ... –

1

Либо работает отлично. Это вопрос того, что вы хотите сделать.

Если, например, у вас был и текст, вы бы выбрали вариант 2, потому что текст был бы сразу после <img> и до </a>.

Как правило, вы хотите держаться подальше от привязки непосредственно к изображениям, потому что обычно вы хотите поместить больше вещей с этим изображением (например, текст или другие контейнеры).

1

Было ли видео с 1992 года?

Вы можете добиться эффекта опрокидывания только с помощью CSS, который значительно лучше, например.

a#rollover { 
    background: url("normal.jpg") no-repeat 0 0; 
} 

a#rollover:hover { 
    background: url("rollover.jpg") no-repeat 0 0; 
} 

еще лучше, вы можете иметь оба состояния как одно изображение, а просто изменить положение фона при наведении курсора мыши, как описано here.

Если вы хотите использовать JavaScript для изменения источника изображения, а) используйте unobtrusive JavaScript и b) используйте jQuery для дополнительной простоты.

+0

Я поцарапаю JQuery, когда я сделаю это с помощью .js :) –

+0

Спасибо за отличный совет css –

+0

«Было ли видео с 1992 года?«hahaha, тогда это должно быть на видеокассете :) –

1

Как правило, не рекомендуется использовать «встроенный javascript», как вы здесь делаете. Это делает код очень трудным для чтения и, в конечном счете, менее удобным для обслуживания. Использование ненавязчивого javascript, определенного в отдельном файле javascript, - это путь. Примером этого с помощью jquery будет:

// defined in application.js for example: 

$("img").hover(function onmouseover(){ 
    $(this).attr("src", "Images/arrow_on.gif"); 
}, function onomouseout(){ 
    $(this).attr("src", "Images/arrow_off.gif"); 
}); 

Что касается различия между этими двумя подходами, разница лишь в том, в какой момент события получить срабатывает. Первый из них вызывает срабатывание событий, когда пользователь перебирает изображение, а второй появляется, когда пользователь перебирает якорь. Якорь, в зависимости от его стилей, может занимать большую площадь, чем само изображение, поэтому выбор между ними зависит от эффекта, который вы хотите создать.

Что касается «хороших практик», этот пример действительно плохое использование javascript, другими словами, вы можете выполнить одно и то же, используя CSS Sprites.

Например, CSS:

/* use a more specific selector in your actual code */ 
a { 
    /* on state */ 
    background: url(Images/arrow.gif) no-repeat 0 0; 
} 
a:hover { 
    /* default state */ 
    background: url(Images/arrow.gif) no-repeat -50px 0; 
} 
+0

Хмм CSS спрайты .... Выглядит круто –

1

Во-первых, пролонгировать изображения, как правило, осуществляется с помощью CSS

ответ знакомства devdigital для примера.

Во-вторых, если вы собираетесь использовать JavaScript, как вы имеете в своем коде увидеть пример Майкла

В-третьих, я хотел бы отметить, что «имя» атрибут не является допустимым атрибутом для любого из тех, элементов в HTML5 и вовсе не (Read: HTML4) для элемента img.

Наконец, предпочтительный способ сделать это с с JS будет что-то вроде этого:

HTML:

<a id="rollover" href="link.html"><img id="rolloverimage" src="image.jpg" width="100" height="100" alt="text"/></a> 

JS:

var atag = document.getElementById('rollover'); 

atag.onmouseover = function() { 
    document.getElementById('rolloverimage').src = 'rollover.jpg'; 
} 

atag.onmouseout = function() { 
    document.getElementById('rolloverimage').src = 'image.jpg'; 
} 
+0

Спасибо за ввод, как скрипт js будет запущен, если вы не использовали события в каких-либо тегах? –

+1

В моем примере, имеющем atag.onmouseover эквивалентен Это событие запускается независимо. Мы просто сообщим браузеру, что делать, когда это событие запускается. – KTastrophy

+0

Я добавил этот скрипт в , но это не работает:/ –

Смежные вопросы