1
00:00:01,520 --> 00:00:03,780
<v Jonas>Let's now create a nice effect</v>

2
00:00:03,780 --> 00:00:05,920
on our page navigation,

3
00:00:05,920 --> 00:00:08,640
where all the links fade out when we hover

4
00:00:08,640 --> 00:00:11,383
over one of them, except for the link

5
00:00:11,383 --> 00:00:13,640
that we actually hovered over.

6
00:00:13,640 --> 00:00:16,580
And this will teach us something really valuable,

7
00:00:16,580 --> 00:00:18,660
which is how to pass arguments

8
00:00:18,660 --> 00:00:20,713
into event handler functions.

9
00:00:22,500 --> 00:00:25,530
And the effect that I mean is this one.

10
00:00:25,530 --> 00:00:28,320
So, when we hover over one of the links,

11
00:00:28,320 --> 00:00:31,290
you see, all the others fade out like this.

12
00:00:31,290 --> 00:00:34,363
And that includes even the logo there on the left side.

13
00:00:35,550 --> 00:00:39,010
So, let's do that here in our page,

14
00:00:39,010 --> 00:00:43,103
and let's again, start by taking a look here at the HTML.

15
00:00:44,820 --> 00:00:47,893
So we have these links.

16
00:00:48,750 --> 00:00:50,413
So each of them is a nav_link.

17
00:00:51,460 --> 00:00:53,030
And so these are the elements

18
00:00:53,030 --> 00:00:54,680
that we're gonna be working with.

19
00:00:58,260 --> 00:01:00,213
So, menu fade animation.

20
00:01:01,560 --> 00:01:04,340
But now, of course, we do not want to attach

21
00:01:04,340 --> 00:01:07,910
an event listener to each of these links.

22
00:01:07,910 --> 00:01:09,820
So we already know that we should do

23
00:01:09,820 --> 00:01:11,743
event delegation here instead.

24
00:01:12,980 --> 00:01:15,310
So let's find the common parent element

25
00:01:15,310 --> 00:01:17,240
of all of the links,

26
00:01:17,240 --> 00:01:21,570
and also, including the logo there.

27
00:01:21,570 --> 00:01:23,770
So if we were only working with the links,

28
00:01:23,770 --> 00:01:26,630
it would be this element,

29
00:01:26,630 --> 00:01:29,930
but we also want to work with the logo here.

30
00:01:29,930 --> 00:01:33,110
And so let's actually use this entire navigation here

31
00:01:33,110 --> 00:01:36,730
as our parent container on which we will handle the event

32
00:01:36,730 --> 00:01:39,223
that is gonna bubble up from the links.

33
00:01:40,350 --> 00:01:42,760
So keep in mind that all of this works

34
00:01:42,760 --> 00:01:46,143
because events bubble up from their target.

35
00:01:48,190 --> 00:01:50,260
So, let's select the navigation here

36
00:01:52,080 --> 00:01:54,530
and store it in a variable.querySelector('.nav').

37
00:01:57,790 --> 00:01:58,623
Okay.

38
00:01:58,623 --> 00:02:01,150
And actually, let me put this here at the very top

39
00:02:01,150 --> 00:02:04,313
because we are gonna need this a bit later.

40
00:02:05,580 --> 00:02:09,450
And it is a good practice to have all of these at the top.

41
00:02:09,450 --> 00:02:12,260
And the same, actually here.

42
00:02:12,260 --> 00:02:15,023
So why not have all of the selections right at the top?

43
00:02:16,100 --> 00:02:18,900
That makes it a bit easier to understand the whole file.

44
00:02:20,490 --> 00:02:22,100
Okay?

45
00:02:22,100 --> 00:02:23,800
But anyway, let's now attach

46
00:02:23,800 --> 00:02:26,313
an event listener to that navigation.

47
00:02:28,480 --> 00:02:30,880
But now, we're not gonna use the click event,

48
00:02:30,880 --> 00:02:34,013
but instead, the mouseover event, okay?

49
00:02:36,240 --> 00:02:39,180
And I think that previously, we have already used

50
00:02:39,180 --> 00:02:41,080
the mouse enter event,

51
00:02:41,080 --> 00:02:44,750
and mouseover is actually similar to mouseenter,

52
00:02:44,750 --> 00:02:47,270
with the big difference that mouseenter

53
00:02:47,270 --> 00:02:49,830
does not bubble, okay?

54
00:02:49,830 --> 00:02:52,570
But here, we need the event to actually bubble

55
00:02:52,570 --> 00:02:56,060
so that it can even reach the navigation element.

56
00:02:56,060 --> 00:02:59,673
And so, therefore, we use mouseover, all right?

57
00:03:02,180 --> 00:03:03,810
So then attach the function here

58
00:03:04,960 --> 00:03:08,340
and there are also kind of opposite events

59
00:03:08,340 --> 00:03:10,860
of mouseover and mouseenter.

60
00:03:10,860 --> 00:03:13,310
And we use these to basically undo

61
00:03:13,310 --> 00:03:15,320
what we do on the hover.

62
00:03:15,320 --> 00:03:18,050
So the opposite of mouseenter is mouseleave,

63
00:03:18,050 --> 00:03:22,003
and the opposite of this mouseover is mouseout.

64
00:03:22,840 --> 00:03:24,763
And so we're also gonna need that one,

65
00:03:25,720 --> 00:03:28,273
so let's put that here right away.

66
00:03:30,940 --> 00:03:33,370
So mouseout, all right?

67
00:03:33,370 --> 00:03:35,660
And as always, if you need to know more,

68
00:03:35,660 --> 00:03:38,440
then you can check out the MDN documentation.

69
00:03:38,440 --> 00:03:40,030
Great.

70
00:03:40,030 --> 00:03:41,760
So we have our parent element,

71
00:03:41,760 --> 00:03:44,550
and now as always, we need to match the element

72
00:03:44,550 --> 00:03:46,590
that we are actually looking for.

73
00:03:46,590 --> 00:03:50,160
And so in this case, that are these elements

74
00:03:50,160 --> 00:03:52,530
with the nav_link class on them.

75
00:03:52,530 --> 00:03:54,793
And so let's simply check for that.

76
00:03:56,380 --> 00:04:00,253
So, if e.target, as you already know,

77
00:04:03,150 --> 00:04:04,200
.classList.contains

78
00:04:06,020 --> 00:04:08,753
the nav_link class.

79
00:04:09,810 --> 00:04:12,610
Well, then let's do something.

80
00:04:12,610 --> 00:04:14,900
So, you see that this time around,

81
00:04:14,900 --> 00:04:17,410
I'm not using the closest methods.

82
00:04:17,410 --> 00:04:20,750
And that's because there are simply no child elements

83
00:04:20,750 --> 00:04:23,420
that we could accidentally click here

84
00:04:23,420 --> 00:04:25,810
in this link, right?

85
00:04:25,810 --> 00:04:28,060
So that was the reason why we needed

86
00:04:28,060 --> 00:04:30,900
the closest method here in this tabs

87
00:04:30,900 --> 00:04:32,610
because we had this button,

88
00:04:32,610 --> 00:04:35,940
but then we could also click on the span element.

89
00:04:35,940 --> 00:04:39,460
And so here we then needed to find the closest element.

90
00:04:39,460 --> 00:04:44,460
So the closest button to both of these places, okay?

91
00:04:44,620 --> 00:04:46,480
But here that's not necessary.

92
00:04:46,480 --> 00:04:48,650
And so, therefore ,a simple check

93
00:04:48,650 --> 00:04:50,623
like we have here is enough.

94
00:04:51,730 --> 00:04:53,640
And so now we can actually say

95
00:04:53,640 --> 00:04:55,320
that the clicked

96
00:04:56,250 --> 00:05:00,940
is then e.target, okay?

97
00:05:00,940 --> 00:05:02,890
So I called it clicked before,

98
00:05:02,890 --> 00:05:04,903
let's call it now actually the link.

99
00:05:06,070 --> 00:05:09,260
But this is similar to what we did before also.

100
00:05:09,260 --> 00:05:11,770
So creating a variable which contains

101
00:05:11,770 --> 00:05:13,530
the element that we're working with.

102
00:05:13,530 --> 00:05:14,940
Now, right.

103
00:05:14,940 --> 00:05:16,200
And so now, next up,

104
00:05:16,200 --> 00:05:18,980
we need to select the sibling elements.

105
00:05:18,980 --> 00:05:22,690
So basically all the other links, all right?

106
00:05:22,690 --> 00:05:25,970
And remember that we can do that by going to the parent

107
00:05:25,970 --> 00:05:28,403
and then selecting the children from there.

108
00:05:29,360 --> 00:05:32,950
Now, in this case, actually the parent of nav_link

109
00:05:32,950 --> 00:05:34,710
is this nav_item.

110
00:05:34,710 --> 00:05:37,510
And the only thing that nav_item includes

111
00:05:37,510 --> 00:05:39,760
is always just one link.

112
00:05:39,760 --> 00:05:41,740
So you see that each of the link

113
00:05:41,740 --> 00:05:46,090
is actually inside of one nav_item, like this.

114
00:05:46,090 --> 00:05:49,040
And so now we would have to move up manually,

115
00:05:49,040 --> 00:05:51,190
not just once, but twice.

116
00:05:51,190 --> 00:05:52,910
And so instead of doing that,

117
00:05:52,910 --> 00:05:56,223
we will again use the closest method, okay?

118
00:05:57,330 --> 00:05:59,790
So again, instead of moving up manually,

119
00:05:59,790 --> 00:06:03,260
like one or two steps, we can simply search for a parent

120
00:06:03,260 --> 00:06:05,790
which matches a certain query.

121
00:06:05,790 --> 00:06:07,530
And so that's a bit more robust

122
00:06:07,530 --> 00:06:10,320
because even if we would, then at some point,

123
00:06:10,320 --> 00:06:14,010
maybe change the structure of this HTML here,

124
00:06:14,010 --> 00:06:16,253
then our JavaScript would keep working.

125
00:06:17,500 --> 00:06:19,530
All right?

126
00:06:19,530 --> 00:06:22,440
So let's say our link,

127
00:06:22,440 --> 00:06:24,793
and then find the closest parent,

128
00:06:25,660 --> 00:06:30,190
and that's actually search for nav again, okay?

129
00:06:30,190 --> 00:06:32,610
Even though that's not the closest parent,

130
00:06:32,610 --> 00:06:35,020
I mean, there is another parent to these links,

131
00:06:35,020 --> 00:06:37,160
which is this one here.

132
00:06:37,160 --> 00:06:39,550
But it's no problem of also choosing

133
00:06:39,550 --> 00:06:42,383
an even higher up parent like we are doing here.

134
00:06:44,810 --> 00:06:48,600
So we are now at a parent of all of the links,

135
00:06:48,600 --> 00:06:49,700
and so now from there,

136
00:06:49,700 --> 00:06:52,660
we can search for the nav_links again.

137
00:06:52,660 --> 00:06:54,650
And so these are then going to be the siblings

138
00:06:54,650 --> 00:06:56,760
of our initial links.

139
00:06:56,760 --> 00:07:00,060
And so, as we already learned before,

140
00:07:00,060 --> 00:07:03,550
we can use query selector on an element to search

141
00:07:03,550 --> 00:07:07,100
for a certain query only in that element.

142
00:07:07,100 --> 00:07:08,800
Okay?

143
00:07:08,800 --> 00:07:11,300
And we are looking for these nav_links, of course.

144
00:07:12,890 --> 00:07:16,010
And now, let's actually also select the logo,

145
00:07:16,010 --> 00:07:18,963
and we could select it manuall also,

146
00:07:20,160 --> 00:07:23,140
by its class name, but let's just suppose

147
00:07:23,140 --> 00:07:26,670
that there are many navigations on this page.

148
00:07:26,670 --> 00:07:30,420
And so, again, to make the solution really robust,

149
00:07:30,420 --> 00:07:34,530
it's best to simply move up to the closest parent,

150
00:07:34,530 --> 00:07:36,200
in this case, the navigation.,

151
00:07:36,200 --> 00:07:40,303
and then from there, we simply search for an image.

152
00:07:41,720 --> 00:07:43,550
All right?

153
00:07:43,550 --> 00:07:46,430
And so this then will work not only on this navigation,

154
00:07:46,430 --> 00:07:48,253
but it would work also on others.

155
00:07:49,710 --> 00:07:52,860
So this selector here is simply for any image

156
00:07:52,860 --> 00:07:55,140
which has the image tag, okay?

157
00:07:55,140 --> 00:07:56,890
All right.

158
00:07:56,890 --> 00:07:59,320
So, we have all our elements selected,

159
00:07:59,320 --> 00:08:02,020
now we just need to change the opacity,

160
00:08:02,020 --> 00:08:04,923
basically off the siblings, of the selected link.

161
00:08:06,450 --> 00:08:08,430
So, siblings.forEach,

162
00:08:13,700 --> 00:08:17,260
and now we actually need to do

163
00:08:17,260 --> 00:08:19,350
that comparison that we did before.

164
00:08:19,350 --> 00:08:23,370
So checking if the current element is not the link itself.

165
00:08:23,370 --> 00:08:26,010
Because of course, this sibling here,

166
00:08:26,010 --> 00:08:28,140
so these siblings, they will contain

167
00:08:28,140 --> 00:08:30,450
or initial link as well.

168
00:08:30,450 --> 00:08:31,970
Okay?

169
00:08:31,970 --> 00:08:34,010
So it needs to be different from link.

170
00:08:34,010 --> 00:08:38,120
And actually, here, we need a querySelectorAll, right?

171
00:08:38,120 --> 00:08:41,343
We want all the links, not just the first occurrence.

172
00:08:43,360 --> 00:08:45,130
Okay?

173
00:08:45,130 --> 00:08:48,650
But then for all the others that are not the original link,

174
00:08:48,650 --> 00:08:51,063
we want to change the opacity to 0.5.

175
00:08:52,620 --> 00:08:55,613
And indeed, we want to do the same with the logo.

176
00:09:00,450 --> 00:09:01,913
So logo.style.

177
00:09:03,420 --> 00:09:05,783
And let's see what we have already.

178
00:09:07,390 --> 00:09:10,340
And you see that it works, right?

179
00:09:10,340 --> 00:09:11,213
Beautiful.

180
00:09:12,180 --> 00:09:15,670
Now, the thing is that, of course, it doesn't go back.

181
00:09:15,670 --> 00:09:17,920
So once we have it at 0.5,

182
00:09:17,920 --> 00:09:21,950
it will not automatically go back to the capacity of one,

183
00:09:21,950 --> 00:09:23,513
which is the original one.

184
00:09:24,690 --> 00:09:26,040
You see?

185
00:09:26,040 --> 00:09:29,430
So when I hover this, all the others becomes 0.5,

186
00:09:29,430 --> 00:09:31,010
but as I move out,

187
00:09:31,010 --> 00:09:34,640
then everything remains the same, okay?

188
00:09:34,640 --> 00:09:37,640
And so that's why we have this mouseout event,

189
00:09:37,640 --> 00:09:40,203
to basically undo what we did here.

190
00:09:41,380 --> 00:09:43,283
So let's take all of this,

191
00:09:44,680 --> 00:09:45,570
paste it here

192
00:09:47,060 --> 00:09:50,733
and change this to one, all right?

193
00:09:51,830 --> 00:09:53,793
And so, let's see what happens now.

194
00:09:54,670 --> 00:09:57,850
And, yeah, everything goes back to one.

195
00:09:57,850 --> 00:09:59,853
And so this actually works.

196
00:10:01,480 --> 00:10:03,560
Now, of course, it doesn't work with the logo,

197
00:10:03,560 --> 00:10:06,250
because this entire effect only works

198
00:10:06,250 --> 00:10:11,250
if the target contains the nav_link class, right?

199
00:10:11,670 --> 00:10:13,630
But that wasn't the point anyway.

200
00:10:13,630 --> 00:10:16,770
We just wanted this to work on any of the links.

201
00:10:16,770 --> 00:10:18,400
And notice that this button here

202
00:10:18,400 --> 00:10:20,620
is actually also a link element.

203
00:10:20,620 --> 00:10:25,480
And so it also works on that one, all right?

204
00:10:25,480 --> 00:10:28,740
So our effect here is actually working already.

205
00:10:28,740 --> 00:10:32,010
But this is, of course, very repetitive.

206
00:10:32,010 --> 00:10:34,630
So the code here is always the same,

207
00:10:34,630 --> 00:10:36,410
and so we need to make our code

208
00:10:36,410 --> 00:10:39,330
a little bit more dry here, of course.

209
00:10:39,330 --> 00:10:42,250
So let's refactor this code.

210
00:10:42,250 --> 00:10:47,200
And usually, refactoring works by creating a new function.

211
00:10:47,200 --> 00:10:48,500
And so let's do that here.

212
00:10:55,950 --> 00:10:59,760
Our function, and we will need some arguments here,

213
00:10:59,760 --> 00:11:02,210
but more about that later.

214
00:11:02,210 --> 00:11:03,940
So, what we need to do now

215
00:11:03,940 --> 00:11:07,680
is to compare these two pieces of code

216
00:11:07,680 --> 00:11:10,830
that we're trying to refactor and then figure out

217
00:11:10,830 --> 00:11:13,570
what is the same and what is different.

218
00:11:13,570 --> 00:11:16,000
So, in this case, that's pretty simple.

219
00:11:16,000 --> 00:11:20,340
So all the changes is that here, we have the opacity 0.5,

220
00:11:20,340 --> 00:11:23,470
and here we have the opacity of one.

221
00:11:23,470 --> 00:11:26,150
And so, we can simply take this code

222
00:11:26,150 --> 00:11:30,900
and create an argument or a parameter for that opacity.

223
00:11:30,900 --> 00:11:33,783
And we can then pass that opacity into the function.

224
00:11:35,580 --> 00:11:36,413
All right?

225
00:11:39,000 --> 00:11:42,310
So, of course, we also need the event here.

226
00:11:42,310 --> 00:11:43,960
So that's gonna be the first one,

227
00:11:44,950 --> 00:11:47,140
and then we need the opacity.

228
00:11:47,140 --> 00:11:50,693
And so here, we simply replace that by opacity.

229
00:11:53,040 --> 00:11:55,210
Okay, and select this.

230
00:11:55,210 --> 00:11:58,123
We refactored our code very nicely here.

231
00:11:59,300 --> 00:12:03,133
But now, how do we actually use this function here?

232
00:12:04,110 --> 00:12:06,150
So usually, when we have the event handler

233
00:12:06,150 --> 00:12:07,780
as a separate function,

234
00:12:07,780 --> 00:12:10,710
all we do here is to pass in that function

235
00:12:10,710 --> 00:12:14,840
and then it's going to work just like this, right?

236
00:12:14,840 --> 00:12:17,220
So we have done this many times

237
00:12:17,220 --> 00:12:19,950
throughout this course, right?

238
00:12:19,950 --> 00:12:22,610
But now, the problem is that we actually want

239
00:12:22,610 --> 00:12:26,820
to pass in values into this function, right?

240
00:12:26,820 --> 00:12:28,850
So we need to tell this function to use

241
00:12:28,850 --> 00:12:32,270
the opacity of 0.5 in this case,

242
00:12:32,270 --> 00:12:33,750
and have one in this case.

243
00:12:33,750 --> 00:12:35,870
Now, right?

244
00:12:35,870 --> 00:12:39,290
Also, we need a way of passing this event.

245
00:12:39,290 --> 00:12:41,563
So right now, none of this would work.

246
00:12:42,610 --> 00:12:43,963
So let me show that to you.

247
00:12:47,260 --> 00:12:49,370
So I'm not clicking, of course,

248
00:12:49,370 --> 00:12:53,453
but you see, it would not really work, okay?

249
00:12:54,860 --> 00:12:59,140
So, maybe you would think that we could do this.

250
00:12:59,140 --> 00:13:02,517
So like, maybe passing an event here,

251
00:13:02,517 --> 00:13:06,980
and then 0.5, which is the opacity that we want.

252
00:13:06,980 --> 00:13:09,690
But this, of course, is not going to work.

253
00:13:09,690 --> 00:13:13,490
So the first problem is that e is of course, not defined.

254
00:13:13,490 --> 00:13:15,510
But the main problem really here

255
00:13:15,510 --> 00:13:20,350
is that addEventListener here expects a function.

256
00:13:20,350 --> 00:13:22,270
So we need to pass a function.

257
00:13:22,270 --> 00:13:24,040
But if we call the function,

258
00:13:24,040 --> 00:13:27,170
then all of this here will become some other value.

259
00:13:27,170 --> 00:13:29,030
In this case, that's undefined,

260
00:13:29,030 --> 00:13:30,940
because we don't return anything

261
00:13:30,940 --> 00:13:33,950
from this function, all right?

262
00:13:33,950 --> 00:13:36,573
And so this is simply not gonna work.

263
00:13:37,610 --> 00:13:39,420
So we talked about this many times,

264
00:13:39,420 --> 00:13:41,430
but it's always good to remember

265
00:13:41,430 --> 00:13:45,320
that JavaScript indeed expects here a function,

266
00:13:45,320 --> 00:13:47,930
and not just some other regular value

267
00:13:47,930 --> 00:13:51,830
which would be the result of calling the function like this.

268
00:13:51,830 --> 00:13:53,710
Now, the solution to this problem

269
00:13:53,710 --> 00:13:57,640
would be to still have a callback function here,

270
00:13:57,640 --> 00:14:01,780
like a regular one, which JavaScript will then call for us

271
00:14:01,780 --> 00:14:03,690
whenever the event happens.

272
00:14:03,690 --> 00:14:07,220
And then in here, we could then actually call

273
00:14:07,220 --> 00:14:11,350
this function with the event, which is this one,

274
00:14:11,350 --> 00:14:13,540
and then our capacity.

275
00:14:13,540 --> 00:14:14,373
So, 0.5.

276
00:14:15,640 --> 00:14:16,740
And so this works,

277
00:14:16,740 --> 00:14:20,520
because here we are basically calling the function manually.

278
00:14:20,520 --> 00:14:22,610
So this will only be executed

279
00:14:22,610 --> 00:14:27,260
as soon as JavaScript executes this function value.

280
00:14:27,260 --> 00:14:29,060
And so here we are back to working,

281
00:14:29,060 --> 00:14:32,240
because here we are back to passing

282
00:14:32,240 --> 00:14:33,863
in a real function, okay?

283
00:14:34,740 --> 00:14:37,453
And then let's, right away, do the same here.

284
00:14:40,700 --> 00:14:45,700
Set it to one, and now it should be working again.

285
00:14:45,830 --> 00:14:47,013
And it does, indeed.

286
00:14:48,510 --> 00:14:51,710
Okay, so that is the second version

287
00:14:51,710 --> 00:14:56,700
of our code working, but we can actually do even better

288
00:14:56,700 --> 00:14:59,260
and remove these anonymous callbacks

289
00:15:00,130 --> 00:15:01,740
functions here all together.

290
00:15:01,740 --> 00:15:05,030
So this looks a little bit ugly, right?

291
00:15:05,030 --> 00:15:06,950
Like having just this one function

292
00:15:06,950 --> 00:15:09,940
which in turn will call another function.

293
00:15:09,940 --> 00:15:12,910
And so as I just said, we can do even better,

294
00:15:12,910 --> 00:15:15,400
and that is by using the bind method

295
00:15:15,400 --> 00:15:17,760
that we already studied before.

296
00:15:17,760 --> 00:15:20,240
So, remember that the bind method

297
00:15:20,240 --> 00:15:23,750
creates a copy of the function that it's called on,

298
00:15:23,750 --> 00:15:27,310
and it will set the disc keyword in this function call

299
00:15:27,310 --> 00:15:31,750
to whatever value that we pass into bind, okay?

300
00:15:31,750 --> 00:15:34,440
So let me just do that here in practice,

301
00:15:34,440 --> 00:15:38,553
so handleHover, and then .bind, okay?

302
00:15:40,290 --> 00:15:44,430
And I think we actually already did an example like this.

303
00:15:44,430 --> 00:15:46,543
So using bind in an event handler.

304
00:15:48,350 --> 00:15:51,970
And so, let's set 0.5 here just as before.

305
00:15:51,970 --> 00:15:53,280
Now, right?

306
00:15:53,280 --> 00:15:54,863
And now let's do the same here.

307
00:15:57,000 --> 00:16:02,000
So handleHover.bind and then one.

308
00:16:02,450 --> 00:16:03,880
And so this is gonna work

309
00:16:03,880 --> 00:16:07,340
because this is gonna be also a function,

310
00:16:07,340 --> 00:16:10,960
because bind, remember, returns a new function.

311
00:16:10,960 --> 00:16:12,200
Now in this function,

312
00:16:12,200 --> 00:16:15,390
this variable will now be set to this value.

313
00:16:15,390 --> 00:16:18,093
So, to one here, and to 0.5.

314
00:16:18,940 --> 00:16:20,403
And so let's check that out.

315
00:16:22,780 --> 00:16:26,600
So to this variable, okay?

316
00:16:26,600 --> 00:16:28,350
And so now you see indeed,

317
00:16:28,350 --> 00:16:31,163
that it is either one, or 0.5.

318
00:16:33,650 --> 00:16:36,070
Now, right?

319
00:16:36,070 --> 00:16:37,630
Now, remember that usually,

320
00:16:37,630 --> 00:16:41,223
this keyword is equal to current target.

321
00:16:43,240 --> 00:16:45,263
So let's also check that, okay?

322
00:16:48,640 --> 00:16:51,753
But current target will, of course, remain unaltered.

323
00:16:52,650 --> 00:16:55,260
So you see that it is still, of course,

324
00:16:55,260 --> 00:16:58,150
the navigation element, okay.

325
00:16:58,150 --> 00:17:00,980
So by default, this keyword is the same

326
00:17:00,980 --> 00:17:02,910
as the current target,

327
00:17:02,910 --> 00:17:06,890
so the element on which the event listener is attached to,

328
00:17:06,890 --> 00:17:09,710
but when we then set this keyword manually,

329
00:17:09,710 --> 00:17:13,590
of course, it becomes whatever we set it to.

330
00:17:13,590 --> 00:17:15,260
So now, just like before,

331
00:17:15,260 --> 00:17:17,040
we can use this keyword

332
00:17:17,960 --> 00:17:22,640
and use that here, all right?

333
00:17:22,640 --> 00:17:26,520
Because this keyword is now our opacity.

334
00:17:26,520 --> 00:17:29,300
And so essentially, we use the bind method here

335
00:17:29,300 --> 00:17:33,090
to pass an argument into a handler function.

336
00:17:33,090 --> 00:17:34,640
So let me just write that here.

337
00:17:37,720 --> 00:17:42,380
Passing an argument into a handler.

338
00:17:42,380 --> 00:17:44,690
And I'm using quotes here, because of course,

339
00:17:44,690 --> 00:17:46,920
this is not really an argument.

340
00:17:46,920 --> 00:17:49,710
So in fact, we don't even need this here.

341
00:17:49,710 --> 00:17:53,620
And in fact, it is impossible to pass another argument

342
00:17:53,620 --> 00:17:55,810
into an eventHandler function.

343
00:17:55,810 --> 00:17:58,070
So any handler function like this one

344
00:17:58,070 --> 00:18:01,810
can only ever have one real argument.

345
00:18:01,810 --> 00:18:06,240
And so, in this case, can only ever have one real parameter,

346
00:18:06,240 --> 00:18:08,100
and that is the event.

347
00:18:08,100 --> 00:18:10,450
But if we want to pass additional values

348
00:18:10,450 --> 00:18:12,080
into the handler function,

349
00:18:12,080 --> 00:18:13,880
then we need to use the disk keywords,

350
00:18:13,880 --> 00:18:15,760
like we just did here.

351
00:18:15,760 --> 00:18:17,990
And if we wanted multiple values,

352
00:18:17,990 --> 00:18:20,380
then we could of course, pass in here

353
00:18:20,380 --> 00:18:24,640
like an array or an object instead of just one value.

354
00:18:24,640 --> 00:18:27,700
So this is kind of a workaround into the fact

355
00:18:27,700 --> 00:18:31,230
that the handler function can only take one argument.

356
00:18:31,230 --> 00:18:35,370
So, it's really nice effect and as I said in the beginning,

357
00:18:35,370 --> 00:18:38,160
it also taught us how we can pass arguments,

358
00:18:38,160 --> 00:18:40,673
essentially, into handler functions.

