YUI介绍和使用YUI构建web应用

Filed in Uncategorized Leave a comment

https://speakerdeck.com/adamlu/yuijie-shao-he-shi-yong-yuigou-jian-webying-yong

WebApp开发工具

Filed in Javascript/DHTML | Mobile 1 Comment

最近折腾了一些开发调试工具,在前端开发中可以大大提升效率和前端性能并使工作流更加顺畅。

1. 基于任务的命令行构建工具Grunt
类似于Jake,支持以下预定义任务:
concat – 合并文件
init – 从预定义模板生成项目框架结构
lint – 用JSHint校验文件
min – 用UglifyJS压缩文件
qunit – 用无头PhantomJS实例运行QUnit单元测试
server – 开启一个静态Web服务器
test – 用nodeunit运行单元测试
watch – 当观察的文件改变时运行预定义的任务
安装(确保node和npm已经安装):npm install -g  grunt-cli
假定我们只对现有的项目做合并、压缩和校验的工作,那么可以先创建一个package.json和Gruntfile.js两个文件
package.json基于Packages规范如:
{
“name”: “my-project-name”,
“version”: “0.1.0″,
“devDependencies”: {
“grunt”: “~0.4.1″,
“grunt-contrib-jshint”: “~0.1.1″,
“grunt-contrib-uglify”: “~0.2.0″,
“grunt-contrib-concat”: “~0.1.3″,
“grunt-contrib-nodeunit”: “~0.1.2″
}
}
安装Grunt和Grunt插件:npm i grunt grunt-contrib-nodeunit grunt-contrib-concat grunt-contrib-jshint grunt-contrib-uglify –save-dev

Gruntfile.js是一个在项目根目录下的JavaScript文件,这个文件由下面组成:
“封装”函数、项目和任务配置、加载Grunt插件和任务、自定义任务,
如下:
module.exports = function(grunt) {
//project configuration
grunt.initConfig({
pkg: grunt.file.readJSON(‘package.json’),
concat: {
main: {
src: ['config.js', 'jquery-1.8.2.min.js', 'core.js'],
dest: ‘build/main.js’
},
css: {
src: ['css/Main.css', 'css/App.css'],
dest: ‘build/css/main.css’
}
},
jshint: {
main: {
src: ‘build/main.js’
}
},
uglify: {
build: {
src: ‘build/main.js’,
dest: ‘build/output/main.js’
}
}
});
grunt.loadNpmTasks(‘grunt-contrib-concat’);
grunt.loadNpmTasks(‘grunt-contrib-jshint’);
grunt.loadNpmTasks(‘grunt-contrib-uglify’);
grunt.registerTask(‘concat’, ['concat']);
grunt.registerTask(‘jshint’, ['jshint']);
grunt.registerTask(‘uglify’, ['uglify']);
};
具体每部分的作用请看官网介绍。

这样就注册了三个任务,只要在控制台运行grunt concat,运行结果大致如下:
Runing “concat:main” (concat) task
File “build/main.js” created.
Running “concat:css” (concat) task
File “build/css/main.css” created.
Done, without errors.

同样可以运行grunt jshint和grunt uglify来校验和压缩文件。

2. WebStorm
WebStorm是一个强大的前端开发IDE,这里有比较详细的介绍

3. YUIDoc
文档是保证项目可维护必不可少的环节,YUIDoc是一个基于NodeJs的文档生成工具。YUIDoc会解析JavaScript的注释块,所以需要按照YUIDoc提供的语法来写您的注释,如:
/**
* 类的描述
* @class MyClass
* @constructor
*/
/**
* 方法描述
* 可以是多行
* @method methodName
* @param {String} foo Argument 1
* @param {Object} config A config object
* @param {String} config.name The name on the config object
* @param {Function} config.callback A callback function on the config object
* @param {Boolean} [extra=false] Do extra, optional work
* @return {Boolean} Returns true on success
*/
之后在你的项目根目录运行yuidoc .即可,如果你想实时看你修改的情况,可以运行yuidoc –server 5000以服务器模式运行,然后访问http://127.0.0.1:5000/当你刷新浏览器时就会看到反应。

4. Chrome开发者工具
Chrome的开发者工具变得越来越强大,最新版不仅支持”Scroll into View”(在Elements里选择后点击页面会跳转到对应位置),还可以在右侧栏点击”Toggle Element State”观察元素:hover :active时的样式。
在Mobile开发方面,点击右下角的设置可以设置”User Agent” “Device Metrics” “Geolocation” “Touch Events”等方便调试,同时要善于利用Profiles来检测内存泄露和DOM泄露。
如果你想跟随潮流,那不妨使用Chrome Canary进行开发和调试。
Chrome还提供了一些配置,如chrome://flags,你可启用”合成渲染层边框”来看webkit的渲染层

Slide<一步一步开发HTML5移动应用>

Filed in HTML5 1 Comment

一步一步开发HTML5移动应用:

https://speakerdeck.com/adamlu/bu-bu-kai-fa-html5-mobile-apps

强大的checkbox/radio

Filed in HTML5 | Javascript/DHTML 1 Comment

2013年的第二天,怎么也该写一篇了。

网上看了一个Slide讲如何使用checkbox/radio的:checked做一系列丰富的效果,发现这个小小的标签竟然能做的东西太多了,主要利用了checkbox/radio是否checked状态时的CSS选择器做一些只需要很少JS就能实现的效果。

1. 按钮组

Markup:

<div class=”btn-group” data-toggle=”buttons-checkbox”>
<input type=”checkbox” id=”group1″ data-toggle=”button”>
<label class=”btn btn-primary” for=”group1″>Left</label>

<input type=”checkbox” id=”group2″ data-toggle=”button”>
<label class=”btn btn-primary” for=”group2″>Middle</label>

<input type=”checkbox” id=”group3″ data-toggle=”button”>
<label class=”btn btn-primary” for=”group3″>Right</label>
</div>

CSS:

input[data-toggle]:checked + label,
input[data-toggle]:checked + label:active {
background-color: #0044CC;
color: #FFFFFF;
background-image: none;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15) inset,
0 1px 2px rgba(0, 0, 0, 0.05);
outline: 0 none;
}
.btn-group > .btn:first-of-type {
border-bottom-left-radius: 4px;
border-top-left-radius: 4px;
margin-left: 0;
}​

原理:结合checkbox/radio的选择状态美化checkbox/radio的label,实现类似ios上按钮组的效果。

2. 下拉菜单

Markup:

<ul class=”nav” role=”navigation” id=”dropdowns”>
<li class=”dropdown”>
<input type=”radio” name=”dropdowns” id=”dropdown1″>
<label for=”dropdown1″ class=”dropdown-toggle” onclick>
Dropdown
<b class=”caret”></b>
</label>

<ul class=”dropdown-menu” role=”menu”>
<li><a tabindex=”-1″ href=”#”>Action</a></li>
… more items
</ul>
<label for=”dismissdd” class=”dismiss-dd” onclick>Dismiss</label>
</li>
</ul>

CSS:

#dropdowns input[type="radio"] ~ .dismiss-dd {
display: none;
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 999;
padding: 0 !important;
background: transparent !important;
line-height: 0;
cursor: default;
}

#dropdowns input[type="radio"]:checked ~ .dropdown-menu,
#dropdowns input[type="radio"]:checked ~ .dismiss-dd {
display: block;
}

原理:结合radio选择状态用兄弟选择器控制菜单显示与否。​

3. 折叠

Markup:

<input type=”radio” name=”accordion-group” id=”collapseAll”>
<div class=”accordion-group”>
<input type=”radio” id=”collapse1″ name=”accordion-group” checked>
<label for=”collapseAll” class=”accordion-dismiss”></label>

<div class=”accordion-heading”>
<label for=”collapse1″ class=”accordion-toggle”>Heading #1</label>
</div>
<div id=”collapseOne” class=”accordion-body collapse”>
<div class=”accordion-inner”>

</div>
</div>
</div>

CSS:

#collapse .accordion input ~ .collapse {
max-height: 0;
height: auto;
transition: max-height 0.2s ease 0s;
}
#collapse .accordion input:checked ~ .collapse {
max-height: 500px;
transition-duration: 0.7s;
}

原理:结合radio选择状态用兄弟选择器控制折叠内容显示与否,同时外层的radio控制取消所有折叠。

4. 模态对话框

Markup:

<!– Modal 1 –>
<label class=”btn” for=”modal1″ onclick>Launch ze modal</label>
<input type=”radio” id=”modal1″ name=”modal” />

<div class=”modal hide fade”>
<div class=”modal-header”>
<label role=”button” class=”close” for=”closemodal”>×</label>
<h3>Modal header</h3>
</div>
<div class=”modal-body”>…</div>
<div class=”modal-footer”>
<label role=”button” class=”close” for=”closemodal”>Close</label>
</div>
</div>

<!– Overlay and close –>
<input type=”radio” id=”closemodal” name=”modal” />
<label for=”closemodal” class=”modalclose”>&nbsp;</label>

CSS:

#modals input + .modal {
left: 50%;
margin: 0;
top: 0;
opacity: 0;
transition: transform 0.3s ease-in, opacity 0.3s linear;
transform: translate(-50%,-100%);
}
#modals input:checked + .modal {
opacity: 1;
transition-delay: 0.4s;
transform: translate(-50%,20%);
}
#modals input + .modalclose {
transition: opacity 0.3s linear;
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
z-index: -1;
opacity: 0;
}
#modals input:not(#closemodal):checked ~ .modalclose {
opacity: 0.8;
z-index: 1;
background: #000;
margin: 0 !important;
transition-delay: 0;
}​

原理:结合radio选择状态用兄弟选择器控制对话框显示与否,模态层为label标签控制raido切换开关状态。

5. 幻灯片

Markup:

<input type=”radio” id=”slide1″ name=”slider” checked>
<input type=”radio” id=”slide2″ name=”slider”>

<div class=”slides”>
<div class=”carousel-inner”>
<div class=”item”>
<img src=”…” alt=”">
<div class=”carousel-caption”>
<h4>Pic 1</h4>

</div>
</div>
</div>
<div id=”controls”>
<label for=”slide1″>
<span>&lsaquo;</span><span>&rsaquo;</span>
</label>
<label for=”slide2″>
<span>&lsaquo;</span><span>&rsaquo;</span>
</label>
</div>

CSS:

bootleg-carousel.css

原理:结合radio的选择状态用兄弟选择器控制幻灯主体内容显示与否,用子选择类型选择器控制箭头显示哪些箭头。

以上例子请看这个DEMO,同时Ryan Seddon也创建了一个使用:checked伪类制作JavaScript组件的库Bootleg,可以看看。

会遇到的Bug是Safari5.1和Chrome13之前的版本不支持下面这种情况:

// Off
input[type="checkbox"] ~ div {
// Fancy styles
}

// On
input[type="checkbox"]:checked ~ div {
// Fancy styles
}

ios5以下的Safari需要onclick属性才能在点击label时选中checkbox/radio

<input type=”checkbox” id=”foo”>
<label onclick=”" for=”foo”>I need an onclick in iOS</label>

国内也有人利用这个技术做了一个类似Path的DEMO,这里http://sandbox.runjs.cn/show/boi7xnyd

更多演示:

 

HTML5概览

Filed in HTML5 2 Comments

给某单位的培训:
https://speakerdeck.com/adamlu/html5gai-lan

无觅相关文章插件,快速提升流量

TOP