<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>ZoRo的博客</title>
        <link>http://www.cometruer.com</link>
        <description>知耻近乎勇，好学近乎知，力行近乎仁</description>
        <atom:link href="http://www.cometruer.com/rss.html" rel="self" />
        <language>zh-cn</language>
        <lastBuildDate>Sat May 30 2026 13:11:30 GMT+0800 (CST)</lastBuildDate>
        
        <item>
            <title>基于iscroll4修改，兼容ie8，支持滚动条</title>
            <link>http://www.cometruer.com/post/iscroll.html</link>
            <description>&lt;p&gt;RT&lt;/p&gt;
&lt;p&gt;Github地址：&lt;a href=&quot;https://github.com/cometruer/iscroll4-iefix&quot;&gt;https://github.com/cometruer/iscroll4-iefix&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;我真的很懒，有需要的自取，以后有更新再提交。&lt;/p&gt;
</description>
            <pubDate>Mon Jun 20 2016 18:50:52 GMT+0800 (CST)</pubDate>
            <guid>http://www.cometruer.com/post/iscroll.html</guid>
        </item>
        
        <item>
            <title>新的博客终于迁移完毕</title>
            <link>http://www.cometruer.com/post/done.html</link>
            <description>&lt;p&gt;之前一直是用wordpress写博客，这个域名申请了快6年了，我已经懒癌晚期了，现在终于开始重新写博客了。
机器放在阿里云上，备案也搞了，系统用的thinkjs开发的火麒麟博客系统。
接下来要多分享些跟技术有关的文章。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PS:希望自己可以坚持。&lt;/strong&gt;&lt;/p&gt;
</description>
            <pubDate>Sat Jun 04 2016 20:45:37 GMT+0800 (CST)</pubDate>
            <guid>http://www.cometruer.com/post/done.html</guid>
        </item>
        
        <item>
            <title>实现Flash背景上的拖动以及解决被Flash覆盖的问题</title>
            <link>http://www.cometruer.com/post/drag.html</link>
            <description>&lt;p&gt;相信对于很多前端的同学来说，拖动并不陌生，网上随随便便搜一下能搜出很多关于拖动的文章，github上也有很多关于拖动的库可以用。最近接到一个需求，需要修改线上一个拖动窗口的功能。类似下图：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.cometruer.com/static/upload/201606/2tmiq3D-gEEPUI4q-cEg0Qyi.jpg&quot; alt=&quot;alt&quot;&gt;&lt;/p&gt;

&lt;p&gt;看似简单的问题背后却隐藏着很多坑，让我不得不写这么一篇文章梳理一下。&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;我们之前的拖动代码也许就是某位同学从网上找的一篇拖动的文章写的，存在的问题如下：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. 第一个问题：拖动不流畅，卡顿&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. 第二个问题：背景是个Flash游戏，窗口经常被Flash盖住&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;对于第一个问题，拖动不流畅，卡顿。理所当然我必须看下代码&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs lang-javascript&quot;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;// 鼠标按下div1时&lt;/span&gt;
obj.onmousedown = &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;e&lt;/span&gt;) &lt;/span&gt;{
    &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; evnt = e || event; &lt;span class=&quot;hljs-comment&quot;&gt;// 得到鼠标事件&lt;/span&gt;
    disX = evnt.clientX - obj.offsetLeft; &lt;span class=&quot;hljs-comment&quot;&gt;// 鼠标横坐标 - div1的left&lt;/span&gt;
    disY = evnt.clientY - obj.offsetTop; &lt;span class=&quot;hljs-comment&quot;&gt;// 鼠标纵坐标 - div1的top&lt;/span&gt;
    &lt;span class=&quot;hljs-comment&quot;&gt;// 鼠标移动时&lt;/span&gt;
    &lt;span class=&quot;hljs-built_in&quot;&gt;document&lt;/span&gt;.onmousemove = &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;e&lt;/span&gt;) &lt;/span&gt;{
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; evnt = e || event;
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; x = evnt.clientX - disX;
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; y = evnt.clientY - disY;
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; window_width = &lt;span class=&quot;hljs-built_in&quot;&gt;document&lt;/span&gt;.documentElement.clientWidth - obj.offsetWidth;
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; window_height = &lt;span class=&quot;hljs-built_in&quot;&gt;document&lt;/span&gt;.documentElement.clientHeight - obj.offsetHeight;

        x = (x &amp;lt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;) ? &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt; : x;
        x = (x &amp;gt; window_width) ? window_width: x;
        y = (y &amp;lt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;) ? &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt; : y;
        y = (y &amp;gt; window_height) ? window_height: y;

    };

    &lt;span class=&quot;hljs-comment&quot;&gt;// 鼠标抬起时&lt;/span&gt;
    &lt;span class=&quot;hljs-built_in&quot;&gt;document&lt;/span&gt;.onmouseup = &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;/span&gt;) &lt;/span&gt;{
        &lt;span class=&quot;hljs-built_in&quot;&gt;document&lt;/span&gt;.onmousemove = &lt;span class=&quot;hljs-literal&quot;&gt;null&lt;/span&gt;;
        &lt;span class=&quot;hljs-built_in&quot;&gt;document&lt;/span&gt;.onmouseup = &lt;span class=&quot;hljs-literal&quot;&gt;null&lt;/span&gt;;
    };

    &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;hljs-literal&quot;&gt;false&lt;/span&gt;;
};
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;我觉得这种写法不好，而且有bug，所以我改写了个方法。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs lang-javascript&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; ox = &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;; &lt;span class=&quot;hljs-comment&quot;&gt;//原始坐标&lt;/span&gt;
&lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; oy = &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;; &lt;span class=&quot;hljs-comment&quot;&gt;//原始坐标&lt;/span&gt;
&lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; moveObj = $(&lt;span class=&quot;hljs-string&quot;&gt;&quot;move-div&quot;&lt;/span&gt;)

moveObj.on(&lt;span class=&quot;hljs-string&quot;&gt;&quot;mousedown&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;event&lt;/span&gt;) &lt;/span&gt;{
    ox = &lt;span class=&quot;hljs-built_in&quot;&gt;parseInt&lt;/span&gt;(event.pageX);
    oy = &lt;span class=&quot;hljs-built_in&quot;&gt;parseInt&lt;/span&gt;(event.pageY);

    that.target = that.videoBox;
});

$(&lt;span class=&quot;hljs-built_in&quot;&gt;document&lt;/span&gt;).on(&lt;span class=&quot;hljs-string&quot;&gt;&quot;mouseup&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;event&lt;/span&gt;) &lt;/span&gt;{
    that.target = &lt;span class=&quot;hljs-literal&quot;&gt;null&lt;/span&gt;;
    ox = &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;;
    oy = &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;;
});

$(&lt;span class=&quot;hljs-built_in&quot;&gt;document&lt;/span&gt;).on(&lt;span class=&quot;hljs-string&quot;&gt;&quot;mousemove&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;event&lt;/span&gt;) &lt;/span&gt;{
    &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; (that.target) {
        &lt;span class=&quot;hljs-comment&quot;&gt;//console.log(target)&lt;/span&gt;
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; nX = &lt;span class=&quot;hljs-built_in&quot;&gt;parseInt&lt;/span&gt;(event.pageX);
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; nY = &lt;span class=&quot;hljs-built_in&quot;&gt;parseInt&lt;/span&gt;(event.pageY);

        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; newX = nX - ox;
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; newY = nY - oy;
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; realX = targteOffsetObj.left + newX;
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; realY = targteOffsetObj.top + newY;
        that.target.css({
            left: realX,
            top: realY
        });
    }
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;我只需要将绑定范围扩大到document下，这样就不会丢失焦点。然后每次点击的时候设定target，然后计算移动的相对位置，修改下css就搞定移动的问题。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;理想很丰满，现实很骨感。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这样做依然存在问题，那就是移动快的时候，鼠标移动速度太快移到了背景的Flash上面，瞬间就会失去event对象，这种情况下还是会出现卡顿现象。&lt;/p&gt;
&lt;p&gt;我第一个方法是绑定个mouseout，希望通过监听mouseout时实时fix一下坐标。但是这样并不理想，mouseout只能监听到刚移出几像素的时候，移动范围大了还是会丢失，还是会非常卡。所以，我后来想了个方案，在点击的时候给移动的对象加一个class,class里面是给宽高各加了200px。这样，即使移动很快，只要不超过这200px的范围，那么就一直可以监听到事件。后来试了下效果确实还不错。
第一个问题算是解决了，那么就开始搞第二个问题。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一个问题算是解决了，那么就开始搞第二个问题。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;对于Flash背景来说，即使扩大了宽高，只要进入Flash的范围，就会被其抢走焦点。所以我第一个方案是将绑定改成draggable的方式，因为drag毕竟是HTML5的新属性，没准能抢过Flash。带着这种希望，我实现了第二种拖动方法。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs lang-verilog&quot;&gt;moveObj&lt;span class=&quot;hljs-variable&quot;&gt;.attr&lt;/span&gt;(&lt;span class=&quot;hljs-string&quot;&gt;&quot;draggable&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&quot;true&quot;&lt;/span&gt;);
moveObj&lt;span class=&quot;hljs-variable&quot;&gt;.on&lt;/span&gt;(&lt;span class=&quot;hljs-string&quot;&gt;&quot;dragstart&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;(&lt;span class=&quot;hljs-keyword&quot;&gt;event&lt;/span&gt;) {
    ox = parseInt(&lt;span class=&quot;hljs-keyword&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;hljs-variable&quot;&gt;.originalEvent&lt;/span&gt;&lt;span class=&quot;hljs-variable&quot;&gt;.x&lt;/span&gt;);
    oy = parseInt(&lt;span class=&quot;hljs-keyword&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;hljs-variable&quot;&gt;.originalEvent&lt;/span&gt;&lt;span class=&quot;hljs-variable&quot;&gt;.y&lt;/span&gt;);

    that&lt;span class=&quot;hljs-variable&quot;&gt;.target&lt;/span&gt; = that&lt;span class=&quot;hljs-variable&quot;&gt;.videoBox&lt;/span&gt;;
    moveObj&lt;span class=&quot;hljs-variable&quot;&gt;.addClass&lt;/span&gt;(&lt;span class=&quot;hljs-string&quot;&gt;&quot;choose&quot;&lt;/span&gt;);
    &lt;span class=&quot;hljs-comment&quot;&gt;//让火狐浏览器支持drag事件&lt;/span&gt;
    &lt;span class=&quot;hljs-keyword&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;hljs-variable&quot;&gt;.originalEvent&lt;/span&gt;&lt;span class=&quot;hljs-variable&quot;&gt;.dataTransfer&lt;/span&gt;&lt;span class=&quot;hljs-variable&quot;&gt;.setData&lt;/span&gt;(&lt;span class=&quot;hljs-string&quot;&gt;&quot;text&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-keyword&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;hljs-variable&quot;&gt;.target&lt;/span&gt;&lt;span class=&quot;hljs-variable&quot;&gt;.innerHTML&lt;/span&gt;);
});

moveObj&lt;span class=&quot;hljs-variable&quot;&gt;.on&lt;/span&gt;(&lt;span class=&quot;hljs-string&quot;&gt;&quot;drag&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;(&lt;span class=&quot;hljs-keyword&quot;&gt;event&lt;/span&gt;) {
    &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; (that&lt;span class=&quot;hljs-variable&quot;&gt;.target&lt;/span&gt;) {
        &lt;span class=&quot;hljs-comment&quot;&gt;//松开那一下修改&lt;/span&gt;
        &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;hljs-keyword&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;hljs-variable&quot;&gt;.originalEvent&lt;/span&gt;&lt;span class=&quot;hljs-variable&quot;&gt;.x&lt;/span&gt; == &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt; &amp;amp;&amp;amp; &lt;span class=&quot;hljs-keyword&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;hljs-variable&quot;&gt;.originalEvent&lt;/span&gt;&lt;span class=&quot;hljs-variable&quot;&gt;.y&lt;/span&gt; == &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;) {
            &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;/span&gt; false;
        }
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; nX = parseInt(&lt;span class=&quot;hljs-keyword&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;hljs-variable&quot;&gt;.originalEvent&lt;/span&gt;&lt;span class=&quot;hljs-variable&quot;&gt;.x&lt;/span&gt;);
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; nY = parseInt(&lt;span class=&quot;hljs-keyword&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;hljs-variable&quot;&gt;.originalEvent&lt;/span&gt;&lt;span class=&quot;hljs-variable&quot;&gt;.y&lt;/span&gt;);

        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; newX = nX - ox;
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; newY = nY - oy;
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; realX = targteOffsetObj&lt;span class=&quot;hljs-variable&quot;&gt;.left&lt;/span&gt; + newX;
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; realY = targteOffsetObj&lt;span class=&quot;hljs-variable&quot;&gt;.top&lt;/span&gt; + newY;
        that&lt;span class=&quot;hljs-variable&quot;&gt;.move&lt;/span&gt;(realX, realY);
    }
});

moveObj&lt;span class=&quot;hljs-variable&quot;&gt;.on&lt;/span&gt;(&lt;span class=&quot;hljs-string&quot;&gt;&quot;dragend&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;(&lt;span class=&quot;hljs-keyword&quot;&gt;event&lt;/span&gt;) {
    that&lt;span class=&quot;hljs-variable&quot;&gt;.target&lt;/span&gt; = &lt;span class=&quot;hljs-literal&quot;&gt;null&lt;/span&gt;;
    ox = &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;;
    oy = &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;;
    moveObj&lt;span class=&quot;hljs-variable&quot;&gt;.removeClass&lt;/span&gt;(&lt;span class=&quot;hljs-string&quot;&gt;&quot;choose&quot;&lt;/span&gt;);
    callback();
    &lt;span class=&quot;hljs-comment&quot;&gt;//防止个别恶心浏览器下进行搜索&lt;/span&gt;
    &lt;span class=&quot;hljs-keyword&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;hljs-variable&quot;&gt;.preventDefault&lt;/span&gt;();
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;写完试了一下，效果不错，而且毕竟是HTML5原生支持的，效率会比自己写的js效率高。但是这里还是遇到了两个坑，第一个是火狐下draggable不执行，解决方法是在dragstart的时候hack一下。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs lang-css&quot;&gt;&lt;span class=&quot;hljs-selector-tag&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;hljs-selector-class&quot;&gt;.originalEvent&lt;/span&gt;&lt;span class=&quot;hljs-selector-class&quot;&gt;.dataTransfer&lt;/span&gt;&lt;span class=&quot;hljs-selector-class&quot;&gt;.setData&lt;/span&gt;(&quot;&lt;span class=&quot;hljs-selector-tag&quot;&gt;text&lt;/span&gt;&quot;, &lt;span class=&quot;hljs-selector-tag&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;hljs-selector-class&quot;&gt;.target&lt;/span&gt;&lt;span class=&quot;hljs-selector-class&quot;&gt;.innerHTML&lt;/span&gt;);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;但是第二个坑是即使hack成功，他的对象里没有可用来计算相对位移的属性，所以最终火狐下还是要屏蔽这种方法。&lt;/p&gt;
&lt;p&gt;当然还有一个最关键的问题，draggable的元素并不能抢过Flash，焦点还是让Flash无情的抢走了。&lt;/p&gt;
&lt;p&gt;所以，我们又回归到了问题的核心：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;到底什么东西能够抢过Flash,焦点不会被Flash抢走呢？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;后来我灵光一现，既然Flash这么牛逼，为什么我不用Flash来做我的容器，这样就不会被Flash抢走焦点了。于是，就有了第三个拖动的方法。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs lang-javascript&quot;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;//通过swfobject创建flash，替换掉原来的move-object&lt;/span&gt;
&lt;span class=&quot;hljs-built_in&quot;&gt;window&lt;/span&gt;.onload = &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;/span&gt;) &lt;/span&gt;{
    that.createFlash();
};
&lt;span class=&quot;hljs-comment&quot;&gt;//生成了flash需要需要时间，所以不能直接绑定在move-object上面&lt;/span&gt;
$(&lt;span class=&quot;hljs-built_in&quot;&gt;document&lt;/span&gt;).on(&lt;span class=&quot;hljs-string&quot;&gt;&quot;mousedown&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&quot;#move-object&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;event&lt;/span&gt;) &lt;/span&gt;{
    ox = &lt;span class=&quot;hljs-built_in&quot;&gt;parseInt&lt;/span&gt;(event.pageX);
    oy = &lt;span class=&quot;hljs-built_in&quot;&gt;parseInt&lt;/span&gt;(event.pageY);

    that.target = $(&lt;span class=&quot;hljs-string&quot;&gt;&quot;#video_content&quot;&lt;/span&gt;);
    moveObj.addClass(&lt;span class=&quot;hljs-string&quot;&gt;&quot;choose&quot;&lt;/span&gt;);
    event.preventDefault();
    event.stopPropagation();
});

$(&lt;span class=&quot;hljs-built_in&quot;&gt;document&lt;/span&gt;).on(&lt;span class=&quot;hljs-string&quot;&gt;&quot;mouseup&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&quot;#move-object&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;event&lt;/span&gt;) &lt;/span&gt;{
    that.target = &lt;span class=&quot;hljs-literal&quot;&gt;null&lt;/span&gt;;
    ox = &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;;
    oy = &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;;
    moveObj.removeClass(&lt;span class=&quot;hljs-string&quot;&gt;&quot;choose&quot;&lt;/span&gt;);
    event.preventDefault();
    event.stopPropagation();
});

$(&lt;span class=&quot;hljs-built_in&quot;&gt;document&lt;/span&gt;).on(&lt;span class=&quot;hljs-string&quot;&gt;&quot;mousemove&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;function&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;event&lt;/span&gt;) &lt;/span&gt;{
    &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; (that.target) {
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; nX = &lt;span class=&quot;hljs-built_in&quot;&gt;parseInt&lt;/span&gt;(event.pageX);
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; nY = &lt;span class=&quot;hljs-built_in&quot;&gt;parseInt&lt;/span&gt;(event.pageY);

        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; newX = nX - ox;
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; newY = nY - oy;
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; realX = targteOffsetObj.left + newX;
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; realY = targteOffsetObj.top + newY;

        that.move(realX, realY);
        event.preventDefault();
        event.stopPropagation();
    }
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这个Flash是请我同事帮我写的空的Flash，什么操作都没有，它只是做一件事，不让背景Flash抢去焦点。事实证明，确实做到了。即使鼠标范围移出到Flash背景上，只要鼠标不松开，事件就不会消失。而且不管我鼠标移动多快，焦点都在这个Flash元素上。&lt;/p&gt;
&lt;p&gt;所以，困扰已久的Flash背景下拖动的问题算是解决了。&lt;/p&gt;
&lt;p&gt;最终我的程序会自动选择适合拖动方式，支持Flash的优先使用Flash，如果不支持Flash优先使用drag，如果不支持drag就用最初的js拖动。&lt;/p&gt;
&lt;p&gt;但是，特殊浏览器下比如IE，窗口游戏中被Flash覆盖的问题却始终还未解决。我试了很多方案，最终针对游戏中被Flash覆盖，我用了重新设置宽高的方式强制调用浏览器重绘机制，可以解决被覆盖的问题，窗口不会再被盖掉。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs lang-kotlin&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;this&lt;/span&gt;.videoBox.css(&lt;span class=&quot;hljs-string&quot;&gt;&quot;width&quot;&lt;/span&gt;,  &lt;span class=&quot;hljs-keyword&quot;&gt;this&lt;/span&gt;.videoBox.width());&lt;span class=&quot;hljs-comment&quot;&gt;//调用重绘机制&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;(这里需要注意的是，网上很多说修改zoom属性，我这里并没有效果，所以用的只是宽。)&lt;/p&gt;
&lt;p&gt;实际测试中，又发现了一个新的问题，就是窗口虽然因为重绘显示了，但是只显示了一部分，还有一部分不显示。&lt;/p&gt;
&lt;p&gt;最终，我们用Iframe作为垫片，做一个等大的Iframe在我的窗口下，然后移动窗口的时候同步移动这个垫片。但是美中不足的是这个Iframe不能透明，是一个黑色的背景色，设置透明也会透出Flash本身的黑底。&lt;/p&gt;
&lt;p&gt;这点美中不足暂时还没办法解决。但是这个拖动问题已经算解决了。&lt;/p&gt;
&lt;p&gt;最后，说一下忙了这一通总结出的两点结论：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1.只有Flash可以抢过Flash的焦点&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2.只有Iframe可以盖住Flash&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我知道这个问题、这个场景可能很奇葩，很多同学并不会遇到。而我因为要解决这个问题，去查了很多资料，从一个拖动，引发出很多不同的技术，不一样的思维，学到了很多其他的知识。&lt;/p&gt;
&lt;p&gt;所以，我这里想说的是，作为前端，一定要有发散的思维，要从不同的维度考虑问题。拖动的问题可以从Flash上解决，那么其他的问题呢？&lt;/p&gt;
&lt;p&gt;希望我写的这篇文章大家看了有那么一点点收获，获得一些不一样的灵感。&lt;/p&gt;
</description>
            <pubDate>Sat Jun 04 2016 20:41:19 GMT+0800 (CST)</pubDate>
            <guid>http://www.cometruer.com/post/drag.html</guid>
        </item>
        
        <item>
            <title>How I make my first game by libgdx (1)</title>
            <link>http://www.cometruer.com/post/how-i-make-my-first-game-by-libgdx-1.html</link>
            <description>&lt;p&gt;Hello guys,I am back. The little website is so deserted before because of my laziness. So now,I want it to be changed. I will use English by now so maybe I can improve my English. And I want all of people over the world can enjoy my little website.   Closer to home.   About 5 months ago,as I had just resigned,I decide to be an  android developer. I want to do something different with my work before. So between software and game,I choose the game. After trying a lot framework,I choose libgdx and begin the great journey. I do not want to say how wonderful the libgdx is(please google and you will know why).I just tell you how I use it.   So, let&amp;#39;s begin.   Ther are some articles in the web,but I will just write my own. &lt;span style=&quot;color: #ff6600;&quot;&gt;Key 1: Preparing.&lt;/span&gt; As we know, if you want to make a game,you must have the resources(images,audio and so on). Because I am not good at painting,so after waste a lot of time in painting,I decide use other&amp;#39;s image to be my game&amp;#39;s actor. So I found a PC game called &amp;quot;Little Fighter&amp;quot; and it is perfect. I borrow some images from it in order to save my time in painting. Then I make a menu screen like that image below.   &lt;img src=&quot;http://www.cometruer.com/static/upload/201606/EorTDV5tj6jQDWPyvpFEx_jR.png&quot; alt=&quot;alt&quot;&gt; 
By the way,it is easier to draw a screen by libgdx than by android&amp;#39;s xml. You know,it is difficult to draw a screen as you want by edit an xml.   &lt;span style=&quot;color: #ff6600;&quot;&gt;Key 2: The map.&lt;/span&gt; I want to make a game,so I need a map. The best way is tilemap which is easier to build. Libgdx offer you a tool so called &amp;quot;tiled-preprocessor&amp;quot;. All of your tile map must recod so the libgdx can use it. You must import it in eclipse and rebuild the &amp;quot;Java Build Path&amp;quot; of this project. You need to change the inputDir and the outputDir to your own path as I do below. For example:&lt;/p&gt;
&lt;pre&gt; &lt;span style=&quot;color: #808080;&quot;&gt;inputDir = new File(&quot;D:/maps&quot;);&lt;/span&gt;
 &lt;span style=&quot;color: #808080;&quot;&gt;outputDir = new File(&quot;D:/maps/output&quot;);&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;And comment all  &amp;quot;&lt;span style=&quot;color: #808080;&quot;&gt;System.exit(0)&lt;/span&gt;;&amp;quot; in order to run it. Then run it and you will get three files and they are want you need. In my application, I found the tile map is loads so slowly and it has something different with the original. So I change two places. The one is add this line &lt;span style=&quot;color: #808080;&quot;&gt;settings.stripWhitespace=false;&lt;/span&gt; into the main method of  the &amp;quot;TiledMapPacker.java&amp;quot;  to make it look like the original . And change the last two num to &amp;quot;100&amp;quot; like &lt;span style=&quot;color: #808080;&quot;&gt;tileMapRenderer = new TileMapRenderer(map, atlas, 100, 100);&lt;/span&gt; so it could loads quickly.  &lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;TO BE CONTINUE......&lt;/span&gt;&lt;/p&gt;
</description>
            <pubDate>Wed Sep 21 2011 05:29:03 GMT+0800 (CST)</pubDate>
            <guid>http://www.cometruer.com/post/how-i-make-my-first-game-by-libgdx-1.html</guid>
        </item>
        
        <item>
            <title>Google中国总部本人8月亲探</title>
            <link>http://www.cometruer.com/post/google中国总部本人8月亲探.html</link>
            <description>&lt;p&gt;&lt;img src=&quot;http://www.cometruer.com/static/upload/201606/BEtcq18-ebsiEvyqo0NP3aZ6.jpg&quot; alt=&quot;alt&quot;&gt;&lt;/p&gt;
&lt;p&gt;来访者登记&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.cometruer.com/static/upload/201606/tNnl664Z5EytbO5Pq8XyE3xQ.jpg&quot; alt=&quot;alt&quot;&gt;&lt;/p&gt;
&lt;p&gt;二楼小会议室&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.cometruer.com/static/upload/201606/pqSL8P5SjZVN41h1oPAHkbgC.jpg&quot; alt=&quot;alt&quot;&gt;&lt;/p&gt;
&lt;p&gt;这是访客必须要贴的标签，必然不让进&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.cometruer.com/static/upload/201606/0C103zi-GxwjNpTJM-oJhcaq.jpg&quot; alt=&quot;alt&quot;&gt;&lt;/p&gt;
&lt;p&gt;会议室墙上google的Logo&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.cometruer.com/static/upload/201606/scpAIOyDbmTcHILLbeJwHQ31.jpg&quot; alt=&quot;alt&quot;&gt;&lt;/p&gt;
&lt;p&gt;二楼会议室外的休息区
&lt;img src=&quot;http://www.cometruer.com/static/upload/201606/asxjP5cDFXv6fLkXmZmcZ45q.jpg&quot; alt=&quot;alt&quot;&gt;&lt;/p&gt;
&lt;p&gt;零食架，随便拿&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.cometruer.com/static/upload/201606/LSlxRZ6QMtgPuOIyhIIBZKnh.jpg&quot; alt=&quot;alt&quot;&gt;&lt;/p&gt;
&lt;p&gt;咖啡机，冰箱&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.cometruer.com/static/upload/201606/SGsjm3GGVeXA1a3sSYbHEk_8.jpg&quot; alt=&quot;alt&quot;&gt; &lt;/p&gt;
&lt;p&gt;蛮帅的老师&lt;/p&gt;
</description>
            <pubDate>Fri Oct 22 2010 11:40:05 GMT+0800 (CST)</pubDate>
            <guid>http://www.cometruer.com/post/google中国总部本人8月亲探.html</guid>
        </item>
        
    </channel>
</rss>