<?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>I&#039;m Donkey &#187; Javascript</title>
	<atom:link href="http://imdonkey.com/blog/archives/tag/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://imdonkey.com/blog</link>
	<description></description>
	<lastBuildDate>Thu, 26 Aug 2010 02:14:19 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>倔倔死磕Javascript之放大镜</title>
		<link>http://imdonkey.com/blog/archives/478</link>
		<comments>http://imdonkey.com/blog/archives/478#comments</comments>
		<pubDate>Sun, 09 May 2010 13:49:30 +0000</pubDate>
		<dc:creator>Ting</dc:creator>
				<category><![CDATA[倔倔在前端]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[事件]]></category>

		<guid isPermaLink="false">http://imdonkey.com/blog/?p=478</guid>
		<description><![CDATA[<div id="_mcePaste">上次我已经预告了下一个要用javascript实现的是放大镜效果~</div>
<div id="_mcePaste">最开始是在<a href="http://ued.taobao.com/blog/about/" target="_blank">淘宝UED官方博客</a>上看到的.觉得很不错,以为是flash. F12一下才知道是js实现的.当时没具体看,现在开始学javascript了,突然想到这个效果,决定挑战一下哈~开始吧~</div>
<h2>Mockup</h2>
<a href="http://www.imdonkey.com/demo/img_zoomout.html" target="_blank"><img class="alignnone size-full wp-image-477" title="javascript_demo_mockup_2" src="http://imdonkey.com/blog/wp-content/uploads/2010/05/javascript_demo_mockup_2.jpg" alt="" width="508" height="496" /></a><p class='read-more'><a href='http://imdonkey.com/blog/archives/478'>阅读全文 »</a></p>]]></description>
			<content:encoded><![CDATA[<p>上次我已经预告了下一个要用javascript实现的是放大镜效果~</p>
<p>最开始是在<a href="http://ued.taobao.com/blog/about/" target="_blank">淘宝UED官方博客</a>上看到的.觉得很不错,以为是flash. F12一下才知道是js实现的.当时没具体看,现在开始学javascript了,突然想到这个效果,决定挑战一下哈~开始吧~</p>
<h2>Mockup</h2>
<p><a href="http://www.imdonkey.com/demo/img_zoomout.html" target="_blank"><img class="alignnone size-full wp-image-477" title="javascript_demo_mockup_2" src="http://imdonkey.com/blog/wp-content/uploads/2010/05/javascript_demo_mockup_2.jpg" alt="" width="508" height="496" /></a></p>
<h2>第一步:HTML&amp;CSS</h2>
<p>先不要着急写代码,先要考虑考虑实现这个效果对于代码结构上有什么特别的要求,我想到了两个方案:</p>
<p>1.一个小图容器,一个放大镜容器.<span style="color: #ff6600;">原图做为放大镜容器的背景</span></p>
<p>2.一个小图容器,一个放大镜容器.<span style="color: #ff6600;">原图做为放大镜子容器</span></p>
<p>这两个方案其实实现起来差别不大,但是考虑到将来图片有可能是动态读取出来的,而且大小不定,所以我们不推荐放在CSS背景中来实现,最后选择第二种方案.</p>
<p>HTML代码片段如下:</p>
<pre class="brush: xml;">
&lt;div onMouseMove=&quot;imgZoomOut(event)&quot; id=&quot;smallImgCon&quot;&gt;
	&lt;img src=&quot;img/airport_small_1.jpg&quot; id=&quot;smallImg&quot;/&gt;
	&lt;div id=&quot;magnifierCon&quot; style=&quot;display:none&quot;&gt;
		&lt;img src=&quot;img/magnifier.png&quot; id=&quot;magnifierBg&quot;/&gt;
		&lt;img src=&quot;img/airport_large_1.jpg&quot; id=&quot;largeImg&quot;/&gt;
	&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>CSS代码片段如下:</p>
<pre class="brush: css;">
#smallImgCon {position:relative;left:0;top:0;}
#magnifierCon {height:276px;width:276px;position:absolute;overflow:hidden;z-index:3}
	#magnifierCon img#magnifierBg {position:absolute;z-index:2}
	#magnifierCon img#largeImg {position:absolute;z-index:1}
</pre>
<h2>第二步:准备好我们需要的信息</h2>
<p>我们暂且不去考虑图片大小不定这样一种情况,我们目前可以只针对这其中一张图片.只是放大镜大小固定而已.这里我使用的大小是276*276.<br />
大致思路是可以通过下图来了解:</p>
<p><a href="http://imdonkey.com/blog/wp-content/uploads/2010/05/magnifier_model_eg.gif"><img class="alignnone size-full wp-image-477" title="magnifier_model_eg" src="http://imdonkey.com/blog/wp-content/uploads/2010/05/magnifier_model_eg.gif" alt="" /></a></p>
<p>Step1.得到小图所在位置,即坐标,并将其做为原点.<br />
Step2.得到鼠标当前所在位置,这里是指相对于原点的,所以需要减去上一步得到的坐标值.<br />
Step3.有了这个距离,再减去放大镜长宽的一半就得到了放大镜的坐标.即它相对于原点的距离.<br />
<span style="color: #ff6600;">Step4.关键一步大图如何定位呢?</span><br />
这里需要注意的是这几个容器的层级关系:最外层容器是爷爷,放大镜与小图同是兄弟俩,大图是孙子(哈哈~~不是骂人哈)<br />
说白了就是将光标与原点之间的距离*缩放比例=相对应的大图坐标<br />
再减去放大镜宽高一半就得到了超出放大镜的那段距离 也就是大图相对于其父级容器(放大镜)的距离.将这两个值的赋给大图的left,top就基本搞定了~~<br />
大家晕不?呵呵 我都有点儿晕了&#8230;思路及表达能力有待进一步提高 <img src='http://imdonkey.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>那么按照以上步骤写代码吧:<br />
主要代码如下</p>
<pre class="brush: jscript;">
	var smallImgCon = document.getElementById(&quot;smallImgCon&quot;);
	var smallImg = document.getElementById(&quot;smallImg&quot;);
	var magnifierCon = document.getElementById(&quot;magnifierCon&quot;);
	var magnifierBg = document.getElementById(&quot;magnifierBg&quot;);
	var largeImg = document.getElementById(&quot;largeImg&quot;);

	function imgZoomOut(event) {

		//Step 1得到小图位置,即原点.
		smallImgConLocationX = smallImgCon.offsetLeft;
		smallImgConLocationY = smallImgCon.offsetTop;

		//Step2.得到光标相对于原点的坐标值.
		x = event.clientX - smallImgConLocationX;
		y = event.clientY - smallImgConLocationY;

		//Step3.放大镜相对于原点的距离.
		magnifierCon.style.left = x - magnifierWidth/2 + &quot;px&quot;;
		magnifierCon.style.top = y - magnifierHeight/2 + &quot;px&quot;;

		//Step4.大图定位
		x = - x*(largeImgWidth/smallImgWidth) + magnifierWidth/2;
		y = - y*(largeImgWidth/smallImgWidth) + magnifierHeight/2;

		largeImg.style.left = x + &quot;px&quot;;
		largeImg.style.top = y + &quot;px&quot;;

	}
</pre>
<p>写到这里基本结构有了,但还有一些问题需要考虑:</p>
<ol>
<li>鼠标移到图像外面了怎么办?</li>
<li>如何动态得到各个元素的大小,便于将来扩展呢?</li>
</ol>
<p>于是我们要添加另外两个函数跟一个条件判断:</p>
<pre class="brush: jscript;">
	function getImageSize(imageEl) {
		var i = new Image();
		i.src = imageEl.src;
		return new Array(i.width, i.height);
	}
	function dispear() {
		magnifierCon.style.display = &quot;none&quot;;
	}
	if ( x &lt; 0 || x &gt; smallImgWidth || y &lt; 0 || y &gt; smallImgHeight) {
		dispear();
	}else {
		...
	}
</pre>
<p><a href="http://www.imdonkey.com/demo/img_zoomout.html" target="_blank">最终效果演示</a><br />
小提示:大小图最后比例差别大些 这样效果更好更明显~<br />
再次强调,因为是初学,所以代码还有很多地方需要优化,再小的功能也要不断完善,倔倔会在学习中不断完善之前的练习~希望大家能多多帮助倔倔~~:)</p>
<h2>知识点总结:</h2>
<ol>
<li>函数之间的调用</li>
<li>数组的定义</li>
<li>鼠标事件的概念</li>
</ol>
<h2>下期预告:图片浏览+放大镜</h2>
]]></content:encoded>
			<wfw:commentRss>http://imdonkey.com/blog/archives/478/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>倔倔死磕Javascript之开篇</title>
		<link>http://imdonkey.com/blog/archives/368</link>
		<comments>http://imdonkey.com/blog/archives/368#comments</comments>
		<pubDate>Tue, 27 Apr 2010 04:00:16 +0000</pubDate>
		<dc:creator>Ting</dc:creator>
				<category><![CDATA[倔倔在前端]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://imdonkey.com/blog/?p=368</guid>
		<description><![CDATA[倔倔这个名字不是白起的,完全源于本人性格中最大的特点:那就是倔!

最近各种刺激扑面而来,叫我怎能不好好学习?在坨坨同学的指导下 我开始了"又"一次的Javascript之旅~(之所以说"又"是因为07年自己买下了《<a href="http://product.dangdang.com/product.aspx?product_id=9211839&#38;amp;ref=search-0-A" target="_blank">Javascript高级程序设计</a>》,现在想来真不知道当时自己怎么了....好在是本好书~银子没白花)

先做几个很简单的实例,把自己学习的兴趣提起来.这点很重要.

声明:本人可以说是0基础,所以初学JS的朋友也可以一起学习.高手们可以飘过,多多指导哈 :)<p class='read-more'><a href='http://imdonkey.com/blog/archives/368'>阅读全文 »</a></p>]]></description>
			<content:encoded><![CDATA[<p>倔倔这个名字不是白起的,完全源于本人性格中最大的特点:那就是倔!</p>
<p>最近各种刺激扑面而来,叫我怎能不好好学习?在坨坨同学的指导下 我开始了&#8221;又&#8221;一次的Javascript之旅~(之所以说&#8221;又&#8221;是因为07年自己买下了《<a href="http://product.dangdang.com/product.aspx?product_id=9211839&amp;ref=search-0-A" target="_blank">Javascript高级程序设计</a>》,现在想来真不知道当时自己怎么了&#8230;.好在是本好书~银子没白花)</p>
<p>先做几个很简单的实例,把自己学习的兴趣提起来.这点很重要.</p>
<p>声明:本人可以说是0基础,所以初学JS的朋友也可以一起学习.高手们可以飘过,多多指导哈 <img src='http://imdonkey.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>实例一:图片浏览</h2>
<p><a href="http://imdonkey.com/blog/wp-content/uploads/2010/04/imgSlider_demo_mockup1.gif"><img class="alignnone size-full wp-image-380" title="imgSlider_demo_mockup" src="http://imdonkey.com/blog/wp-content/uploads/2010/04/imgSlider_demo_mockup1.gif" alt="" width="479" height="386" /></a></p>
<p>实现效果:点击&#8221;Previous&#8221;和&#8221;Next&#8221; button实现连续几张图片的切换. 很简单吧~</p>
<h3>第一步:HTML&amp;CSS</h3>
<p>这一步对各位来说应该并不难,不过既然元素少,又是做Demo用的,我们就对自己的要求放松些吧,我说的放松是对于浏览器兼容问题的放松.我们选择HTML5与CSS3.可以暂时不用过多管IE678.(但你可以下载IE9的preview版来看看,也无妨)</p>
<p>主要HTML代码如下:</p>
<pre class="brush: xml;">
	&lt;input type=&quot;button&quot; id=&quot;btn_previous&quot; value=&quot;Previous&quot;/&gt;
	&lt;input type=&quot;button&quot;  id=&quot;btn_next&quot; value=&quot;Next&quot;/&gt;
	&lt;ul id=&quot;container&quot;&gt;
		&lt;li id=&quot;pic_1&quot; class=&quot;current&quot;&gt;
			&lt;img src=&quot;../images/demo/pic_1.gif&quot; title=&quot;NO.1&quot; alt=&quot;NO.1&quot;/&gt;
			&lt;p title=&quot;NO.1&quot;&gt;NO.1&lt;/p&gt;
		&lt;/li&gt;
		&lt;li id=&quot;pic_2&quot;&gt;
			&lt;img src=&quot;../images/demo/pic_2.gif&quot; title=&quot;NO.2&quot; alt=&quot;NO.2&quot;/&gt;
			&lt;p title=&quot;NO.2&quot;&gt;NO.2&lt;/p&gt;
		&lt;/li&gt;
		&lt;li id=&quot;pic_3&quot;&gt;
			&lt;img src=&quot;../images/demo/pic_3.gif&quot; title=&quot;NO.3&quot; alt=&quot;NO.3&quot;/&gt;
			&lt;p title=&quot;NO.3&quot;&gt;NO.3&lt;/p&gt;
		&lt;/li&gt;
		&lt;li id=&quot;pic_4&quot;&gt;
			&lt;img src=&quot;../images/demo/pic_4.gif&quot; title=&quot;NO.4&quot; alt=&quot;NO.4&quot;/&gt;
			&lt;p title=&quot;NO.4&quot;&gt;NO.4&lt;/p&gt;
		&lt;/li&gt;
		&lt;li id=&quot;pic_5&quot;&gt;
			&lt;img src=&quot;../images/demo/pic_5.gif&quot; title=&quot;NO.5&quot; alt=&quot;NO.5&quot;/&gt;
			&lt;p title=&quot;NO.5&quot;&gt;NO.5&lt;/p&gt;
		&lt;/li&gt;
	&lt;/ul&gt;
</pre>
<h3>第二步:梳理思路</h3>
<p>想想需要解决哪几个问题:</p>
<ol>
<li>怎么知道是显示当前图片的上一张还是下一张?</li>
<li>如何替换当前图片?</li>
</ol>
<p>好,先解决掉这两个问题事情就好办多了.</p>
<ol>
<li>我们需要将&#8221;向前&#8221;和&#8221;向后&#8221;分别用两个数值来代替,做为参数传给接下来我们要完成的函数,这里用(-1)和(1)来表示.</li>
<li>知道了是向前还是向后之后 我们就要把当前图片隐藏起来,然后显示出它的上一张或者下一张图片.</li>
</ol>
<p>Ok,那我们就开始吧~</p>
<h3>第三步:编写代码</h3>
<p>首先我们给函数起个名字,就叫 imgSlider.(也许并不贴切,但以后会改进功能).把要传给这个函数的值取名为n.所以简单写下来函数应该长这个样子:</p>
<pre class="brush: jscript;">
function imgSlider(n) {

}
</pre>
<p>然后我们需要一个变量,这个变量用来存储当前显示的是第几张图片,我们先赋一个初始值给它,像这样.</p>
<pre class="brush: jscript;">
var currentImg = 1;
function imgSlider(n) {

}
</pre>
<p>为什么要把这个赋值语句写在函数外面呢?(全局变量)因为函数要对这个值做处理,也就是说将来一旦触发了这个函数,currentImg这个值会改变,所以我们将它写在外面.</p>
<p>接下来我们需要得到网页中的几个对象,取得对象的方法是采用document.getElementById(&#8220;idname&#8221;):</p>
<pre class="brush: jscript;">
var currentImg = 1;
function imgSlider(n) {
	var currentImgCon = document.getElementById(&quot;pic_&quot;+ currentImg);
	var btn_previous = document.getElementById(&quot;btn_previous&quot;);
	var btn_next = document.getElementById(&quot;btn_next&quot;);
}
</pre>
<p>哈哈,现在就到了最关键的步骤了,到目前为至我们还没有用到传进来的参数呢,想想假设现在传进来的是(1),即用户要显示下一张图片的话,我们要做何处理呢?很简单,就是在当前图片基础上+1 显示下一张呗~</p>
<pre class="brush: jscript;">
var currentImg = 1;
function imgSlider(n) {
	var currentImgCon = document.getElementById(&quot;pic_&quot;+ currentImg);
	var btn_previous = document.getElementById(&quot;btn_previous&quot;);
	var btn_next = document.getElementById(&quot;btn_next&quot;);
	currentImg = currentImg + n;
	targetImgCon.setAttribute(&quot;class&quot;,&quot;current&quot;);
	targetImgCon.className = &quot;current&quot;;
}
</pre>
<p>currentImg加了1后,我们根据currentImg的最新值通过document.getElementById()这个方法找到了我们要显示的那个图片,并且将得到的对象命名为targetImgCon,然后将current这个class加到这个对象上,那么第二张图片就显示出来了.可不要忘记在这之前要先将之前的图片隐藏起来,所以还要对代码要做以下修改</p>
<pre class="brush: jscript; highlight: [6,7];">
var currentImg = 1;
function imgSlider(n) {
	var currentImgCon = document.getElementById(&quot;pic_&quot;+ currentImg);
	var btn_previous = document.getElementById(&quot;btn_previous&quot;);
	var btn_next = document.getElementById(&quot;btn_next&quot;);
	currentImgCon.setAttribute(&quot;class&quot;,&quot;&quot;);
	currentImgCon.className = &quot;&quot;;
	currentImg = currentImg + n;
	var targetImgCon = document.getElementById(&quot;pic_&quot;+ currentImg);
	targetImgCon.setAttribute(&quot;class&quot;,&quot;current&quot;);
	targetImgCon.className = &quot;current&quot;;
}
</pre>
<p>到此为至主要功能实现了,但完整程度还差好多~.不信可以将事件加到两个button上,如下:</p>
<pre class="brush: xml;">
&lt;input type=&quot;button&quot; onclick=&quot;imgSlider(-1)&quot; id=&quot;btn_previous&quot; value=&quot;Previous&quot; disabled=&quot;disabled&quot;/&gt;
&lt;input type=&quot;button&quot; onclick=&quot;imgSlider(1)&quot; id=&quot;btn_next&quot; value=&quot;Next&quot;/&gt;
</pre>
<p>那么我们还要做什么呢?目前页面中只有5张图片,我们不希望用户一直点击向前向后,那样currentImg数值会越来越大,而执行过程中又取不到数值大于5的图片,会报错.所以现在我们要对临界值做一个判断处理.我们希望只有在1-5这个范围内再做我们以上的那些事情.</p>
<pre class="brush: jscript; highlight: [9,13];">
var currentImg = 1;
function imgSlider(n) {
	var currentImgCon = document.getElementById(&quot;pic_&quot;+ currentImg);
	var btn_previous = document.getElementById(&quot;btn_previous&quot;);
	var btn_next = document.getElementById(&quot;btn_next&quot;);
	currentImgCon.setAttribute(&quot;class&quot;,&quot;&quot;);
	currentImgCon.className = &quot;&quot;;
	currentImg = currentImg + n;
	if (currentImg &gt; 1 || currentImg &lt; 5 ) {
		var targetImgCon = document.getElementById(&quot;pic_&quot;+ currentImg);
		targetImgCon.setAttribute(&quot;class&quot;,&quot;current&quot;);
		targetImgCon.className = &quot;current&quot;;
	}
}
</pre>
<p>可运行一下,发现到第5张时候再点&#8221;Next&#8221;就什么都显示不出来了,再点&#8221;Previous&#8221;也没反应了,为什么呢?我们用input来跟踪下currentImg的数值变化:<br />
在HTML中添加一个input:</p>
<pre class="brush: xml;">
&lt;input type=&quot;text&quot; value=&quot;&quot; id=&quot;logger&quot;/&gt;
</pre>
<p>JavaScript做如下修改:</p>
<pre class="brush: jscript;">
document.getElementById(&quot;logger&quot;).value = currentImg;
</pre>
<p>刷新下页面,点到最后发现currentImg的值是6,超出了1-5这个范围,自然执行不了我们if条件里的语句了.怎么解决这个问题呢,其实很简单,当页面当前显示的是第一张图片时我们就将&#8221;Previous&#8221;button 屏蔽掉,同理,当页面当前显示的是第5张,也就是最后一张的时候屏蔽掉&#8221;Next&#8221;button,事情就解决了.其它情况下两个button正常显示~~哈哈</p>
<p>初始的时候就要先将&#8221;Previous&#8221; button 置为disabled</p>
<pre class="brush: xml;">
&lt;input type=&quot;button&quot; onclick=&quot;imgSlider(-1)&quot; id=&quot;btn_previous&quot; value=&quot;Previous&quot; disabled=&quot;disabled&quot;/&gt;
</pre>
<p>JavaScript添加如下代码:</p>
<pre class="brush: jscript;">
if(currentImg == 1) {
	btn_previous.setAttribute(&quot;disabled&quot;,&quot;disabled&quot;);
}else {
	btn_previous.removeAttribute(&quot;disabled&quot;);
}

if(currentImg == 5) {
	btn_next.setAttribute(&quot;disabled&quot;,&quot;disabled&quot;);
}else {
	btn_next.removeAttribute(&quot;disabled&quot;);
}
</pre>
<p>大功告成~~<a href="http://www.imdonkey.com/demo/img_slider.html" target="_blank">最终效果</a></p>
<h2><a href="http://www.imdonkey.com/demo/img_slider.html" target="_blank"></a><br />
知识点:</h2>
<ol>
<li>CSS3 渐变<a href="http://www.qianduan.net/understand-the-css3-gradient.html">http://www.qianduan.net/understand-the-css3-gradient.html</a></li>
<li>CSS Selector</li>
<li>CSS 缩写<a href="http://www.qianduan.net/css-font-shorthand-attribute-handbook.html">http://www.qianduan.net/css-font-shorthand-attribute-handbook.html</a></li>
<li>input disabled属性</li>
<li>function定义</li>
<li>全局变量定义/初始化</li>
<li>document.getElementById(&#8220;idName&#8221;)</li>
<li>setAttribute(&#8220;attributeName&#8221;,&#8221;attributeValue&#8221;)</li>
<li>removeAttribute(&#8220;attributeName&#8221;)</li>
<li>if else</li>
</ol>
<h2>下期预告:放大镜~~~</h2>
]]></content:encoded>
			<wfw:commentRss>http://imdonkey.com/blog/archives/368/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>页面重构合理化讨论后续</title>
		<link>http://imdonkey.com/blog/archives/143</link>
		<comments>http://imdonkey.com/blog/archives/143#comments</comments>
		<pubDate>Sat, 30 Jan 2010 15:20:09 +0000</pubDate>
		<dc:creator>Ting</dc:creator>
				<category><![CDATA[Web标准化交流会]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[YUI3]]></category>
		<category><![CDATA[依赖关系管理]]></category>
		<category><![CDATA[前端工程师]]></category>

		<guid isPermaLink="false">http://imdonkey.com/blog/?p=143</guid>
		<description><![CDATA[主持人:<a href="http://www.webchina110.cn/">周裕波</a>

嘉宾:<a href="http://hikejun.com/blog/">张克军</a>/月影/赵立元/管凌峰

讨论主题:页面重构合理化讨论后续
<h4>Javascript AJAX DOM</h4>
<ul>
	<li>如何创建自己的js库或js框架,选择JS库或框架</li>
	<li>JS的管理</li>
	<li>JS的性能</li>
</ul>
<h4>HTML5+CSS3应用的时机</h4>
<ul>
	<li>现阶段是否考虑应用HTML5和CSS3部分特性</li>
	<li>如何应用HTML5</li>
	<li>如何应用CSS3</li>
</ul>
具体会议记录如下:

(主):首先向大家说下针对此次会议场地的注意事项(略).Web标准化交流会办到现在已经是第四期了,今天从农历来说是2009年的最后一期,但从阳历来讲是2010年的第一期.代表交流会欢迎新老同学.首先感谢<a href="http://www.sina.com">新浪</a>为我们提供这么好的会议场地. 今天北京,上海,广州都同步进行交流会(主题同步).下面进入主要环节.先是环场介绍,请到场的嘉宾自我介绍下...(略)<p class='read-more'><a href='http://imdonkey.com/blog/archives/143'>阅读全文 »</a></p>]]></description>
			<content:encoded><![CDATA[<p>主持人:<a href="http://www.webchina110.cn/">周裕波</a></p>
<p>嘉宾:<a href="http://hikejun.com/blog/">张克军</a>/月影/赵立元/管凌峰</p>
<p>讨论主题:<strong>页面重构合理化讨论后续</strong></p>
<h4>Javascript AJAX DOM</h4>
<ul>
<li>如何创建自己的js库或js框架,选择JS库或框架</li>
<li>JS的管理</li>
<li>JS的性能</li>
</ul>
<h4>HTML5+CSS3应用的时机</h4>
<ul>
<li>现阶段是否考虑应用HTML5和CSS3部分特性</li>
<li>如何应用HTML5</li>
<li>如何应用CSS3</li>
</ul>
<p>具体会议记录如下:</p>
<p><strong><span style="color: #ff6600;">(主):</span></strong>首先向大家说下针对此次会议场地的注意事项(略).Web标准化交流会办到现在已经是第四期了,今天从农历来说是2009年的最后一期,但从阳历来讲是2010年的第一期.代表交流会欢迎新老同学.首先感谢<a href="http://www.sina.com">新浪</a>为我们提供这么好的会议场地. 今天北京,上海,广州都同步进行交流会(主题同步).下面进入主要环节.先是环场介绍,请到场的嘉宾自我介绍下&#8230;(略)</p>
<p><strong><span style="color: #ff6600;">(主):</span></strong>现在进行本期主题讨论:</p>
<h4>Javascript AJAX DOM</h4>
<p>先请嘉宾对此主题进行一些分享.然后可以由每位嘉宾带领一部分支持自己观点的同学进行分组讨论</p>
<p><span style="color: #ff6600;"><strong>(月影):</strong></span>对于团队开发所使用的JS类库,我个人比较喜欢jQuery.脚本的管理要根据项目需求与类型来,比如轻量级的项目,就更注重函数依赖等方面的研究,粒度可能会细化到一个function.然后再找到依赖的类.但如果是重量级的就会更加注重多人协作,基础类库和代码缓存等方面,不会特别在意依赖,而是会在意包的管理与代码的冲突.总之结论是:<strong>根据应用选择适合的框架</strong></p>
<p>喜欢jQuery的原因是简单.YUI在大的项目应用上比jQuery出色.目前在自己负责的项目中使用的脚本库会分为3层.以后有机会会将相关经验跟代码分享给大家.</p>
<p><span style="color: #ff6600;"><strong>(主):</strong></span>谢谢月影的分享,下面请克军分享下这方面的丰富经验,因为克军曾经在Yahoo做过很长时间.对于YUI应该更加了解.</p>
<p><strong><span style="color: #ff6600;">(克军):</span></strong>Yahoo的开发方式是讲究团队合作,非常强调代码结构的一致性与模块的管理. 做的都是整体性很强的东西.注重文档化.但是缺点是不够灵活.YUI在前端开发的理念问题上也有一些变化.05年之后都是库的概念,共同功能的集合.YUI3出来后,变化为不是功能的聚焦而是注重模块的组织,依赖的管理的系统.思想更倾向于团队协作与可维护性.当然每个人的代码风格不同,但Yahoo会限制个人风格,为了让开发人员的风格尽可能的统一,&#8221;限制&#8221;是必须要有的,但是要有一定的灵活性.库与框架是两个级别的东西.做前端框架 的人要考虑库与框架的结构.</p>
<p>豆瓣的JS目前是不提供业务层的,有核心库可灵活的加各种库,目前使用的jQuery.关键是在核心的基础上如何组织.之前我们总在讨论JS库,其实不用过多的考虑,做为第三方它们在功能方面已经很成熟了.就拿网易的JS来说.它分大块的和inline两种.所以代码的管理就显得特别重要.个人主张统一风格,对开发有利.jQuery与YUI其实没有太大可比性.jQuery最新版本的变化很大,已经60多K.作者也在考虑它的结构.不过目前这种大小还是可以接受的.</p>
<p><span style="color: #ff6600;"><strong>(主):</strong></span>谢谢克军,下面请新浪产品负责人赵立元进行分享</p>
<p><strong><span style="color: #ff6600;">(赵立元):</span></strong>我想先了解下在座各位目前哪些朋友在工作中经常使用JS或者框架(人数不多).我来介绍下新浪的方法吧.不讲技术上的细节.新浪有自己的开发JS库.新浪目前有13个产品,代码的可维护性是个很大的难题,新人在接手项目的时候也非常吃力.所以想统一.当时参照了几个开发框架，其中包括了YUI2.如果使用自己开发的类库一是灵活度高二是风险低.自己做框架可与底层更好的结合,升级可以自动化,有问题可以rollback. 之前我们有开发文档,但是效果不好,后来我们就改为在代码里写注释,然后通过工具把注释提取出来方便多人协作.关于JS性能方面参考Yahoo的优化条例其中的几条就差不多可以了.</p>
<p><span style="color: #ff6600;"><strong>(主):</strong></span>因为大多数朋友对于这个话题本身还没有过多过深的研究,所以现在我们就抓紧这个难得的机会可以就这个话题向各位嘉宾提问.</p>
<p><span style="color: #999999;">以下是截取的部分提问回答记录</span></p>
<p><span style="color: #000000;"><strong><span style="color: #ff6600;">Q:</span></strong><span style="color: #ff6600;">如何区分一个方法是核心级的还是应用级的?</span></span></p>
<p><span style="color: #000000;"><strong><span style="color: #339966;">A(张克军):</span></strong>核心层解决的是创建标准化的浏览层,API的风格不一样.应用级的是与产品业务如Movie,Music相关的是应用级.如果与UE实际结合得密切的话,如果注意体验的话会更多的关注这些统一UE的库,那么也算应用层.所以分下来就是核心/全站/产品三个级别.</span></p>
<p><span style="color: #ff6600;"><strong>Q:</strong>依赖的概念是什么?</span></p>
<p><span style="color: #000000;"><span style="color: #339966;"><strong>A(月影):</strong></span>如果你是要包括所有基本库的话没问题.但是有时是会为了一个简单的功能而去加载大库,非常不合算.就是一种很极端的情况,访问量非常大但是功能却非常简单,比如它只用到了这个库里10个方法中的两个.依赖管理就是开发的时候加载整个库,但是产品在上线的时候却只加载真正用到的那2个方法.</span></p>
<p><span style="color: #ff6600;"><strong>Q:</strong>网站的脚本是否都进行压缩?</span></p>
<p><span style="color: #ff6600;"><strong><span style="color: #339966;">A:</span></strong><span style="color: #000000;">是的.产品差异大.这是由应用特征决定的.基础类库会拆分为基础与产品两种,然后定规范.</span></span></p>
<p><strong><span style="color: #ff6600;">Q:</span></strong><span style="color: #ff6600;">前端的HTML,CSS也要压缩么?</span></p>
<p><strong><span style="color: #339966;">A:</span></strong>是的,工具就使用YUI提供的压缩工具就行.</p>
<p><strong><span style="color: #ff6600;">Q:</span></strong><span style="color: #ff6600;">网站公用的header里会加载多个JS.但是页面里却只用到其中一点,这时候要怎么处理?</span></p>
<p><span style="color: #ff6600;"><strong><span style="color: #339966;">A(张克军):</span></strong></span>对于这种情况下后端的处理方法很简单就是都引入都加载.但是如果当我们有一套依赖管理系统就可以解决.产品上线的时候自动找方法所依赖的东西.</p>
<p>今天先总结到这里,其实讨论到这里大家还对于前端工程师的价值,理想等问题发表了各自的一些见解,非常热烈,也相当精彩.我会在最后做简单总结.</p>
]]></content:encoded>
			<wfw:commentRss>http://imdonkey.com/blog/archives/143/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
