From d2b55dbad6c75fb90370df5db3e6eae69d198abf Mon Sep 17 00:00:00 2001 From: Dash <389399428@qq.com> Date: Sun, 29 Oct 2017 19:27:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86day27=E7=9A=84?= =?UTF-8?q?=E6=8C=91=E6=88=98=E5=B9=B6=E6=9B=B4=E6=96=B0=E4=BA=86=E4=B8=BB?= =?UTF-8?q?=E9=A1=B5readme.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 27 - Click and Drag/README.md | 66 +++++++++++++++ 27 - Click and Drag/effect.png | Bin 0 -> 52464 bytes .../index-finished-Dashrun.html | 68 ++++++++++++++++ 27 - Click and Drag/index-start.html | 41 ++++++++++ 27 - Click and Drag/style.css | 75 ++++++++++++++++++ README.md | 6 +- 6 files changed, 253 insertions(+), 3 deletions(-) create mode 100644 27 - Click and Drag/README.md create mode 100644 27 - Click and Drag/effect.png create mode 100644 27 - Click and Drag/index-finished-Dashrun.html create mode 100644 27 - Click and Drag/index-start.html create mode 100644 27 - Click and Drag/style.css diff --git a/27 - Click and Drag/README.md b/27 - Click and Drag/README.md new file mode 100644 index 0000000..b33fb5b --- /dev/null +++ b/27 - Click and Drag/README.md @@ -0,0 +1,66 @@ +# 27 Click And Drag 中文指南 + +> 本篇作者:©[大史快跑Dashrun](https://github.com/dashrun)——Chinasoft Frontend Developer + +> 简介:[JavaScript30](https://javascript30.com) 是 [Wes Bos](https://github.com/wesbos) 推出的一个 30 天挑战。项目免费提供了 30 个视频教程、30 个挑战的起始文档和 30 个挑战解决方案源代码。目的是帮助人们用纯 JavaScript 来写东西,不借助框架和库,也不使用编译器和引用。现在你看到的是这系列指南的第 27 篇。完整指南在 [GitHub](https://github.com/soyaine/JavaScript30),喜欢请 Star 哦♪(^∇^*) + +> 创建时间:2017-10-24 +最后更新:2017-10-229 + +## 挑战任务 +初始文档`index-start.html`中提供了一组条幅,本次的编程任务需要实现的效果是当鼠标拖动画面移动时,条幅同步向水平方向移动。 + +## 实现效果 +![结果展示](https://github.com/dashrun/vanilla-javascript-30/blob/master/27%20-%20Click%20and%20Drag/effect.png) + +## 编程思路 +在最外层的items元素上监听鼠标的按下,移动,弹起事件并编写相应的回调函数即可,在对应的回调函数中获取到鼠标横向滑动的距离,将该距离值翻倍后赋值予条幅的scrollLeft属性可调整元素在水平方向上滚动的位置。 +>style.css中已为条幅编写好active类,当鼠标移动时只需要将此类添加给对应的类即可看到很棒的CSS特效。 + +## 过程指南 +1.在条幅容器上监听鼠标按下事件 +```js + const slider = document.querySelector(".items"); + let isMouseDown = false;//记录鼠标是否按下 + let startX;//按下时位置的x坐标 + let scrollLeft;//记录视口相对于items最左侧已经滚过的距离 + + slider.addEventListener('mousedown',(e) =>{ + isMouseDown = true; + slider.classList.add('active'); + startX = e.pageX - slider.offsetLeft;//记录鼠标按下时的相对位置 + scrollLeft = slider.scrollLeft; + }); + ``` +2.在条幅容器上监听鼠标弹起事件 +```js + slider.addEventListener('mouseup',(e) =>{ + isMouseDown = false; + slider.classList.remove('active'); + }); +``` +3.在条幅容器上监听鼠标移动事件 +```js + slider.addEventListener('mousemove',(e) =>{ + if (!isMouseDown) { + return; + }//若鼠标未按下,则不进行操作 + e.preventDefault(); + const x = e.pageX - slider.offsetLeft; + const walk = (x - startX) * 3; //将鼠标移动距离放大后作为条幅的移动距离 + slider.scrollLeft = scrollLeft - walk; + }); + +``` + +## 延伸思考 +本例中的js部分并不复杂,令人感兴趣的是`style.css`样式部分使用了较多CSS3高级用法,使得元素在滚动过程中呈现出透视效果,笔者在此对CSS的实现方法作以简单说明,感兴趣的小伙伴可以自行查找资料深入学习。 +除去颜色部分,`active`类中的动态效果其实只用到了3行代码: +```css +/*透视距离,即视点位于垂直距离屏幕的距离,数值越大,离的越远,变形效果看起来越微小*/ +.items{perspective: 500px;} +/*所有奇数序号的子元素沿X轴放大,并绕Y轴旋转(相当于人绕柱子转)*/ +.item:nth-child(even) { transform: scaleX(1.31) rotateY(40deg); } +/*所有奇数序号的子元素沿X轴放大,并绕Y轴逆向旋转(相当于人绕柱子反转一定角度)*/ +.item:nth-child(odd) { transform: scaleX(1.31) rotateY(-40deg); } +``` diff --git a/27 - Click and Drag/effect.png b/27 - Click and Drag/effect.png new file mode 100644 index 0000000000000000000000000000000000000000..23ed6cfccf4524ef4abbc49060b6438bae80d95d GIT binary patch literal 52464 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 + + + + Click and Drag + + + +
+
01
+
02
+
03
+
04
+
05
+
06
+
07
+
08
+
09
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
+ + + + + \ No newline at end of file diff --git a/27 - Click and Drag/index-start.html b/27 - Click and Drag/index-start.html new file mode 100644 index 0000000..b860931 --- /dev/null +++ b/27 - Click and Drag/index-start.html @@ -0,0 +1,41 @@ + + + + + Click and Drag + + + +
+
01
+
02
+
03
+
04
+
05
+
06
+
07
+
08
+
09
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
+ + + + + diff --git a/27 - Click and Drag/style.css b/27 - Click and Drag/style.css new file mode 100644 index 0000000..348a71b --- /dev/null +++ b/27 - Click and Drag/style.css @@ -0,0 +1,75 @@ +html { + box-sizing: border-box; + background-size: cover; +} + +*, *:before, *:after { + box-sizing: inherit; +} + +body { + min-height: 100vh; + display: flex; + justify-content: center; + align-items: center; + font-family: sans-serif; + font-size: 20px; + margin: 0; +} + +.items { + height:800px; + padding: 100px; + width:100%; + border:1px solid white; + box-shadow: 0 0 10px 7px rgba(0, 0, 0, 0.09); + overflow-x: scroll; + overflow-y: hidden; + white-space: nowrap; + user-select: none; + cursor: pointer; + transition: all 0.2s; + transform: scale(0.98); + position: relative; + background: rgba(255,255,255,0.1); + font-size: 0; + perspective: 500px; +} + +.items.active { + background: rgba(255,255,255,0.3); + cursor: grabbing; + cursor: -webkit-grabbing; + transform: scale(1); +} + +.item { + width:200px; + height: calc(100% - 40px); + display: inline-flex; + align-items: center; + justify-content: center; + font-size: 80px; + font-weight: 100; + color:rgba(0,0,0,0.15); + box-shadow: inset 0 0 0 10px rgba(0,0,0,0.15); +} + +.item:nth-child(9n+1) { background: dodgerblue;} +.item:nth-child(9n+2) { background: goldenrod;} +.item:nth-child(9n+3) { background: paleturquoise;} +.item:nth-child(9n+4) { background: gold;} +.item:nth-child(9n+5) { background: cadetblue;} +.item:nth-child(9n+6) { background: tomato;} +.item:nth-child(9n+7) { background: lightcoral;} +.item:nth-child(9n+8) { background: darkslateblue;} +.item:nth-child(9n+9) { background: rebeccapurple;} + +.item:nth-child(even) { transform: scaleX(1.31) rotateY(40deg); } +.item:nth-child(odd) { transform: scaleX(1.31) rotateY(-40deg); } + +.wrap { + width: auto; + border:2px solid green; + height: 100%; +} diff --git a/README.md b/README.md index 7ab5ef3..8575ede 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # JavaScript30 - 一个月纯 JS 挑战中文指南 创建日期:2016-12-20 -最后更新:2017-09-16 +最后更新:2017-10-29 > Repo by: [缉熙Soyaine](https://github.com/soyaine) > [JavaScript30](https://javascript30.com) 教程作者:[Wes Bos](https://github.com/wesbos) @@ -65,7 +65,7 @@ No | Guide | Demo 23 | [Speech Synthesis指南](https://github.com/soyaine/JavaScript30/blob/master/23%20-%20Speech%20Synthesis/README.md) | [Speech Synthesis效果](https://github.com/soyaine/JavaScript30/blob/master/23%20-%20Speech%20Synthesis/index-finished-Dashrun.html) 24 | [Sticky Nav指南](https://github.com/soyaine/JavaScript30/blob/master/24%20-%20Sticky%20Nav/README.md) | [Sticky Nav效果](https://github.com/soyaine/JavaScript30/blob/master/24%20-%20Sticky%20Nav/index-finished-Dashrun.html) 25 | [Event Related指南](https://github.com/soyaine/JavaScript30/blob/master/25%20-%20Event%20Related/README.md) | [Event Related效果](https://github.com/soyaine/JavaScript30/blob/master/25%20-%20Event%20Related/index-finished-Dashrun.html) -26 | Stripe Follow Along Nav | - +26 | [Stripe Follow Along Nav指南](https://github.com/soyaine/JavaScript30/blob/master/26%20-%20Stripe%20Follow%20Along%20Nav/README.md) | [Strip Follow Along Nav效果](https://github.com/soyaine/JavaScript30/blob/master/26%20-%20Stripe%20Follow%20Along%20Nav/index-finished-Dashrun.html) 27 | Click and Drag | - 28 | Video Speed Controller | - 29 | Countdown Timer | - @@ -80,7 +80,7 @@ Name | Contribution [@DrakeXiang](https://github.com/DrakeXiang) | No.[11](https://github.com/soyaine/JavaScript30/tree/master/11%20-%20Custom%20Video%20Player) [@zzh466](http://github.com/zzh466) | Review [@Xing Liu](https://github.com/S1ngS1ng) | Review -[@大史快跑Dashrun](https://github.com/dashrun) | No.[16](https://github.com/soyaine/JavaScript30/tree/master/16%20-%20Mouse%20Move%20Shadow).[17](https://github.com/soyaine/JavaScript30/tree/master/17%20-%20Sort%20Without%20Articles).[18](https://github.com/soyaine/JavaScript30/tree/master/18%20-%20AddingUpTimesWithReduce).[19](https://github.com/soyaine/JavaScript30/blob/master/19%20-%20Webcam%20Fun).[20](https://github.com/soyaine/JavaScript30/tree/master/20%20-%20Speech%20Detection).[21](https://github.com/soyaine/JavaScript30/tree/master/21%20-%20Geolocation).[22](https://github.com/soyaine/JavaScript30/tree/master/22%20-%20Follow%20Along%20Link%20Highlighter).[23](https://github.com/soyaine/JavaScript30/tree/master/23%20-%20Speech%20Synthesis).[24](https://github.com/soyaine/JavaScript30/tree/master/24%20-%20Sticky%20Nav).[25](https://github.com/soyaine/JavaScript30/tree/master/25%20-%20Event%20Related) +[@大史快跑Dashrun](https://github.com/dashrun) | No.[16](https://github.com/soyaine/JavaScript30/tree/master/16%20-%20Mouse%20Move%20Shadow).[17](https://github.com/soyaine/JavaScript30/tree/master/17%20-%20Sort%20Without%20Articles).[18](https://github.com/soyaine/JavaScript30/tree/master/18%20-%20AddingUpTimesWithReduce).[19](https://github.com/soyaine/JavaScript30/blob/master/19%20-%20Webcam%20Fun).[20](https://github.com/soyaine/JavaScript30/tree/master/20%20-%20Speech%20Detection).[21](https://github.com/soyaine/JavaScript30/tree/master/21%20-%20Geolocation).[22](https://github.com/soyaine/JavaScript30/tree/master/22%20-%20Follow%20Along%20Link%20Highlighter).[23](https://github.com/soyaine/JavaScript30/tree/master/23%20-%20Speech%20Synthesis).[24](https://github.com/soyaine/JavaScript30/tree/master/24%20-%20Sticky%20Nav).[25](https://github.com/soyaine/JavaScript30/tree/master/25%20-%20Event%20Related).[26](https://github.com/soyaine/JavaScript30/tree/master/26%20-%20Strip%20Follow%20Along%20Nav) [@缉熙Soyaine](https://github.com/soyaine) | No.[1](https://github.com/soyaine/JavaScript30/tree/master/01%20-%20JavaScript%20Drum%20Kit).[2](https://github.com/soyaine/JavaScript30/tree/master/02%20-%20JS%20%2B%20CSS%20Clock).[3](https://github.com/soyaine/JavaScript30/tree/master/03%20-%20CSS%20%Variables).[4](https://github.com/soyaine/JavaScript30/tree/master/04%20-%20Array%20Cardio%20Day%201).[5](https://github.com/soyaine/JavaScript30/blob/master/05%20-%20Flex%20Panel%20Gallery).[6](https://github.com/soyaine/JavaScript30/blob/master/06%20-%20Type%20Ahead).[7](https://github.com/soyaine/JavaScript30/tree/master/07%20-%20Array%20Cardio%20Day%202).[8](https://github.com/soyaine/JavaScript30/tree/master/08%20-%20Fun%20with%20HTML5%20Canvas).[9](https://github.com/soyaine/JavaScript30/blob/master/09%20-%20Dev%20Tools%20Domination).[10](https://github.com/soyaine/JavaScript30/blob/master/10%20-%20Hold%20Shift%20and%20Check%20Checkboxes/README.md).[12](https://github.com/soyaine/JavaScript30/tree/master/12%20-%20Key%20Sequence%20Detection/README.md).[13](https://github.com/soyaine/JavaScript30/blob/master/13%20-%20Slide%20in%20on%20Scroll/README.md).[14](https://github.com/soyaine/JavaScript30/tree/master/14%20-%20JavaScript%20References%20VS%20Copying) ## JOIN US