<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>檬檬前端行 &#187; 非技术</title>
	<atom:link href="http://www.frontendcodes.com/?cat=1&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.frontendcodes.com</link>
	<description>路漫漫其修远兮</description>
	<lastBuildDate>Wed, 18 Mar 2015 10:05:27 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>基于无线端的图片压缩上传</title>
		<link>http://www.frontendcodes.com/?p=230</link>
		<comments>http://www.frontendcodes.com/?p=230#comments</comments>
		<pubDate>Wed, 18 Mar 2015 09:30:42 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[非技术]]></category>

		<guid isPermaLink="false">http://www.frontendcodes.com/?p=230</guid>
		<description><![CDATA[引言 无线端开发和PC端开发，很大的不同，在于要考虑用户的网速以及流量开销。上传图片作为很普通的需求，在很多地方都用的到，但是在无线端，有很多不同之处。 IOS不支持flash，使得无法使用成熟的桌面端的上传组件，比如基于flash的swfupload 图片上传需要压缩&#8211;基于流量原因 无线端可以不考虑低版本的IE浏览器，但是存在更多的兼容问题，更为细节。 需求设定 上传前可预览 上传时，如果图片体积太大，则进行压缩 准备工作 一个简单的html html里包含一个文本域 ，id 为 file 读取文件，完成预览 html5 提供了File API 和FileReader API ，允许js读取图片信息 这里有一个兼容性修正，某些低版本的android浏览器中，读出来的base64缺少字节。 结果如下 对图片进行压缩 压缩的方法是，讲图片用drawImage的方法写入canvas，然后再通过toDataURL 读出来   对于移动端浏览器来说，toDataURL只能返回png图片数据，jpg是不被支持的 w和h，是压缩后的大小，在不同的需求里，可以重写这部分，达到压缩不变形的目的。 ajax上传图片 使用base64上传图片 或者使用binary上传，但是由于移动端对formData的支持度不好，所以只能通过流上传 本次使用base64上传 上传后，处理上传图片。]]></description>
			<content:encoded><![CDATA[<h2>引言</h2>
<p>无线端开发和PC端开发，很大的不同，在于要考虑用户的网速以及流量开销。上传图片作为很普通的需求，在很多地方都用的到，但是在无线端，有很多不同之处。</p>
<ul>
<li>IOS不支持flash，使得无法使用成熟的桌面端的上传组件，比如基于flash的swfupload</li>
<li>图片上传需要压缩&#8211;基于流量原因</li>
<li>无线端可以不考虑低版本的IE浏览器，但是存在更多的兼容问题，更为细节。</li>
</ul>
<h2>需求设定</h2>
<ul>
<li>上传前可预览</li>
<li>上传时，如果图片体积太大，则进行压缩</li>
</ul>
<h2>准备工作</h2>
<ul>
<li>一个简单的html</li>
<li>html里包含一个文本域 ，id 为 file</li>
<li><a href="http://www.frontendcodes.com/wp-content/uploads/2015/03/blog1.jpg"><img class="alignnone size-medium wp-image-233" title="准备工作" src="http://www.frontendcodes.com/wp-content/uploads/2015/03/blog1-300x188.jpg" alt="" width="300" height="188" /></a></li>
</ul>
<h2>读取文件，完成预览</h2>
<ul>
<li>html5 提供了File API 和FileReader API ，允许js读取图片信息</li>
<li><a href="http://www.frontendcodes.com/wp-content/uploads/2015/03/blog21.jpg"><img class="alignnone size-large wp-image-238" title="blog2" src="http://www.frontendcodes.com/wp-content/uploads/2015/03/blog21-1024x424.jpg" alt="" width="640" height="265" /></a></li>
<li>这里有一个兼容性修正，某些低版本的android浏览器中，读出来的base64缺少字节。</li>
<li>结果如下</li>
<li><a href="http://www.frontendcodes.com/wp-content/uploads/2015/03/blog3.jpg"><img class="alignnone size-medium wp-image-235" title="blog3" src="http://www.frontendcodes.com/wp-content/uploads/2015/03/blog3-300x224.jpg" alt="" width="300" height="224" /></a></li>
</ul>
<h2>对图片进行压缩</h2>
<ul>
<li><span>压缩的方法是，讲图片用drawImage的方法写入canvas，然后再通过toDataURL 读出来</span></li>
<li><span> <a href="http://www.frontendcodes.com/wp-content/uploads/2015/03/blog4.jpg"><img class="alignnone size-full wp-image-240" title="blog4" src="http://www.frontendcodes.com/wp-content/uploads/2015/03/blog4.jpg" alt="" width="804" height="280" /></a></span></li>
<li>对于移动端浏览器来说，toDataURL只能返回png图片数据，jpg是不被支持的</li>
<li>w和h，是压缩后的大小，在不同的需求里，可以重写这部分，达到压缩不变形的目的。</li>
</ul>
<h2>ajax上传图片</h2>
<ul>
<li>使用base64上传图片</li>
<li>或者使用binary上传，但是由于移动端对formData的支持度不好，所以只能通过流上传</li>
<li>本次使用base64上传</li>
<li><a href="http://www.frontendcodes.com/wp-content/uploads/2015/03/blog5.jpg"><img class="alignnone size-full wp-image-242" title="blog5" src="http://www.frontendcodes.com/wp-content/uploads/2015/03/blog5.jpg" alt="" width="774" height="328" /></a></li>
<li>上传后，处理上传图片。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.frontendcodes.com/?feed=rss2&#038;p=230</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>移动端的开发与桌面端web开发，谁更苦逼。</title>
		<link>http://www.frontendcodes.com/?p=226</link>
		<comments>http://www.frontendcodes.com/?p=226#comments</comments>
		<pubDate>Sat, 31 May 2014 03:09:05 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[非技术]]></category>

		<guid isPermaLink="false">http://www.frontendcodes.com/?p=226</guid>
		<description><![CDATA[最近几年，移动端开发成了热门，我也随大流，搞了几次移动端的web前端。 这段时间的经历，给我的感悟是，现在的移动端开发，对于web前端来说，是最好的时代，也是最坏的时代。 刚开始做移动端开发的时候，觉得真的很开心，终于再也不用为IE678不支持这个不支持那个发愁了,CSS3动画什么的，都可以high起来了。结果没做几天，发现移动端的坑真心不少啊。 第一个遇到的，就是android 2.3问题。 android2.3自带的浏览器，不支持overflow:scroll ，也就是说不支持div的滚动条。这是坑爹呢。这种东西都不支持。。。 然后，各种不好的东西出现了。 首先是，手机上的web网页的应用场景远比桌面浏览器复杂。大量的APP，读取网页webview，而且都有自己的特立独行的那一面。 更糟的是，手机浏览器基于系统的内核，但是种类太多，桌面也就是360浏览器，搜狗浏览器什么的，除了360浏览器其他用的都少，但是手机上，浏览器种类更多，UC,QQ，百度。。太多了。 然后，系统版本也特别多，从android2.3-android 4.4 ,从IOS4-IOS7，每种浏览器的特性也不同。 这真是最好的时代，也是最坏的时代。 &#160;]]></description>
			<content:encoded><![CDATA[<p>最近几年，移动端开发成了热门，我也随大流，搞了几次移动端的web前端。</p>
<p>这段时间的经历，给我的感悟是，现在的移动端开发，对于web前端来说，是最好的时代，也是最坏的时代。</p>
<p>刚开始做移动端开发的时候，觉得真的很开心，终于再也不用为IE678不支持这个不支持那个发愁了,CSS3动画什么的，都可以high起来了。结果没做几天，发现移动端的坑真心不少啊。</p>
<p>第一个遇到的，就是android 2.3问题。 android2.3自带的浏览器，不支持overflow:scroll ，也就是说不支持div的滚动条。这是坑爹呢。这种东西都不支持。。。</p>
<p>然后，各种不好的东西出现了。</p>
<p>首先是，手机上的web网页的应用场景远比桌面浏览器复杂。大量的APP，读取网页webview，而且都有自己的特立独行的那一面。</p>
<p>更糟的是，手机浏览器基于系统的内核，但是种类太多，桌面也就是360浏览器，搜狗浏览器什么的，除了360浏览器其他用的都少，但是手机上，浏览器种类更多，UC,QQ，百度。。太多了。</p>
<p>然后，系统版本也特别多，从android2.3-android 4.4 ,从IOS4-IOS7，每种浏览器的特性也不同。</p>
<p>这真是最好的时代，也是最坏的时代。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.frontendcodes.com/?feed=rss2&#038;p=226</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一个有趣的问题{}+[]与[]+{}</title>
		<link>http://www.frontendcodes.com/?p=217</link>
		<comments>http://www.frontendcodes.com/?p=217#comments</comments>
		<pubDate>Thu, 11 Apr 2013 04:52:51 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[非技术]]></category>

		<guid isPermaLink="false">http://www.frontendcodes.com/?p=217</guid>
		<description><![CDATA[群里的KB提出了一个很有趣的问题。 说出{}+[]和[]+{}的结果是什么，并为什么。 其实关于+运算符是怎么工作的，已经引发了挺多次的讨论。 无怪乎： a+b的话 如果a和b都是数值，那么就把他们的数值相加，比如1+2=3 如果a和b都是字符串，那么，就把他们连接起来，比如&#8221;1&#8243;+&#8221;2&#8243;=&#8221;12&#8243; 如果一个是数值一个是字符串，则把其中一个转化为字符串，然后连接 比如1+&#8221;2&#8243;=&#8221;12&#8243; 如果以上情况都不属于，比如问题总的[]+{}，那么就对双方都执行ToPrimitive操作，并把结果按照数值方式或字符串方式+操作 那么，[]+{}的结果就很容易理解了，[]的ToPrimitive获取默认值，实际是toString，变为空字符串&#8221;",{}的toString，是&#8221;[object Object]&#8221; 他们的结果合并，就是&#8221;[object Object]&#8221; 按照这个理解，那么{}+[]的结果其实应该和[]+{}的结果是一样的，但是为什么{}+[]的结果是0呢？ 其实在javasript解释代码文本的时候，字符{}有两种解释方式，一种是我们常认为的对象，例如{a:1}，另一种是代码块例如  function a(){} 但是如果{字符出现在一段的开头，那么，肯定被当作代码块执行的。 所以{}+[]的{}被当作代码块处理，没有了结果，最后就是+[]了，空数组被转化为数值，就是0了 真是一个有趣的问题！ &#160;]]></description>
			<content:encoded><![CDATA[<p>群里的KB提出了一个很有趣的问题。</p>
<p>说出{}+[]和[]+{}的结果是什么，并为什么。</p>
<p>其实关于+运算符是怎么工作的，已经引发了挺多次的讨论。</p>
<p>无怪乎： a+b的话</p>
<p>如果a和b都是数值，那么就把他们的数值相加，比如1+2=3</p>
<p>如果a和b都是字符串，那么，就把他们连接起来，比如&#8221;1&#8243;+&#8221;2&#8243;=&#8221;12&#8243;</p>
<p>如果一个是数值一个是字符串，则把其中一个转化为字符串，然后连接 比如1+&#8221;2&#8243;=&#8221;12&#8243;</p>
<p>如果以上情况都不属于，比如问题总的[]+{}，那么就对双方都执行ToPrimitive操作，并把结果按照数值方式或字符串方式+操作</p>
<p>那么，[]+{}的结果就很容易理解了，[]的ToPrimitive获取默认值，实际是toString，变为空字符串&#8221;",{}的toString，是&#8221;[object Object]&#8221;</p>
<p>他们的结果合并，就是&#8221;[object Object]&#8221;</p>
<p>按照这个理解，那么{}+[]的结果其实应该和[]+{}的结果是一样的，但是为什么{}+[]的结果是0呢？</p>
<p>其实在javasript解释代码文本的时候，字符{}有两种解释方式，一种是我们常认为的对象，例如{a:1}，另一种是代码块例如  function a(){}</p>
<p>但是如果{字符出现在一段的开头，那么，肯定被当作代码块执行的。</p>
<p>所以{}+[]的{}被当作代码块处理，没有了结果，最后就是+[]了，空数组被转化为数值，就是0了</p>
<p><strong>真是一个有趣的问题！</strong></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.frontendcodes.com/?feed=rss2&#038;p=217</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>innerHTML=&#8221;&quot; ,removeChild哪个快？</title>
		<link>http://www.frontendcodes.com/?p=207</link>
		<comments>http://www.frontendcodes.com/?p=207#comments</comments>
		<pubDate>Sat, 05 Jan 2013 03:06:20 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[非技术]]></category>

		<guid isPermaLink="false">http://www.frontendcodes.com/?p=207</guid>
		<description><![CDATA[接上次的测试，在清空一个DOM元素时会发生什么 我的浏览器环境是Chrome 23,Firefox 17,IE9 我的作法，在body中创建1000个p标签 for(var i=0;i]]></description>
			<content:encoded><![CDATA[<p>接上次的测试，在清空一个DOM元素时会发生什么</p>
<p>我的浏览器环境是Chrome 23,Firefox 17,IE9</p>
<p>我的作法，在body中创建1000个p标签</p>
<pre>
      for(var i=0;i<10000;i++){
           var p=document.createElement("p");
           p.innerHTML="<span>1</span>";
           document.body.appendChild(p);
      }
      var p=document.getElementsByTagName("p");
</pre>
<h1>测试一</h1>
<p>测试innerHTML的写法是</p>
<pre>
for(var i=0;i<10000;i++){
        var p=document.createElement("p");
        p.innerHTML="<span>1</span>";
        document.body.appendChild(p);
    }
    var p=document.getElementsByTagName("p");
    var d=new Date();
    for(var k=0;k<10000;k++){
        p[k].innerHTML="";
    }
    console.log(new Date()-d);
</pre>
<p>与之对应的removeChild作法是</p>
<pre>
for(var i=0;i<10000;i++){
        var p=document.createElement("p");
        p.innerHTML="<span>1</span>";
        document.body.appendChild(p);
    }
    var p=document.getElementsByTagName("p");
    var d=new Date();
    for(var k=0;k<10000;k++){
        p[k].removeChild(p[k].firstChild);
    }
    console.log(new Date()-d);
</pre>
<p>好了，开始测试！</p>
<table>
<tr>
<th>浏览器</th>
<th>Chrome</th>
<th>Firefox</th>
<th>IE</th>
</tr>
<tr>
<td>innerHTML</td>
<td>1015-1104</td>
<td>35-38</td>
<td>6500-7134</td>
</tr>
<tr>
<td>removeChild</td>
<td>893-987</td>
<td>25-28</td>
<td>6206-7000</td>
</tr>
</table>
<p><br/><br/><strong>从测试结果看，如果向这一万个P中清空唯一的子元素，那么，所有的浏览器，removeChild都要略快一些。<span style='color:red'>Firefox的效率真是出人意料！</span></strong></p>
<h1>测试二，直接清空body</h1>
<p>测试innerHTML的写法是</p>
<pre>
for(var i=0;i<10000;i++){
        var p=document.createElement("p");
        p.innerHTML="<span>1</span>";
        document.body.appendChild(p);
    }
    
    var d=new Date();
    document.body.innerHTML="";
    console.log(new Date()-d);
</pre>
<p>与之对应的removeChild作法是</p>
<pre>
for(var i=0;i<10000;i++){
        var p=document.createElement("p");
        p.innerHTML="<span>1</span>";
        document.body.appendChild(p);
    }
    var p=[].slice.call(document.getElementsByTagName("p"));

    var d=new Date();
    for(var i=0;i<10000;i++){
        document.body.removeChild(p[i]);
    }
    console.log(new Date()-d);
</pre>
<p>好了，开始测试！</p>
<table>
<tr>
<th>浏览器</th>
<th>Chrome</th>
<th>Firefox</th>
<th>IE</th>
</tr>
<tr>
<td>innerHTML</td>
<td>3-4</td>
<td>26-27</td>
<td>1459-1518</td>
</tr>
<tr>
<td>removeChild</td>
<td>6-8</td>
<td>35-37</td>
<td>232-251</td>
</tr>
</table>
<p><br/><br/><strong>从测试结果看，如果直接清空body，firefox和chrome下，removeChild都要稍微慢一些，不过IE却快很多</strong></p>
<h3>总结，在IE下，removeChild比innerHTML=""有效，chrome和firefox下，效率差不多</h3>
]]></content:encoded>
			<wfw:commentRss>http://www.frontendcodes.com/?feed=rss2&#038;p=207</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>innerHTML和appendChild，哪个快？</title>
		<link>http://www.frontendcodes.com/?p=190</link>
		<comments>http://www.frontendcodes.com/?p=190#comments</comments>
		<pubDate>Wed, 12 Dec 2012 06:13:51 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[非技术]]></category>

		<guid isPermaLink="false">http://www.frontendcodes.com/?p=190</guid>
		<description><![CDATA[以前在群里曾经和天牛讨论过一次innerHTML和appendChild谁更快的事情，当时也做过一次测试，结果就是，在IE 下，innerHTML比appendChild快，firefox和chrome，safari下，appendChild比innerHTML要快。 当时的代码，是这样的。 向body中插入1000个li， var str=""; for(var i=0;i&#60;1000;i++){ str+="&#60;li&#62;&#60;/li&#62;"} document.body.innerHTML=str; appendChild for(var i=0;i&#60;1000;i++){ var li=document.createElement("li"); document.body.appendChild(li); } 不过已经过了2年了，现在的浏览器，也不是当年的浏览器了，字符串相加也比数组join来的快了，所以我一直有个想法，测试一下现代浏览器。 我的浏览器环境是Chrome 23,Firefox 17,IE9 我的作法，在body中创建1000个p标签 for(var i=0;i]]></description>
			<content:encoded><![CDATA[<p>以前在群里曾经和天牛讨论过一次innerHTML和appendChild谁更快的事情，当时也做过一次测试，结果就是，在IE 下，innerHTML比appendChild快，firefox和chrome，safari下，appendChild比innerHTML要快。</p>
<p>当时的代码，是这样的。</p>
<p>向body中插入1000个li，</p>
<pre>
var str="";

for(var i=0;i&lt;1000;i++){
str+="&lt;li&gt;&lt;/li&gt;"}
document.body.innerHTML=str;</pre>
<p><strong>appendChild</strong></p>
<pre>
for(var i=0;i&lt;1000;i++){
var li=document.createElement("li");
document.body.appendChild(li);

}</pre>
<p>不过已经过了2年了，现在的浏览器，也不是当年的浏览器了，字符串相加也比数组join来的快了，所以我一直有个想法，测试一下现代浏览器。</p>
<p>我的浏览器环境是Chrome 23,Firefox 17,IE9</p>
<p>我的作法，在body中创建1000个p标签</p>
<pre>
      for(var i=0;i<1000;i++){
           document.body.appendChild(document.createElement("p"));
      }
      var p=document.getElementsByTagName("p");
</pre>
<h1>测试一</h1>
<p>测试innerHTML的写法是</p>
<pre>
for(var i=0;i<1000;i++){
        document.body.appendChild(document.createElement("p"));
    }
    var p=document.getElementsByTagName("p");
   var d=new Date();
   for(var k=0;k<1000;k++){
      p[k].innerHTML="1";
   }
    console.log(new Date()-d);
</pre>
<p>与之对应的appendChild作法是</p>
<pre>
for(var i=0;i<1000;i++){
        document.body.appendChild(document.createElement("p"));
    }
    var p=document.getElementsByTagName("p");
    var d=new Date();
    for(var k=0;k<1000;k++){
        p[k].appendChild(document.createTextNode("1"));
    }
    console.log(new Date()-d);
</pre>
<p>好了，开始测试！</p>
<table>
<tr>
<th>浏览器</th>
<th>Chrome</th>
<th>Firefox</th>
<th>IE</th>
</tr>
<tr>
<td>innerHTML</td>
<td>17-20</td>
<td>59-70</td>
<td>98-116</td>
</tr>
<tr>
<td>appendChild</td>
<td>13-15</td>
<td>50-56</td>
<td>105-109</td>
</tr>
</table>
<p><br/><br/><strong>从测试结果看，如果向这一千个P中插入一个字符“1”，那么，显然chrome中，appendChild要比innerHTML快很多，Firefox中也要快一些，IE则相当</strong></p>
<h1>测试二</h1>
<p>测试innerHTML的写法是</p>
<pre>
for(var i=0;i<1000;i++){
        document.body.appendChild(document.createElement("p"));
    }
    var p=document.getElementsByTagName("p");
   var d=new Date();
   for(var k=0;k<1000;k++){
      p[k].innerHTML="<span>13</span>";
   }
    console.log(new Date()-d);
</pre>
<p>与之对应的appendChild作法是</p>
<pre>
for(var i=0;i<1000;i++){
        document.body.appendChild(document.createElement("p"));
    }
    var p=document.getElementsByTagName("p");
    var d=new Date();
    for(var k=0;k<1000;k++){
        var span=document.createElement("span");
        span.appendChild(document.createTextNode("13"));
        p[k].appendChild(span);
    }
    console.log(new Date()-d);
</pre>
<p>好了，开始测试！</p>
<table>
<tr>
<th>浏览器</th>
<th>Chrome</th>
<th>Firefox</th>
<th>IE</th>
</tr>
<tr>
<td>innerHTML</td>
<td>28-35</td>
<td>73-81</td>
<td>115-135</td>
</tr>
<tr>
<td>appendChild</td>
<td>19-24</td>
<td>67-74</td>
<td>201-231</td>
</tr>
</table>
<p><br/><br/><strong>从测试结果看，如果向这一千个P中插入一个“span”，chrome中，appendChild依然要比innerHTML快很多，Firefox中也会快一些，IE中appendChild就比innerHTML慢多了。</strong></p>
<h3>总结，在现代浏览器中，IE9的DOM操作依然比innerHTML慢一些，需要特别对待。</h3>
]]></content:encoded>
			<wfw:commentRss>http://www.frontendcodes.com/?feed=rss2&#038;p=190</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>阻止designmode为on的iframe中图片被resize</title>
		<link>http://www.frontendcodes.com/?p=185</link>
		<comments>http://www.frontendcodes.com/?p=185#comments</comments>
		<pubDate>Fri, 02 Mar 2012 06:28:43 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[非技术]]></category>
		<category><![CDATA[disable]]></category>
		<category><![CDATA[iframe]]></category>
		<category><![CDATA[resize]]></category>

		<guid isPermaLink="false">http://www.frontendcodes.com/?p=185</guid>
		<description><![CDATA[我有个编辑器，用iframe做的，这个iframe的designmode为on，但是我不希望图片被改变大小。 对于webkit浏览器，图片本身就无法被改变大小，所以，不用解决 firefox，有个特殊的command&#8212;-enableObjectResizing，于是 if(H.browser.getBrowser()==&#8221;ff&#8221;){ _.iDoc.execCommand(&#8216;enableObjectResizing&#8217;, false, &#8216;false&#8217;); } 对于IE，就比较复杂，IE有一个onresizestart事件，可以通过 img.onresizestart=function(){ return false; } 来解决，但是这个有个问题，就是图片依然可以被选中。看着那几个方块，那叫一个难受。想了很久，想到个办法，就是禁止图片被选中不就好了， OK &#160; img.onmousedown=function(){ window.event.returnValue=false; return false; } &#160; 于是，完美解决！]]></description>
			<content:encoded><![CDATA[<p>我有个编辑器，用iframe做的，这个iframe的designmode为on，但是我不希望图片被改变大小。</p>
<p>对于webkit浏览器，图片本身就无法被改变大小，所以，不用解决</p>
<p>firefox，有个特殊的command&#8212;-enableObjectResizing，于是</p>
<p>if(H.browser.getBrowser()==&#8221;ff&#8221;){<br />
_.iDoc.execCommand(&#8216;enableObjectResizing&#8217;, false, &#8216;false&#8217;);<br />
}</p>
<p>对于IE，就比较复杂，IE有一个onresizestart事件，可以通过</p>
<p>img.onresizestart=function(){</p>
<p>return false;</p>
<p>}</p>
<p>来解决，但是这个有个问题，就是图片依然可以被选中。看着那几个方块，那叫一个难受。想了很久，想到个办法，就是禁止图片被选中不就好了，</p>
<p>OK</p>
<p>&nbsp;</p>
<p>img.onmousedown=function(){</p>
<p>window.event.returnValue=false;</p>
<p>return false;</p>
<p>}</p>
<p>&nbsp;</p>
<p>于是，完美解决！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.frontendcodes.com/?feed=rss2&#038;p=185</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>绝对定位子元素，是否决定父元素的scrollWidth?</title>
		<link>http://www.frontendcodes.com/?p=181</link>
		<comments>http://www.frontendcodes.com/?p=181#comments</comments>
		<pubDate>Wed, 29 Feb 2012 05:19:03 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[非技术]]></category>

		<guid isPermaLink="false">http://www.frontendcodes.com/?p=181</guid>
		<description><![CDATA[今天遇到一个问题，发现浏览器，解释不一致。于是讲测试结果记录下来 &#60;div style=&#8221;width:30px; height:30px; position:relative&#8221; id=&#8221;outer&#8221;&#62; &#60;div style=&#8221;position:absolute; width:30px; height:30px; left:20px; top:20px;&#8221;&#62;&#60;/div&#62; &#60;/div&#62; &#60;script&#62; console.log(document.getElementById(&#8220;outer&#8221;).scrollWidth); &#60;/script&#62; &#160; chrome 16.0    结果是50 firefox 10.0     结果30 IE 9.0                结果50 IE 8.0                结果50 IE 7.0               [...]]]></description>
			<content:encoded><![CDATA[<p>今天遇到一个问题，发现浏览器，解释不一致。于是讲测试结果记录下来</p>
<p>&lt;div style=&#8221;width:30px; height:30px; position:relative&#8221; id=&#8221;outer&#8221;&gt;</p>
<p>&lt;div style=&#8221;position:absolute; width:30px; height:30px; left:20px; top:20px;&#8221;&gt;&lt;/div&gt;</p>
<p>&lt;/div&gt;</p>
<p>&lt;script&gt;</p>
<p>console.log(document.getElementById(&#8220;outer&#8221;).scrollWidth);</p>
<p>&lt;/script&gt;</p>
<p>&nbsp;</p>
<p>chrome 16.0    结果是50</p>
<p>firefox 10.0     结果30</p>
<p>IE 9.0                结果50</p>
<p>IE 8.0                结果50</p>
<p>IE 7.0               结果30</p>
<p>IE 6.0              结果30</p>
<p>&nbsp;</p>
<p>神奇的世界！</p>
<p>&nbsp;</p>
<p>如果outer加一个overflow:hidden</p>
<p>&nbsp;</p>
<p>则各浏览器，都为50</p>
]]></content:encoded>
			<wfw:commentRss>http://www.frontendcodes.com/?feed=rss2&#038;p=181</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>常用的easing算法</title>
		<link>http://www.frontendcodes.com/?p=179</link>
		<comments>http://www.frontendcodes.com/?p=179#comments</comments>
		<pubDate>Tue, 28 Feb 2012 09:56:03 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[非技术]]></category>

		<guid isPermaLink="false">http://www.frontendcodes.com/?p=179</guid>
		<description><![CDATA[var obj = { Linear: function(t,b,c,d){ return c*t/d + b; },    //线性 Quad: {                                                                                //二次方缓动 easeIn: function(t,b,c,d){ return c*(t/=d)*t + b; }, easeOut: function(t,b,c,d){ return -c *(t/=d)*(t-2) + b; }, easeInOut: function(t,b,c,d){ if ((t/=d/2) &#60; 1) return c/2*t*t + b; return -c/2 * ((&#8211;t)*(t-2) - 1) + b; [...]]]></description>
			<content:encoded><![CDATA[<p>var obj = {<br />
Linear: function(t,b,c,d){ return c*t/d + b; },    //线性<br />
Quad: {                                                                                //二次方缓动<br />
easeIn: function(t,b,c,d){<br />
return c*(t/=d)*t + b;<br />
},<br />
easeOut: function(t,b,c,d){<br />
return -c *(t/=d)*(t-2) + b;<br />
},<br />
easeInOut: function(t,b,c,d){<br />
if ((t/=d/2) &lt; 1) return c/2*t*t + b;<br />
return -c/2 * ((&#8211;t)*(t-2) - 1) + b;<br />
}<br />
},<br />
Cubic: {                                                                   //三次方缓动<br />
easeIn: function(t,b,c,d){<br />
return c*(t/=d)*t*t + b;<br />
},<br />
easeOut: function(t,b,c,d){<br />
return c*((t=t/d-1)*t*t + 1) + b;<br />
},<br />
easeInOut: function(t,b,c,d){<br />
if ((t/=d/2) &lt; 1) return c/2*t*t*t + b;<br />
return c/2*((t-=2)*t*t + 2) + b;<br />
}<br />
},<br />
Quart: {                                                                    //四次方的缓动<br />
easeIn: function(t,b,c,d){<br />
return c*(t/=d)*t*t*t + b;<br />
},<br />
easeOut: function(t,b,c,d){<br />
return -c * ((t=t/d-1)*t*t*t - 1) + b;<br />
},<br />
easeInOut: function(t,b,c,d){<br />
if ((t/=d/2) &lt; 1) return c/2*t*t*t*t + b;<br />
return -c/2 * ((t-=2)*t*t*t - 2) + b;<br />
}<br />
},<br />
Quint: {                                                              //五次方的缓动<br />
easeIn: function(t,b,c,d){<br />
return c*(t/=d)*t*t*t*t + b;<br />
},<br />
easeOut: function(t,b,c,d){<br />
return c*((t=t/d-1)*t*t*t*t + 1) + b;<br />
},<br />
easeInOut: function(t,b,c,d){<br />
if ((t/=d/2) &lt; 1) return c/2*t*t*t*t*t + b;<br />
return c/2*((t-=2)*t*t*t*t + 2) + b;<br />
}<br />
},<br />
Sine: {                                                                                       //正弦缓动<br />
easeIn: function(t,b,c,d){<br />
return -c * Math.cos(t/d * (Math.PI/2)) + c + b;<br />
},<br />
easeOut: function(t,b,c,d){<br />
return c * Math.sin(t/d * (Math.PI/2)) + b;<br />
},<br />
easeInOut: function(t,b,c,d){<br />
return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;<br />
}<br />
},<br />
Expo: {                                                                                          //指数曲线缓动<br />
easeIn: function(t,b,c,d){<br />
return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;<br />
},<br />
easeOut: function(t,b,c,d){<br />
return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;<br />
},<br />
easeInOut: function(t,b,c,d){<br />
if (t==0) return b;<br />
if (t==d) return b+c;<br />
if ((t/=d/2) &lt; 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;<br />
return c/2 * (-Math.pow(2, -10 * &#8211;t) + 2) + b;<br />
}<br />
},<br />
Circ: {                                                                                          //圆周曲线缓动<br />
easeIn: function(t,b,c,d){<br />
return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;<br />
},<br />
easeOut: function(t,b,c,d){<br />
return c * Math.sqrt(1 - (t=t/d-1)*t) + b;<br />
},<br />
easeInOut: function(t,b,c,d){<br />
if ((t/=d/2) &lt; 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;<br />
return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;<br />
}<br />
},<br />
Elastic: {                                                                                                  //舒缓的溢出缓动<br />
easeIn: function(t,b,c,d,a,p){<br />
if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;<br />
if (!a || a &lt; Math.abs(c)) { a=c; var s=p/4; }<br />
else var s = p/(2*Math.PI) * Math.asin (c/a);<br />
return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;<br />
},<br />
easeOut: function(t,b,c,d,a,p){<br />
if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;<br />
if (!a || a &lt; Math.abs(c)) { a=c; var s=p/4; }<br />
else var s = p/(2*Math.PI) * Math.asin (c/a);<br />
return (a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b);<br />
},<br />
easeInOut: function(t,b,c,d,a,p){<br />
if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);<br />
if (!a || a &lt; Math.abs(c)) { a=c; var s=p/4; }<br />
else var s = p/(2*Math.PI) * Math.asin (c/a);<br />
if (t &lt; 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;<br />
return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;<br />
}<br />
},<br />
Back: {                                                                    //激烈的溢出缓动<br />
easeIn: function(t,b,c,d,s){<br />
if (s == undefined) s = 1.70158;<br />
return c*(t/=d)*t*((s+1)*t - s) + b;<br />
},<br />
easeOut: function(t,b,c,d,s){<br />
if (s == undefined) s = 1.70158;<br />
return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;<br />
},<br />
easeInOut: function(t,b,c,d,s){<br />
if (s == undefined) s = 1.70158;<br />
if ((t/=d/2) &lt; 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;<br />
return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;<br />
}<br />
},<br />
Bounce: {                                                                                         //起步阻力<br />
easeIn: function(t,b,c,d){<br />
return c - Tween.Bounce.easeOut(d-t, 0, c, d) + b;<br />
},<br />
easeOut: function(t,b,c,d){<br />
if ((t/=d) &lt; (1/2.75)) {<br />
return c*(7.5625*t*t) + b;<br />
} else if (t &lt; (2/2.75)) {<br />
return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;<br />
} else if (t &lt; (2.5/2.75)) {<br />
return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;<br />
} else {<br />
return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;<br />
}<br />
},<br />
easeInOut: function(t,b,c,d){<br />
if (t &lt; d/2) return Tween.Bounce.easeIn(t*2, 0, c, d) * .5 + b;<br />
else return Tween.Bounce.easeOut(t*2-d, 0, c, d) * .5 + c*.5 + b;<br />
}<br />
}<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://www.frontendcodes.com/?feed=rss2&#038;p=179</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>和蝈蝈龙的跨域讨论</title>
		<link>http://www.frontendcodes.com/?p=176</link>
		<comments>http://www.frontendcodes.com/?p=176#comments</comments>
		<pubDate>Tue, 14 Feb 2012 14:30:17 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[非技术]]></category>

		<guid isPermaLink="false">http://www.frontendcodes.com/?p=176</guid>
		<description><![CDATA[蝈蝈笼和我讨论ajax跨域问题，首先是关于用document.domain做子域名的跨域 通过www.a.com向abc.a.com发送请求，然后神奇的事发生了，在firebug中，提示该次请求状态是200，但是实际上，status是0，这好像是firebug的一个bug吧。 发现设置document.domain=&#8221;a.com&#8221;，需要一个iframe作为代理来发送ajax，大不爽！选其他的。 蝈总作为一名PHP人士，喜欢JSONP，最后解决了问题，但是我更喜欢用flash做代理。 JSONP的优点：原生JS， 缺点，需要服务器端写特别的接口 FLASH的优点：一次设置，所以的连接都有用  缺点：需要一个控件，虽然基本每个浏览器都有 好吧，热烈的讨论持续了很久，最后我败了。。]]></description>
			<content:encoded><![CDATA[<p>蝈蝈笼和我讨论ajax跨域问题，首先是关于用document.domain做子域名的跨域</p>
<p>通过www.a.com向abc.a.com发送请求，然后神奇的事发生了，在firebug中，提示该次请求状态是200，但是实际上，status是0，这好像是firebug的一个bug吧。</p>
<p>发现设置document.domain=&#8221;a.com&#8221;，需要一个iframe作为代理来发送ajax，大不爽！选其他的。</p>
<p>蝈总作为一名PHP人士，喜欢JSONP，最后解决了问题，但是我更喜欢用flash做代理。</p>
<p>JSONP的优点：原生JS， 缺点，需要服务器端写特别的接口</p>
<p>FLASH的优点：一次设置，所以的连接都有用  缺点：需要一个控件，虽然基本每个浏览器都有</p>
<p>好吧，热烈的讨论持续了很久，最后我败了。。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.frontendcodes.com/?feed=rss2&#038;p=176</wfw:commentRss>
		<slash:comments>41</slash:comments>
		</item>
		<item>
		<title>在AJAX中容易忽略的问题</title>
		<link>http://www.frontendcodes.com/?p=174</link>
		<comments>http://www.frontendcodes.com/?p=174#comments</comments>
		<pubDate>Tue, 14 Feb 2012 14:22:41 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[非技术]]></category>

		<guid isPermaLink="false">http://www.frontendcodes.com/?p=174</guid>
		<description><![CDATA[1.替换掉textarea中的换行 2.每次提交，都要encodeURIComponent]]></description>
			<content:encoded><![CDATA[<p>1.替换掉textarea中的换行</p>
<p>2.每次提交，都要encodeURIComponent</p>
]]></content:encoded>
			<wfw:commentRss>http://www.frontendcodes.com/?feed=rss2&#038;p=174</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
