KISSY的Switchable组件
通过Slide来学习Switchable的实现方式。
神马是Slide,就是每天我们在淘宝首页之类的地方看见的轮播图
Slide的初始化很简单:
Slide(‘#demo2′, {
effect: ‘scrolly’,
// slide特效组件其实不需要
aria:false,
easing: ‘easeOutStrong’
});
Archive for the ‘ 前端 ’ Category
通过Slide来学习Switchable的实现方式。
神马是Slide,就是每天我们在淘宝首页之类的地方看见的轮播图
Slide的初始化很简单:
Slide(‘#demo2′, {
effect: ‘scrolly’,
// slide特效组件其实不需要
aria:false,
easing: ‘easeOutStrong’
});
先引用一段
在那些浏览器下会有跨域问题:http://www.36ria.com/3890
postMessage方式对于ie这样顽固的浏览器是无效的,我们采用一个变通的方式window.name来实现ie6、7下面的跨域。 阅读全文
作用:属性,返回KISSY的版本号
参数:无
举例:
Code:
KISSY.version;//1.1.6
作用:属性,返回KISSY的打包时间
参数:无
举例:
KISSY.buildTime;// 20110825162101
作用:将所传的对象一次合并,并返回一个新的对象
说明:这个函数是调用mix方法来多次合并对象,不会覆盖前面对象的属性,主要用于简单的对象合并
参数:{Object} a1 对象
举例:
var a1 = {a:1,b:2},a2 = {a:2,c:3};
KISSY.merge(a1,a2);//{a:1,b:2,c:3}
KISSY.merge(a2,a1);//{a:2,b:2,c:3}
作用:将s1,s2……的原型(prototype,如果没有就复制成员)复制到r上面
说明:这个函数也是由mix方法派生出来的,但是和merge相比会复制原型链,主要用于方法类的复制。
参数:
{Function} r 目标对象
{Function|Object} s1(s2……) 源对象
{Boolean} ov 是否是覆盖模式(override),如果r存在A属性,那么是否要用s的A属性覆盖之,默认为false
{Array} wl 白名单(write List),如果非空就只拷贝wl数组里面的属性
举例:
function animal(){
this.name= ‘animal’;
this.eat = function(){};
this.say=function(){alert(‘miaomiao’);}
}
KISSY.augment(animal,{color:’white’});
new animal();//此时已经有color属性了
作用:将s1,s2……的原型(prototype,如果没有就复制成员)复制到r上面
说明:这个函数也是由mix方法派生出来的,但是和merge相比会复制原型链,主要用于方法类的复制。
参数:
{Function} r 目标对象
{Function } s 需要继承的对象
{Object} px 需要添加(或者覆盖)到原型链(prototype)的参数列表
{Object} sx 需要直接添加(或者覆盖)的方法列表
举例:
function Animal(){}
Animal.prototype.name= ‘animal’;
Animal.prototype.eat = function(){};
Animal.prototype.say=function(){alert(‘miaomiao’);}
function Cat(){}
Cat.name=‘mimi’;
KISSY.extend(Cat,Animal);
new Cat();//此时已经有color属性了
主要是三个重要的方法:merge、augment、extend这是面向对象编程的重要方法,这三个方法在不同的场合使用,有些时候可以通用。细节还是要多多体会。
先看效果
在有些地方默认的radio效果已经不能满足很多交互需求
如果抛弃默认的radio控件又会丢失很多重要的属性,比如后退或者F5之后表单信息的存储.
利用label与input的对应关系,把radio隐藏,显示label标签
然后根据name属性利用js对表单分组处理
原理就是这样的
html代码:
CSS部分:
.form .tb-radio {
display: none;
width: 0;
height: 0;
margin: 0;
padding: 0;
position: absolute;
}
.form .tb-radio-label {
line-height: 26px;
height: 26px;
border: 1px solid #ddd;
display: inline-block;
padding: 1px 17px;
outline: none;
cursor: pointer;
margin-top: 15px;
}
.form .tb-radio-label.crt,
.form .tb-radio-label:hover,
.form .tb-radio-label.hover,
.form .tb-radio-label:focus {
border: 2px solid #ff6600;
line-height: 26px;
*line-height: 27px;
_line-height: 26px;
height: 26px;
padding: 0 16px;
background-color: #eaeaea;
outline: none;
}
.form .tb-radio-label.crt {
background: url(images/sprites.png) no-repeat 100% -702px;
background-color: #eaeaea;
}
JS部分:
KISSY.ready(function(S){
//代码开始
var DOM = S.DOM,
Event = S.Event;
var TBRadioLabels = S.query('.J_Radio');
//从checked状态中读取选择情况
S.each(TBRadioLabels,function(i){
var t_radio = getInputByLabel(i);
if(t_radio.checked){
DOM.addClass(i,'crt');
}
});
//点击或者回车触发选择
Event.on(TBRadioLabels,'click keydown',function(ev){
if(!S.isUndefined(ev.keyCode) && ev.keyCode != 13 && ev.keyCode != 0) return ;
var radioGroup = DOM.attr(getInputByLabel(ev.currentTarget),'name');
S.each(TBRadioLabels,function(i){
if(DOM.attr(getInputByLabel(i),'name') === radioGroup){
DOM.removeClass(i,'crt');
}
});
getInputByLabel(ev.currentTarget).checked = true;
DOM.addClass(ev.currentTarget,'crt');
});
//通过label获取对应的input
function getInputByLabel(label){
var inputId = '#'+DOM.attr(label,'for');
return S.get(inputId);
}
});
附上demo:http://lansepink.appspot.com/media/aglsYW5zZXBpbmtyDQsSBU1lZGlhGJqJJAw/radio.htm