SlideShare a Scribd company logo
1 of 18
Download to read offline
Задача 67
Створіть сторінку, на якій генеруватиметься
маркований список з числами 1-20. Розмістіть
там ще два абзаци <p id="par1"></p> і <p
id="par2">0</p>. Напишіть код, який при
наведенні мишки на елементи списку буде
виводити відповідні числа у абзац par1, а при
кліках на них – виводити у par2 суму
відповідних чисел.
Підказки:
Подія наведення мишки – mouseover;
Перетворити величину x у числовий тип можна
так: +x або так: parseFloat(x).
Розв’язок
<ul>
<script>
var N = 20;
for (var i = 1; i <= N; i++) {
document.write("<li>" + i + "</li>");
}
</script>
</ul>
<p id="par1"></p> <p id="par2">0</p>
<script>
var lis = document.getElementsByTagName('li');
for (var i = 0; i < lis.length; i++) {
lis[i].addEventListener("mouseover", handleMouseOver);
lis[i].addEventListener("click", handleClick);
}
function handleMouseOver(){
par1.innerHTML = this.innerHTML;
}
function handleClick(){
par2.innerHTML = +par2.innerHTML + +this.innerHTML;
}
</script>
Деякі приклади подій
mouseover і mouseout
<div id="myDiv">Поводіть тут мишкою</div>
<script>
myDiv.addEventListener("mouseover", mOver);
myDiv.addEventListener("mouseout", mOut);
function mOver() {
this.innerHTML = "Дякую"
}
function mOut() {
this.innerHTML = "Поводіть тут мишкою"
}
</script>
Або:
<div onmouseover="mOver(this)"
onmouseout="mOut(this)" >
Поводіть тут мишкою</div>
<script>
function mOver(obj) {
obj.innerHTML = "Дякую"
}
function mOut(obj) {
obj.innerHTML = "Поводіть тут мишкою"
}
</script>
mousedown, mouseup і click
(onmousedown, onmouseup і onclick)
<div id=myDiv style="background-
color:#D94A38;width:90px;height:20px;padding:40px;">
Натисніть</div>
<script>
myDiv.addEventListener("mousedown", mDown);
myDiv.addEventListener("mouseup", mUp);
function mDown() {
this.style.backgroundColor = "#1ec5e5";
this.innerHTML = "Відпустіть";
}
function mUp() {
this.style.backgroundColor="#D94A38";
this.innerHTML="Дякую";
}
</script>
Або
<div onmousedown="mDown(this)" onmouseup="mUp(this)"
style="background-
color:#D94A38;width:90px;height:20px;padding:40px;
">
Натисніть</div>
<script>
function mDown(obj) {
obj.style.backgroundColor = "#1ec5e5";
obj.innerHTML = "Відпустіть";
}
function mUp(obj) {
obj.style.backgroundColor="#D94A38";
obj.innerHTML="Дякую";
}
</script>
load (onload)
Подія стається, коли об’єкт завантажується.
Приклади:
<body onload="myFunction()">
object.onload = function(){myScript}; //
використовується анонімна функція
object.addEventListener("load", myScript);
<img src="someimage.gif" onload="loadImage()"
width="100" height="132">
<script>
function loadImage() {
alert("Image is loaded");
}
</script>
Спливання і перехоплення
Якщо є кілька вкладених один в одного елементів,
події можна призначати кожному з них. Тоді, по
замовчуванню, порядок виконання – від внутрішніх
до зовнішніх. Це звуть спливанням (bubbling).
Приклад:
<div onclick="alert('DIV')">
<p onclick="alert('P')">
<span> 1 </span>
<span onclick="alert('SPAN')"> 2
</span>
<span> 3 </span>
</p>
</div>
Клік на 2 виводить SPAN, потім P, потім DIV.
Порядок виконання можна змінити на
протилежний, що називають перехопленням
(capturing ). Це робиться третім
(необов’язковим) параметром у
addEventListener, який, по
замовчуванню, дорівнює false. Отже, для
перехоплення треба писати так:
element.addEventListener("click",
myFunction, true);
Приклад:
<div id=myDiv>
<p id=myPar>
<span> 1 </span><span id=mySpan> 2 </span><span> 3 </span>
</p>
</div>
<script>
myDiv.addEventListener("click", clickDiv, true);
myPar.addEventListener("click", clickPar, true);
mySpan.addEventListener("click", clickSpan, true);
function clickDiv() {
alert("You clicked the DIV element!");
}
function clickPar() {
alert("You clicked the P element!");
}
function clickSpan() {
alert("You clicked the SPAN element!");
}
</script>
Властивість target
Властивість події target повертає елемент, на якому
спрацювала подія.
Приклад:
<body onclick="myFunction(event)">
<p>Клікніть, і дізнаєтесь, на чому клікнули</p>
<div><strong>Зауваження:</strong> target повертає
елемент, на якому спрацювала подія, але не обов’язково
елемент, якому призначений eventlistener.</div>
<script>
function myFunction(event) {
alert(event.target.tagName);
}
</script>
</body>
В аргументі функції можна замість event використовувати e.
event.target дає можливість
прочитати чи змінити властивості
елементів (залежно від типу
елемента).
Приклади:
event.target.tagName
event.target.innerHTML
event.target.style
event.target.src
Задача 67
Завантажте і розпакуйте архів з
зображеннями goo.gl/mAjJME. Розмістіть їх
підряд на сторінці balls.html у блоці
DIV. Створіть для цього блоку обробник
подій, який при наведенні на будь-яку з
картинок заміняє її випадковим чином на
іншу.
Розв’язок
<div id="ballsContainer">
<img src="images/circle_blue.png">
<img src="images/circle_green.png">
<img src="images/circle_red.png">
<img src="images/circle_yellow.png">
<img src="images/circle_purple.png">
<img src="images/circle_grey.png">
</div>
<script>
ballsContainer.addEventListener("click", getBall);
var imgs = [
"images/circle_blue.png",
"images/circle_green.png",
"images/circle_red.png",
"images/circle_yellow.png",
"images/circle_purple.png",
"images/circle_grey.png"
];
function getBall(e) {
var rnd = Math.floor(Math.random()*imgs.length);
e.target.src = imgs[rnd];
}
</script>
Додаткове завдання
Змініть код попередньої задачі так, щоб
при наведенні мишкі на кульку, її розмір
збільшувався на 5 px (а при відведенні -
відновлювався).
Розв’язок (з коментарями і належним
оформленням коду) надішліть на адресу
viligurskyi@gmail.com
Передача параметрів обробнику
Щоб передати якісь параметри функції-обробнику, можна використати
анонімну функцію, яка викликає іншу, передаючи її потрібні параметри:
element.addEventListener("click", function(){
myFunction(p1, p2); });
Приклад:
<img src="images/1.png" width=600 height=400 id=img1>
<script>
img1.addEventListener("click", function()
{getBall(this.width,this.height)});
function getBall(a,b) {
alert(a*b); // к-ть пікселів картинки
}
</script>
Задача 68
Розмістіть в контейнері DIV два
зображення. Створіть обробники для
зображень, які при натисканні на них будуть
виводити шлях до зображень і кількість
зображень в контейнері. Наприклад:
шлях: file:///d:/JS/images/circle_blue.png
число картинок в контейнері: 2
Підказка: батьківський елемент можна
отримати властивістю parentElement.
Розв’язок
<div>
<img src="images/1.png" width=64 height=64 id=img1>
<img src="images/2.png" width=64 height=64 id=img2>
</div>
<script>
img1.addEventListener("click", function()
{getBall(this.src,this.parentElement.children)});
img2.addEventListener("click", function()
{getBall(this.src,this.parentElement.children)});
function getBall(a,b) {
alert("шлях до картинки: " + a + "nчисло картинок в
контейнері: " + b.length);
}
</script>

More Related Content

More from Олег Вілігурський

More from Олег Вілігурський (20)

Python для фізиків. Вступ. Лабораторні роботи.
Python для фізиків. Вступ. Лабораторні роботи.Python для фізиків. Вступ. Лабораторні роботи.
Python для фізиків. Вступ. Лабораторні роботи.
 
Python for physicists. introduction
Python for physicists. introductionPython for physicists. introduction
Python for physicists. introduction
 
Theme24-jQuery
Theme24-jQueryTheme24-jQuery
Theme24-jQuery
 
Theme23-oop2(end)
Theme23-oop2(end)Theme23-oop2(end)
Theme23-oop2(end)
 
Theme23-oop2
Theme23-oop2Theme23-oop2
Theme23-oop2
 
Theme22-OOP
Theme22-OOPTheme22-OOP
Theme22-OOP
 
Theme21_json
Theme21_jsonTheme21_json
Theme21_json
 
Theme20_ajax
Theme20_ajaxTheme20_ajax
Theme20_ajax
 
Theme19_css
Theme19_cssTheme19_css
Theme19_css
 
Theme18_css
Theme18_cssTheme18_css
Theme18_css
 
Theme17a css
Theme17a cssTheme17a css
Theme17a css
 
Coding for Future in Lutsk. JavaScript. Part 12
Coding for Future in Lutsk. JavaScript. Part 12Coding for Future in Lutsk. JavaScript. Part 12
Coding for Future in Lutsk. JavaScript. Part 12
 
Coding for Future in Lutsk. JavaScript. Part 11
Coding for Future in Lutsk. JavaScript. Part 11Coding for Future in Lutsk. JavaScript. Part 11
Coding for Future in Lutsk. JavaScript. Part 11
 
Coding for Future in Lutsk. JavaScript. Part 10
Coding for Future in Lutsk. JavaScript. Part 10Coding for Future in Lutsk. JavaScript. Part 10
Coding for Future in Lutsk. JavaScript. Part 10
 
Coding for Future in Lutsk. JavaScript. Part 9
Coding for Future in Lutsk. JavaScript. Part 9Coding for Future in Lutsk. JavaScript. Part 9
Coding for Future in Lutsk. JavaScript. Part 9
 
Coding for Future in Lutsk. JavaScript. Part 8
Coding for Future in Lutsk. JavaScript. Part 8Coding for Future in Lutsk. JavaScript. Part 8
Coding for Future in Lutsk. JavaScript. Part 8
 
Coding for Future in Lutsk. JavaScript. Part 7
Coding for Future in Lutsk. JavaScript. Part 7Coding for Future in Lutsk. JavaScript. Part 7
Coding for Future in Lutsk. JavaScript. Part 7
 
Coding for Future in Lutsk. JavaScript. Part 6
Coding for Future in Lutsk. JavaScript. Part 6Coding for Future in Lutsk. JavaScript. Part 6
Coding for Future in Lutsk. JavaScript. Part 6
 
Coding for Future in Lutsk. JavaScript. Part 5
Coding for Future in Lutsk. JavaScript. Part 5Coding for Future in Lutsk. JavaScript. Part 5
Coding for Future in Lutsk. JavaScript. Part 5
 
Coding for Future in Lutsk. JavaScript. Part 4
Coding for Future in Lutsk. JavaScript. Part 4Coding for Future in Lutsk. JavaScript. Part 4
Coding for Future in Lutsk. JavaScript. Part 4
 

Recently uploaded

Тренінг про тренінг. Педагогам ЗДО проте як скласти та провести тренінг у кол...
Тренінг про тренінг. Педагогам ЗДО проте як скласти та провести тренінг у кол...Тренінг про тренінг. Педагогам ЗДО проте як скласти та провести тренінг у кол...
Тренінг про тренінг. Педагогам ЗДО проте як скласти та провести тренінг у кол...
ssuser7541ef1
 
Анастасія Крижановська. Як AI-революція вплинула на бізнес контент-агентства?
Анастасія Крижановська. Як AI-революція вплинула на бізнес контент-агентства?Анастасія Крижановська. Як AI-революція вплинула на бізнес контент-агентства?
Анастасія Крижановська. Як AI-революція вплинула на бізнес контент-агентства?
Collaborator.pro
 

Recently uploaded (13)

Графіки відключень у Вінниці і області на 2024 рік
Графіки відключень у Вінниці і області на 2024 рікГрафіки відключень у Вінниці і області на 2024 рік
Графіки відключень у Вінниці і області на 2024 рік
 
Презентація про виникнення балади., особливості
Презентація про виникнення балади., особливостіПрезентація про виникнення балади., особливості
Презентація про виникнення балади., особливості
 
Альфрейні опорядження поверхонь ТООРтаПД.pptx
Альфрейні опорядження поверхонь ТООРтаПД.pptxАльфрейні опорядження поверхонь ТООРтаПД.pptx
Альфрейні опорядження поверхонь ТООРтаПД.pptx
 
Хвороби картоплі та заходи боротьби з ними
Хвороби картоплі та заходи боротьби з нимиХвороби картоплі та заходи боротьби з ними
Хвороби картоплі та заходи боротьби з ними
 
Пасивний будинок Енергоефективність ОБСБД.pptx
Пасивний будинок Енергоефективність ОБСБД.pptxПасивний будинок Енергоефективність ОБСБД.pptx
Пасивний будинок Енергоефективність ОБСБД.pptx
 
Тренінг про тренінг. Педагогам ЗДО проте як скласти та провести тренінг у кол...
Тренінг про тренінг. Педагогам ЗДО проте як скласти та провести тренінг у кол...Тренінг про тренінг. Педагогам ЗДО проте як скласти та провести тренінг у кол...
Тренінг про тренінг. Педагогам ЗДО проте як скласти та провести тренінг у кол...
 
Особливості застосування інструментарію оцінювання готовності дитини до навча...
Особливості застосування інструментарію оцінювання готовності дитини до навча...Особливості застосування інструментарію оцінювання готовності дитини до навча...
Особливості застосування інструментарію оцінювання готовності дитини до навча...
 
80 років від часу депортації з Криму кримських татар і осіб інших національно...
80 років від часу депортації з Криму кримських татар і осіб інших національно...80 років від часу депортації з Криму кримських татар і осіб інших національно...
80 років від часу депортації з Криму кримських татар і осіб інших національно...
 
Ім’я чернігівця на карті Місяця. ЮРІЙ МЕЗЕНЦЕВ
Ім’я чернігівця на карті Місяця. ЮРІЙ МЕЗЕНЦЕВІм’я чернігівця на карті Місяця. ЮРІЙ МЕЗЕНЦЕВ
Ім’я чернігівця на карті Місяця. ЮРІЙ МЕЗЕНЦЕВ
 
70 років тому – початок Кенгірського повстання
70 років тому – початок Кенгірського повстання70 років тому – початок Кенгірського повстання
70 років тому – початок Кенгірського повстання
 
Заняття у різновіковій групі. Особливості планування та проведення з дітьми д...
Заняття у різновіковій групі. Особливості планування та проведення з дітьми д...Заняття у різновіковій групі. Особливості планування та проведення з дітьми д...
Заняття у різновіковій групі. Особливості планування та проведення з дітьми д...
 
Анастасія Крижановська. Як AI-революція вплинула на бізнес контент-агентства?
Анастасія Крижановська. Як AI-революція вплинула на бізнес контент-агентства?Анастасія Крижановська. Як AI-революція вплинула на бізнес контент-агентства?
Анастасія Крижановська. Як AI-революція вплинула на бізнес контент-агентства?
 
Графіки стабілізаційних відключень у Чернігові та області
Графіки стабілізаційних відключень у Чернігові та областіГрафіки стабілізаційних відключень у Чернігові та області
Графіки стабілізаційних відключень у Чернігові та області
 

Coding for Future in Lutsk. JavaScript. Part 15

  • 1. Задача 67 Створіть сторінку, на якій генеруватиметься маркований список з числами 1-20. Розмістіть там ще два абзаци <p id="par1"></p> і <p id="par2">0</p>. Напишіть код, який при наведенні мишки на елементи списку буде виводити відповідні числа у абзац par1, а при кліках на них – виводити у par2 суму відповідних чисел. Підказки: Подія наведення мишки – mouseover; Перетворити величину x у числовий тип можна так: +x або так: parseFloat(x).
  • 2. Розв’язок <ul> <script> var N = 20; for (var i = 1; i <= N; i++) { document.write("<li>" + i + "</li>"); } </script> </ul> <p id="par1"></p> <p id="par2">0</p> <script> var lis = document.getElementsByTagName('li'); for (var i = 0; i < lis.length; i++) { lis[i].addEventListener("mouseover", handleMouseOver); lis[i].addEventListener("click", handleClick); } function handleMouseOver(){ par1.innerHTML = this.innerHTML; } function handleClick(){ par2.innerHTML = +par2.innerHTML + +this.innerHTML; } </script>
  • 3. Деякі приклади подій mouseover і mouseout <div id="myDiv">Поводіть тут мишкою</div> <script> myDiv.addEventListener("mouseover", mOver); myDiv.addEventListener("mouseout", mOut); function mOver() { this.innerHTML = "Дякую" } function mOut() { this.innerHTML = "Поводіть тут мишкою" } </script>
  • 4. Або: <div onmouseover="mOver(this)" onmouseout="mOut(this)" > Поводіть тут мишкою</div> <script> function mOver(obj) { obj.innerHTML = "Дякую" } function mOut(obj) { obj.innerHTML = "Поводіть тут мишкою" } </script>
  • 5. mousedown, mouseup і click (onmousedown, onmouseup і onclick) <div id=myDiv style="background- color:#D94A38;width:90px;height:20px;padding:40px;"> Натисніть</div> <script> myDiv.addEventListener("mousedown", mDown); myDiv.addEventListener("mouseup", mUp); function mDown() { this.style.backgroundColor = "#1ec5e5"; this.innerHTML = "Відпустіть"; } function mUp() { this.style.backgroundColor="#D94A38"; this.innerHTML="Дякую"; } </script>
  • 6. Або <div onmousedown="mDown(this)" onmouseup="mUp(this)" style="background- color:#D94A38;width:90px;height:20px;padding:40px; "> Натисніть</div> <script> function mDown(obj) { obj.style.backgroundColor = "#1ec5e5"; obj.innerHTML = "Відпустіть"; } function mUp(obj) { obj.style.backgroundColor="#D94A38"; obj.innerHTML="Дякую"; } </script>
  • 7. load (onload) Подія стається, коли об’єкт завантажується. Приклади: <body onload="myFunction()"> object.onload = function(){myScript}; // використовується анонімна функція object.addEventListener("load", myScript); <img src="someimage.gif" onload="loadImage()" width="100" height="132"> <script> function loadImage() { alert("Image is loaded"); } </script>
  • 8. Спливання і перехоплення Якщо є кілька вкладених один в одного елементів, події можна призначати кожному з них. Тоді, по замовчуванню, порядок виконання – від внутрішніх до зовнішніх. Це звуть спливанням (bubbling). Приклад: <div onclick="alert('DIV')"> <p onclick="alert('P')"> <span> 1 </span> <span onclick="alert('SPAN')"> 2 </span> <span> 3 </span> </p> </div> Клік на 2 виводить SPAN, потім P, потім DIV.
  • 9. Порядок виконання можна змінити на протилежний, що називають перехопленням (capturing ). Це робиться третім (необов’язковим) параметром у addEventListener, який, по замовчуванню, дорівнює false. Отже, для перехоплення треба писати так: element.addEventListener("click", myFunction, true);
  • 10. Приклад: <div id=myDiv> <p id=myPar> <span> 1 </span><span id=mySpan> 2 </span><span> 3 </span> </p> </div> <script> myDiv.addEventListener("click", clickDiv, true); myPar.addEventListener("click", clickPar, true); mySpan.addEventListener("click", clickSpan, true); function clickDiv() { alert("You clicked the DIV element!"); } function clickPar() { alert("You clicked the P element!"); } function clickSpan() { alert("You clicked the SPAN element!"); } </script>
  • 11. Властивість target Властивість події target повертає елемент, на якому спрацювала подія. Приклад: <body onclick="myFunction(event)"> <p>Клікніть, і дізнаєтесь, на чому клікнули</p> <div><strong>Зауваження:</strong> target повертає елемент, на якому спрацювала подія, але не обов’язково елемент, якому призначений eventlistener.</div> <script> function myFunction(event) { alert(event.target.tagName); } </script> </body> В аргументі функції можна замість event використовувати e.
  • 12. event.target дає можливість прочитати чи змінити властивості елементів (залежно від типу елемента). Приклади: event.target.tagName event.target.innerHTML event.target.style event.target.src
  • 13. Задача 67 Завантажте і розпакуйте архів з зображеннями goo.gl/mAjJME. Розмістіть їх підряд на сторінці balls.html у блоці DIV. Створіть для цього блоку обробник подій, який при наведенні на будь-яку з картинок заміняє її випадковим чином на іншу.
  • 14. Розв’язок <div id="ballsContainer"> <img src="images/circle_blue.png"> <img src="images/circle_green.png"> <img src="images/circle_red.png"> <img src="images/circle_yellow.png"> <img src="images/circle_purple.png"> <img src="images/circle_grey.png"> </div> <script> ballsContainer.addEventListener("click", getBall); var imgs = [ "images/circle_blue.png", "images/circle_green.png", "images/circle_red.png", "images/circle_yellow.png", "images/circle_purple.png", "images/circle_grey.png" ]; function getBall(e) { var rnd = Math.floor(Math.random()*imgs.length); e.target.src = imgs[rnd]; } </script>
  • 15. Додаткове завдання Змініть код попередньої задачі так, щоб при наведенні мишкі на кульку, її розмір збільшувався на 5 px (а при відведенні - відновлювався). Розв’язок (з коментарями і належним оформленням коду) надішліть на адресу viligurskyi@gmail.com
  • 16. Передача параметрів обробнику Щоб передати якісь параметри функції-обробнику, можна використати анонімну функцію, яка викликає іншу, передаючи її потрібні параметри: element.addEventListener("click", function(){ myFunction(p1, p2); }); Приклад: <img src="images/1.png" width=600 height=400 id=img1> <script> img1.addEventListener("click", function() {getBall(this.width,this.height)}); function getBall(a,b) { alert(a*b); // к-ть пікселів картинки } </script>
  • 17. Задача 68 Розмістіть в контейнері DIV два зображення. Створіть обробники для зображень, які при натисканні на них будуть виводити шлях до зображень і кількість зображень в контейнері. Наприклад: шлях: file:///d:/JS/images/circle_blue.png число картинок в контейнері: 2 Підказка: батьківський елемент можна отримати властивістю parentElement.
  • 18. Розв’язок <div> <img src="images/1.png" width=64 height=64 id=img1> <img src="images/2.png" width=64 height=64 id=img2> </div> <script> img1.addEventListener("click", function() {getBall(this.src,this.parentElement.children)}); img2.addEventListener("click", function() {getBall(this.src,this.parentElement.children)}); function getBall(a,b) { alert("шлях до картинки: " + a + "nчисло картинок в контейнері: " + b.length); } </script>