Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Смена картинки (бекграунд дива ) при событии (нажатие клавиш или клавиши и мыши) (https://javascript.ru/forum/events/5702-smena-kartinki-bekgraund-diva-pri-sobytii-nazhatie-klavish-ili-klavishi-i-myshi.html)

Monster 31.10.2009 04:22

Смена картинки (бекграунд дива ) при событии (нажатие клавиш или клавиши и мыши)
 
Здравствуйте, господа!
У меня есть интересная задача, и мне кажется, что решить её может javaScript, а так как с ним я знаком только в общих чертах, прошу у вас помощи. Итак, у меня есть див с бекграундной картинкой.
<a href="http://site.ru">
<div id="golova">
</div></a>

и к нему стиль
#golova {height:298px;background: url('images/header.jpg') no-repeat top center}

Так вот, есть крайняя необходимость реализовать такой функционал:
— при простом клике на хэдере отправляемся по ссылке
— при клике на хэдере с зажатой кнопкой (любой, лучше ctrl) картинка менялась на другую
— в идеале при клике на определённую область картинки в хедере (диве golova) и загрузка не полностью новой картинки, а кусочка поверх старой (чтобы сэкономить на времени загрузки)
Если невозможно, то при нажатии на комбинацию 2-х, лучше 3-х клавишь, смысл в том, чтобы сделать невозможным случайный просмотр нового сообщения.
Насколько я понимаю, должно что-то отслеживать нажатие, типа
onkeydown, и какое либо исполнение потом, но в силу совсем плохого знания яваСкрипт никак не могу решить.
Помогите пожалуйста, хочется сделать скрытую фичу, а времени почти нет :(

Riim 31.10.2009 04:46

"div" в "a" - не валидно.

Monster 31.10.2009 04:58

Спасибо, что по теме. Как вас понимать? У вас есть другие предложения, как сделать ссылку на весь див, где нет ничего кроме бекграундной картинки? Работает во всех браузерах, всё ок, что смущает?

Господа, удалось сделать такую штуку:
<script type="text/javascript">
  document.onkeydown = function(e) {
    e = e || window.event;
    if (e.shiftKey && e.keyCode == 65) {
 	document.getElementById('golova').style.background ='url(тут полный путь ко второй картинке,
относительный почему-то не берёт)'
    }
    return true;
  }
</script>

Остаюются вопросы:
— можно ли сделать, чтобы реакция была на клавишу + щелчок мышью?
— можно ли, чтобы щелчок если только в определённое место, при нажатой клавише вызывал событие
— можно ли не перегружать картинку целиком, а лишь положить поверх первой кусочек? (Мне нужно просто дорисовать часть к первой картинке)
Да, ещё, можно ли как-то спрятать скрипт от глаз? ЧТобы случайный человек не понимал, как что сделать? На ум призодит base64, но тут тоже не силён.
Спасибо.

Riim 31.10.2009 08:48

Цитата:

Сообщение от Monster
Как вас понимать?

так и понимать.

Цитата:

Сообщение от Monster
У вас есть другие предложения, как сделать ссылку на весь див, где нет ничего кроме бекграундной картинки?

span + display:block = div, только семантически не очень будет, лучше onclick на div. Либо забить на валидность.

Цитата:

Сообщение от Monster
можно ли сделать, чтобы реакция была на клавишу + щелчок мышью?

можно.

Цитата:

Сообщение от Monster
можно ли, чтобы щелчок если только в определённое место, при нажатой клавише вызывал событие

можно.

Цитата:

Сообщение от Monster
можно ли не перегружать картинку целиком, а лишь положить поверх первой кусочек? (Мне нужно просто дорисовать часть к первой картинке)

можно.

Цитата:

Сообщение от Monster
Да, ещё, можно ли как-то спрятать скрипт от глаз?

зачем? Вы тоже мните, что ваш скрипт нечто очень ценное и все захотят его увидеть? Да никому он не уперся.

Цитата:

Сообщение от Monster
ЧТобы случайный человек не понимал, как что сделать?

если он еще не понимает, то что мешает ему, так же как и вам, зайти на форум и спросить.

Monster 31.10.2009 17:25

Цитата:

Сообщение от Riim
span + display:block = div

Какая-то паника, зачем такие извражения?
Цитата:

лучше onclick на div
и это чистый html + css? Ну, не знаю, на валидаторе, что html, что css «a» на диве проходит без ошибок. Но спасибо, подумаю над вашими советами.
А что насчёт 3-х «можно»?
Дадите совет как это сделать или где прочитать? Времени совсем нет.
А спрятать скрипт хочу, чтобы случайный человек не смог увидеть скрытое непристойное изображение.

Riim 01.11.2009 01:16

Цитата:

Сообщение от Monster
Какая-то паника, зачем такие извражения?

я не навязываю, и нет никакой паники.

Цитата:

Сообщение от Monster
реакция была на клавишу + щелчок мышью

на документ вешаешь keydown и keyup, в них смотришь код клавиши (e.keyCode || e.which), если нужный, то меняешь какую-то переменную на true(mousedown)/false(mouseup). В обработчике клика мышки смотришь эту переменную, если true, то:
Цитата:

Сообщение от Monster
клавишу + щелчок мышью


Цитата:

Сообщение от Monster
щелчок если только в определённое место, при нажатой клавише вызывал событие

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

Цитата:

Сообщение от Monster
загрузка не полностью новой картинки, а кусочка поверх старой

к рисунку который поверх другого position:absolute . Что бы left и top считались от div-а, добавь ему position:relative : http://softwaremaniacs.org/blog/2005...t-positioning/


Часовой пояс GMT +3, время: 14:42.