-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatom.xml
116 lines (95 loc) · 30.6 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>xinpureZhu</title>
<subtitle>测试这个博客</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="http://xinpure.com/"/>
<updated>2016-05-11T11:46:03.000Z</updated>
<id>http://xinpure.com/</id>
<author>
<name>xinpureZhu</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>Hello World</title>
<link href="http://xinpure.com/hello-world/"/>
<id>http://xinpure.com/hello-world/</id>
<published>2016-05-11T11:46:03.000Z</published>
<updated>2016-05-11T11:46:03.000Z</updated>
<content type="html"><p>Welcome to <a href="https://hexo.io/" target="_blank" rel="external">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/" target="_blank" rel="external">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href="https://hexo.io/docs/troubleshooting.html" target="_blank" rel="external">troubleshooting</a> or you can ask me on <a href="https://github.com/hexojs/hexo/issues" target="_blank" rel="external">GitHub</a>.</p>
<h2 id="Quick-Start"><a href="#Quick-Start" class="headerlink" title="Quick Start"></a>Quick Start</h2><h3 id="Create-a-new-post"><a href="#Create-a-new-post" class="headerlink" title="Create a new post"></a>Create a new post</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo new <span class="string">"My New Post"</span></span><br></pre></td></tr></table></figure>
<p>More info: <a href="https://hexo.io/docs/writing.html" target="_blank" rel="external">Writing</a></p>
<h3 id="Run-server"><a href="#Run-server" class="headerlink" title="Run server"></a>Run server</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo server</span><br></pre></td></tr></table></figure>
<p>More info: <a href="https://hexo.io/docs/server.html" target="_blank" rel="external">Server</a></p>
<h3 id="Generate-static-files"><a href="#Generate-static-files" class="headerlink" title="Generate static files"></a>Generate static files</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo generate</span><br></pre></td></tr></table></figure>
<p>More info: <a href="https://hexo.io/docs/generating.html" target="_blank" rel="external">Generating</a></p>
<h3 id="Deploy-to-remote-sites"><a href="#Deploy-to-remote-sites" class="headerlink" title="Deploy to remote sites"></a>Deploy to remote sites</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo deploy</span><br></pre></td></tr></table></figure>
<p>More info: <a href="https://hexo.io/docs/deployment.html" target="_blank" rel="external">Deployment</a></p>
</content>
<summary type="html">
<p>Welcome to <a href="https://hexo.io/" target="_blank" rel="external">Hexo</a>! This is your very first post. Check <a href="https://hexo.
</summary>
</entry>
<entry>
<title>My First Post</title>
<link href="http://xinpure.com/My-First-Post/"/>
<id>http://xinpure.com/My-First-Post/</id>
<published>2015-05-17T02:40:23.000Z</published>
<updated>2016-05-17T08:37:21.000Z</updated>
<content type="html"><blockquote>
<p>JS 原生事件并没有长按事件,但是我们可以利用一些原有的事件,来实现长按事件</p>
</blockquote>
<h2 id="任务需求"><a href="#任务需求" class="headerlink" title="任务需求"></a>任务需求</h2><p>最近在工作上遇到一个特殊的需求,就是需要实现长按来增加或者减少数值</p>
<p>这就类似于,购物车中的物品数量的加减按钮,单击按钮物品数量相应增加或者减少一个数量,利用长按来实现快速增加或者减少物品数量</p>
<p><img src="http://images2015.cnblogs.com/blog/708972/201605/708972-20160511110048015-1999018068.png" alt="JS如何利用定时器实现长按事件"></p>
<a id="more"></a>
<h2 id="思考方法"><a href="#思考方法" class="headerlink" title="思考方法"></a>思考方法</h2><p>在知道这个需求之后,开始还是比较茫然的</p>
<p>虽然在之前我也在一些购物 APP 里见到过这种长按的功能,但是在 JS 里似乎并没有长按事件</p>
<p>后来我就在想,怎么样利用现有的一些事件来实现这一功能呢?</p>
<p>这个时候我想到了 <code>mousedown</code> 和 <code>mouseup</code> 这两个事件</p>
<p>当时我就想,如果在 <code>mousedown</code> 事件触发的时候,利用 <code>setTimeout</code> 或者 <code>setInterval</code> 定时增加或者减少数值</p>
<p>然后在 <code>mouseup</code> 事件触发的时候,利用 <code>clearTimeout</code> 或者 <code>clearInterval</code> 清除定时器</p>
<p>这样是不是就能实现这样的需求呢?</p>
<h2 id="实践想法"><a href="#实践想法" class="headerlink" title="实践想法"></a>实践想法</h2><p>既然有了想法,就要付诸实践</p>
<p>我写了个例子来测试这个想法,结果却并没有想得这么简单</p>
<p>当我通过鼠标按住按钮之后,数值是不断的增加或者减少,但是即使我松开鼠标,数值却并没有停止,而是依然为不断的增加或者减少</p>
<p>这时我就疑惑了,理论上说,在 <code>mouseup</code> 事件触发之后,定时器应该是已经被清除的,为何没有清除呢?</p>
<p>带着疑惑,我开始了 <code>Google</code></p>
<p><code>Google</code> 将我指引到了 <a href="https://jquerymobile.com/" target="_blank" rel="external">Jquery Mobile</a> 库</p>
<p>这个类库实现了一个 <code>taphold</code> 事件,就是我想要的长按事件</p>
<p>既然已经有了类似的实现,我就在想,是不是我哪里想错了?</p>
<p>然后我就查看了 <code>Jquery Mobile</code> 关于 <code>taphold</code> 的源码</p>
<p>看完源码后,我惊喜的发现,原来他也是利用 <code>setTimeout</code> 来实现的这一事件,证明我的想法是对的!</p>
<p>带着惊喜,我开始分析我思考的不足的地方。</p>
<p>最后我发现,原来是我没有做好对事件的监听</p>
<p>我只是单纯的绑定了 <code>mousedown</code> 和 <code>mouseup</code> 两个事件,这是我在 JS 事件处理上的不足</p>
<h2 id="完善实现"><a href="#完善实现" class="headerlink" title="完善实现"></a>完善实现</h2><p>知道了问题之后,我就开始修改之前写的例子</p>
<p>采用 <code>Jquery Mobile</code> 库对事件的处理方式,来实现这个长按的功能,并且也根据自身的需求进行修改</p>
<p>在修改的过程中,我发现了一个问题,就是当我长按一个按钮的时候,如果我移动鼠标,长按事件也会一直持续下去,并且放开鼠标也不会停止</p>
<p>在翻看 JS 事件的之后,我找到了 <code>mouseleave</code> 这个事件,就是当鼠标离开按钮之后,会触发这个事件,加上之后,问题也得己解决。</p>
<p>为了兼容移动设备,我加上了对 <code>touchstart</code> 、<code>touchend</code> 、<code>touchcencel</code> 几个事件的监听</p>
<p>本来也想加上 <code>touchleave</code> 事件,来处理触摸时用户移动到按钮外的情况,但是似乎这个事件已经被废弃掉了:</p>
<blockquote>
<p>This event was a proposal in an early version of the specification and has not been implemented. Do not rely on it. —— <a href="https://developer.mozilla.org/en-US/docs/Web/Events/touchleave" target="_blank" rel="external">MDN</a></p>
</blockquote>
<p>也尝试了使用 <code>touchmove</code> 事件来代替,但是似乎会影响用户体验</p>
<p>因为添加了这个事件之后,就算是在按钮上触摸移动,也会触发 <code>touchmove</code> 事件</p>
<p>所以如果是用户误操作的话,也会中止长按操作。</p>
<p>不过,<code>touch</code> 事件并不会像 <code>mouse</code> 事件一样,触摸移动到按钮外之后再放开手指,事件还是可以正常处理,并不会影响使用</p>
<h2 id="最终代码"><a href="#最终代码" class="headerlink" title="最终代码"></a>最终代码</h2><h3 id="JS-Code"><a href="#JS-Code" class="headerlink" title="JS Code"></a>JS Code</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br></pre></td><td class="code"><pre><span class="line">var tapParams = &#123;</span><br><span class="line"> timer: &#123;&#125;,</span><br><span class="line"> element: &#123;&#125;,</span><br><span class="line"> tapStartTime: 0,</span><br><span class="line"> type: &apos;increment&apos;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">function clearTapTimer() &#123;</span><br><span class="line"> clearTimeout(tapParams.timer);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">function clearTapHandlers() &#123;</span><br><span class="line"> clearTapTimer();</span><br><span class="line"></span><br><span class="line"> $(tapParams.element).unbind(&apos;mouseup&apos;, clearTapTimer)</span><br><span class="line"> .unbind(&apos;mouseleave&apos;, clearTapHandlers);</span><br><span class="line"></span><br><span class="line"> //移动设备</span><br><span class="line"> $(tapParams.element).unbind(&apos;touchend&apos;, clearTapTimer)</span><br><span class="line"> .unbind(&apos;touchcencel&apos;, clearTapHandlers);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">function tapEvent(aEvent, aType) &#123;</span><br><span class="line"></span><br><span class="line"> //阻止默认事件并解除冒泡</span><br><span class="line"> aEvent.preventDefault();</span><br><span class="line"> aEvent.stopPropagation();</span><br><span class="line"></span><br><span class="line"> tapParams = &#123;</span><br><span class="line"> element: aEvent.target,</span><br><span class="line"> startTime: new Date().getTime() / 1000,</span><br><span class="line"> type: aType</span><br><span class="line"> &#125;;</span><br><span class="line"></span><br><span class="line"> $(tapParams.element).bind(&apos;mouseup&apos;, clearTapTimer)</span><br><span class="line"> .bind(&apos;mouseleave&apos;, clearTapHandlers);</span><br><span class="line"></span><br><span class="line"> //移动设备</span><br><span class="line"> $(tapParams.element).bind(&apos;touchend&apos;, clearTapTimer)</span><br><span class="line"> .bind(&apos;touchcencel&apos;, clearTapHandlers);</span><br><span class="line"></span><br><span class="line"> changeNumber();</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">function changeNumber() &#123;</span><br><span class="line"></span><br><span class="line"> var currentDate = new Date().getTime() / 1000;</span><br><span class="line"> var intervalTime = currentDate - tapParams.startTime;</span><br><span class="line"></span><br><span class="line"> //根据长按的时间改变数值变化幅度</span><br><span class="line"> if (intervalTime &lt; 1) &#123;</span><br><span class="line"> intervalTime = 0.5;</span><br><span class="line"> &#125;</span><br><span class="line"> var secondCount = intervalTime * 10;</span><br><span class="line"> if (intervalTime == 3) &#123;</span><br><span class="line"> secondCount = 50;</span><br><span class="line"> &#125;</span><br><span class="line"> if (intervalTime &gt;= 4) &#123;</span><br><span class="line"> secondCount = 100;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> var numberElement = $(&apos;.number&apos;);</span><br><span class="line"> var currentNumber = parseInt(numberElement.val());</span><br><span class="line"></span><br><span class="line"> if (tapParams.type == &apos;increment&apos;) &#123;</span><br><span class="line"> currentNumber += 1;</span><br><span class="line"> &#125; else if (tapParams.type == &apos;decrement&apos;) &#123;</span><br><span class="line"> currentNumber -= 1;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> numberElement.val(currentNumber &lt;= 0 ? 1 : currentNumber);</span><br><span class="line"></span><br><span class="line"> tapParams.timer = setTimeout(&apos;changeNumber()&apos;, 1000 / secondCount);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<h3 id="HTML-Code"><a href="#HTML-Code" class="headerlink" title="HTML Code"></a>HTML Code</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&lt;div class=&quot;container&quot;&gt;</span><br><span class="line"> &lt;div class=&quot;section&quot;&gt;</span><br><span class="line"> &lt;div class=&quot;decrement&quot; onmousedown=&quot;tapEvent(event, &apos;decrement&apos;)&quot; ontouchstart=&quot;tapEvent(event, &apos;decrement&apos;)&quot;&gt;-&lt;/div&gt;</span><br><span class="line"> &lt;input class=&quot;number&quot; value=&quot;1&quot;&gt;</span><br><span class="line"> &lt;div class=&quot;increment&quot; onmousedown=&quot;tapEvent(event, &apos;increment&apos;)&quot; ontouchstart=&quot;tapEvent(event, &apos;increment&apos;)&quot;&gt;+&lt;/div&gt;</span><br><span class="line"> &lt;/div&gt;</span><br><span class="line">&lt;/div&gt;</span><br></pre></td></tr></table></figure>
<h3 id="CSS-Code"><a href="#CSS-Code" class="headerlink" title="CSS Code"></a>CSS Code</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><span class="line">.section &#123;</span><br><span class="line"> display: -webkit-flex;</span><br><span class="line"> display: flex;</span><br><span class="line"> -webkit-justify-content: center;</span><br><span class="line"> justify-content: center;</span><br><span class="line"> -webkit-flex-flow: row nowrap;</span><br><span class="line"> flex-flow: row nowrap;</span><br><span class="line"> -webkit-align-items: center;</span><br><span class="line"> align-items: center;</span><br><span class="line"> height: 30px;</span><br><span class="line"> width: 130px;</span><br><span class="line"> font-size: 16px;</span><br><span class="line">&#125;</span><br><span class="line">.number &#123;</span><br><span class="line"> -webkit-flex: 1;</span><br><span class="line"> flex: 1;</span><br><span class="line"> width: 30px;</span><br><span class="line"> height: 30px;</span><br><span class="line"> border: 1px solid #000;</span><br><span class="line"> display: inline-block;</span><br><span class="line"> border-radius: 5px;</span><br><span class="line"> margin: 0 10px;</span><br><span class="line"> text-align: center;</span><br><span class="line">&#125;</span><br><span class="line">.decrement, .increment &#123;</span><br><span class="line"> width: 30px;</span><br><span class="line"> height: 30px;</span><br><span class="line"> border: 1px solid #000;</span><br><span class="line"> display: inline-block;</span><br><span class="line"> border-radius: 5px;</span><br><span class="line"> text-align: center;</span><br><span class="line"> line-height: 28px;</span><br><span class="line"> cursor: pointer;</span><br><span class="line"> font-size: 20px;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<h2 id="效果展示"><a href="#效果展示" class="headerlink" title="效果展示"></a>效果展示</h2><p><img src="http://images2015.cnblogs.com/blog/708972/201605/708972-20160511141508499-1896745175.gif" alt="JS如何利用定时器实现长按事件"></p>
</content>
<summary type="html">
<blockquote>
<p>JS 原生事件并没有长按事件,但是我们可以利用一些原有的事件,来实现长按事件</p>
</blockquote>
<h2 id="任务需求"><a href="#任务需求" class="headerlink" title="任务需求"></a>任务需求</h2><p>最近在工作上遇到一个特殊的需求,就是需要实现长按来增加或者减少数值</p>
<p>这就类似于,购物车中的物品数量的加减按钮,单击按钮物品数量相应增加或者减少一个数量,利用长按来实现快速增加或者减少物品数量</p>
<p><img src="http://images2015.cnblogs.com/blog/708972/201605/708972-20160511110048015-1999018068.png" alt="JS如何利用定时器实现长按事件"></p>
</summary>
<category term="Javascript" scheme="http://xinpure.com/categories/Javascript/"/>
<category term="Javascript" scheme="http://xinpure.com/tags/Javascript/"/>
</entry>
</feed>