Skip to content

Commit 0bce3ea

Browse files
committed
Project 27 complete
1 parent 11eb190 commit 0bce3ea

File tree

3 files changed

+62
-8
lines changed

3 files changed

+62
-8
lines changed

Diff for: 27 - Click and Drag/index-START.html

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
<!DOCTYPE html>
22
<html lang="en">
3+
34
<head>
45
<meta charset="UTF-8">
56
<title>Click and Drag</title>
67
<link rel="stylesheet" href="style.css">
78
</head>
9+
810
<body>
911
<div class="items">
1012
<div class="item item1">01</div>
@@ -34,8 +36,8 @@
3436
<div class="item item25">25</div>
3537
</div>
3638

37-
<script>
38-
</script>
39+
<script src="typescripts.js"></script>
40+
41+
</body>
3942

40-
</body>
41-
</html>
43+
</html>

Diff for: 27 - Click and Drag/typescripts.js

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
var slider = document.querySelector('.items');
2+
var isDown = false;
3+
var startX, scrollLeft;
4+
slider.addEventListener('mousedown', function (e) {
5+
isDown = true;
6+
slider.classList.add('active');
7+
startX = e.pageX - slider.offsetLeft;
8+
scrollLeft = slider.scrollLeft;
9+
});
10+
slider.addEventListener('mouseleave', function () {
11+
isDown = false;
12+
slider.classList.remove('active');
13+
});
14+
slider.addEventListener('mouseup', function () {
15+
isDown = false;
16+
slider.classList.remove('active');
17+
});
18+
slider.addEventListener('mousemove', function (e) {
19+
if (!isDown)
20+
return;
21+
e.preventDefault();
22+
var x = e.pageX - slider.offsetLeft;
23+
var walk = (x - startX) * 3;
24+
slider.scrollLeft = scrollLeft - walk;
25+
});

Diff for: 27 - Click and Drag/typescripts.ts

+31-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,37 @@
11
/**
22
* JavaScript30 by Wes Bos, https://javascript30.com/
33
* TypeScript implementation by Will Wager
4-
* Project:
5-
* Concepts:
6-
* Key takeaways:
7-
* Sidenotes:
4+
* Project: Click and Drag to Scroll
5+
* Concepts: Mouse events to set a div's horizontal scroll.
6+
* Key takeaways: Drag and drop event pattern; isDown (isDrawing) pattern;
7+
* Recalculate scroll from mousedown event.
8+
* Sidenotes: Drag and dropping an element can be done similarly.
89
* Compilation command:
910
* tsc --removeComments --strictNullChecks --noImplicitAny --target es5 typescripts.ts
1011
*/
12+
13+
const slider = document.querySelector('.items')! as HTMLDivElement;
14+
let isDown = false;
15+
let startX: number, scrollLeft: number;
16+
17+
slider.addEventListener('mousedown', (e: MouseEvent) => {
18+
isDown = true;
19+
slider.classList.add('active');
20+
startX = e.pageX - slider.offsetLeft;
21+
scrollLeft = slider.scrollLeft;
22+
});
23+
slider.addEventListener('mouseleave', () => {
24+
isDown = false;
25+
slider.classList.remove('active');
26+
});
27+
slider.addEventListener('mouseup', () => {
28+
isDown = false;
29+
slider.classList.remove('active');
30+
});
31+
slider.addEventListener('mousemove', (e) => {
32+
if (!isDown) return;
33+
e.preventDefault();
34+
const x = e.pageX - slider.offsetLeft;
35+
const walk = (x - startX) * 3;
36+
slider.scrollLeft = scrollLeft - walk;
37+
});

0 commit comments

Comments
 (0)