SlideShare uma empresa Scribd logo
1 de 50
从 YUI3 到 KISSY!
  拔赤 bachi@taobao.com
http://www.uedagazine.com
        2010-09-21
初识KISSY

• An Enjoyable JavaScript Library

• 小巧灵活,简洁实用
• 使用起来让人感觉愉悦。
开发中的KISSY




 http://github.com/kissyteam/kissy
            KISSY源码
KISSY的子项目




  http://github.com/kissyteam
         KISSY子项目
KISSY的结构
• Seed
  – kissy
• Core
  – ua,dom,event,ajax,cookie,json,anim
• Css
  – reset,grid,common
• Utilities
  – Sizzle,datazyload,flash
• Widgets
KISSY的结构
• Seed
  – kissy
• Core
  和YUI3很像?其实很不同!
  – ua,dom,event,ajax,cookie,json,anim
• Css
  – reset,grid,common
• Utilities
  – Sizzle,datazyload,flash
• Widgets
开始!
种子的引入
• 目前最新版本 1.1.4
• http://a.tbcdn.cn/s/kissy/1.1.4/kissy-min.js
程序启动
/* YUI3 */
YUI().use('*',function(Y){
     //your code
});


/* KISSY */
KISSY.use('core',function(S){
     //your code...
});
调用多模块
/* YUI3 */
YUI().use('mod1','mod2',function(Y){
     //your code
});


/* KISSY */
KISSY.use('mod1,mod2',function(S){
     //your code...
});
KISSY OOP
      函数名            注释
      S.mix     对象的合并(替换)
     S.merge    对象合并(不替换)
   S.augment        类扩充
    S.extend        类继承
  S.namespace      命名空间
      S.app       生成应用实例
      S.each         遍历
应用的创建
/*YUI3,创建一个保险险种应用*/
var INS = YUI();
INS.add('xz',function(Y){
     Y.namespace('XZ');
     Y.XZ = {
          init:function(){/*your code*/}
     };
});
INS.use('xz',function(){
     Y.XZ.init();
});
应用的创建 续
/*KISSY,创建一个保险险种应用*/
KISSY.app('INS');//创建“保险”应用
INS.namespace('XZ');//创建“险种”命名空间
INS.add('xz',function(S){
     S.XZ = {
          init:function(){/*your code*/}
     };
     //S指向INS
});
INS.use('xz',function(S){
     S.XZ.init();
});
app 方法为基于 KISSY 的应用提供了最基本的代码组织方式。
浏览器探测 - YUI




     YUI对浏览器的探测
浏览器探测 - KISSY
• S.UA只存储当前浏览器相关的属性
 – 比如在firefox里就不存在S.UA.ie




    KISSY在ff下对浏览器的探测
更多浏览器外壳的嗅探

   S.UA.外壳          注释
  S.UA.se360     360“安全”浏览器
 S.UA.maxthon       傲游
    S.UA.tt        腾讯浏览器
 S.UA.theworld     世界之窗
 S.UA.sougou       搜狗浏览器
KISSY.Node
获取节点

 功能          YUI3              KISSY
抓取一个节点   Y.one('.class')   S.one('.class')
抓取节点列表   Y.all('.class')   S.all('.class')




 KISSY对Dom的封装和Jquery类似
Selector
• KISSY默认仅支持这些选择器
 –   #id
 –   tag
 –   .cls
 –   #id tag
 –   #id .cls
 –   tag.cls
 –   #id tag.cls
更多选择器需载入Sizzle
/*KISSY 引入Sizzle*/
KISSY.use('core,sizzle',function(S){
     var node = S.one('div span');
     //...
});




    Sizzle: http://sizzlejs.com/
YUI3和KISSY的Node(list)
  含义             YUI3           KISSY
获取节点数           .size()        .length
添加class名     .addClass()    .addClass()
 向上查找        .ancestor()      .parent()
 挂载节点         .append()      .append()
将节点挂到..     .appendTo()    .appendTo()
 克隆节点      .cloneNode()           #


  YUI3和KISSY的node常用方法对照
YUI3和KISSY的Node(list) 续
  含义                   YUI3            KISSY
 事件代理             .delegate()             #
解除事件绑定        .detach/detachAll      .detach()
遍历nodelist           .each()              #
 获取属性                 .get()           .attr()
 获取坐标            .getX/Y/XY()         .offset()
包含class名          .hasClass()       .hasClass()
 在视野内        .inViewportRegion            #
之后插入节点              .insert()     .insertAfter()
YUI3和KISSY的Node(list) 续
   含义              YUI3             KISSY
 之前插入节点    .insertBefore()   .insertBefore()
 取第i个元素          .item(i)          node[i]
 绑定事件监听      .on(type,cb)      .on(type,cb)
最前插入子节点       .prepend()              #
 上一个节点        .previous()          .prev()
 下一个节点               #             .next()
 获得兄弟节点      .getSibling()       .siblings()
获得一个子孙节点        .query()            .one()
YUI3和KISSY的Node(list) 续
   含义               YUI3         KISSY
获得一组子孙节点        .queryAll()       .all()
 删除本节点           .remove()          #
 删除节点属性   .removeAttribute() .removeAttr()
 删除class名    .removeClass()  .removeClass
删除一个子节点      .removeChild()         #
 替换class名    .replaceClass() .replaceClass
 替换(子)节点         .replace()         #
             .replaceChild()
YUI3和KISSY的Node(list) 续
     含义              YUI3            KISSY
   得到裸节点        .set/setAttrs()      .attr()
  设置(获得)样式      .set(get)Style        .css()
得到(设置)innerHTML        #            .html()
   更改class名     .toggleClass() .toggleClass()
 获得节点内容文本              #             .text()
 获得input的value         #              .val()
    获得宽度               #           .width()
    获得高度               #          .height()
获得nodelist的节点数
/* YUI */
nodelist.size(); //节点个数
nodelist.item(i); //找到第i个节点




/* KISSY */
nodelist.length; //节点个数
nodelist[i]; //找到第i个节点
创建节点,写节点内容
/* YUI */
var node = Y.Node.create('<div></div>')
node.set('innerHTML','content');




/* KISSY */
var node = S.Node('<div></div>');
node.html('content');
获得innerHTML和"innerText"
 /* YUI */
 node.get(‘innerHTML’) //获得innerHTML
 //yui没有提供获得innerText的方法




 /* KISSY */
 node.html(); //得到innerHTML
 node.text(); //过滤掉html标签后的内容
清除节点事件

//清除mouseover事件所有的绑定
node.detach('mouseover');
//清除mouseover事件对foo的绑定
node.detach('mouseover',foo);
//清除node上所有的事件
node.detach();
遍历nodelist
 /* YUI */
 nodelist.each(function(node,i){
      //your code
 });



 /* KISSY */
 S.each(nodelist,function(node,i){
      //your code
 });
得到节点坐标
/* YUI */
node.getXY(); //得到[x,y]
node.getX(); //得到x
node.getY(); //得到y



/* KISSY */
node.offset().left; //得到x坐标
node.offset().top; //得到y坐标
得到DOM节点

/* YUI */
Y.Node.getDOMNode(node); //得到DOM节点



/* KISSY */
node[0]; //直接得到DOM节点
node.getDOMNode(); //通过方法得到DOM节点
nodelist.getDOMNodes(); //得到DOM节点列表


   可以把nodelist本身就当成一个
       DOMNodeList
获得元素的region

/* YUI */
var r = node.get('region'),
    left = r.left,
    top = r.top,
    right = r.right,
    bottom = r.bottom,
    width = r.width,//outterWidth
    height = r.height;   //outterHeight
获得元素的region 续
/* YUI */
var r = node.offset(),
    left = r.left,
    top = r.top,
    right = r.right, //undefined
    bottom = r.bottom, //undefined
    width = node.width(), //innerWidth
    height = node.height(); //innerHeight


          如果必要,请直接使用
 node[0].offsetHeight/offsetWidth来获得
          outterHeight/Width
写样式
/* YUI */
node.setStyle(‘height’,‘10px’); //单个设置
node.setStyle(‘height’,10);
node.setStyles({ //批量设置
     'height':'10px',
     'width': '20px'
});

/* KISSY */
node.css('height','10px'); //单个设置
node.css('height',10);
node.css({ //批量设置
     'height':10,
     'width':'20px'
});
读样式

/* YUI */
node.getStyle(‘height’); //获得样式




/* KISSY */
node.css(‘height’); //获得样式
快捷调用事件
/* YUI */
node.blur()
node.submit()
node.focus()
node.select()
node.reset()
node.scrollIntoView()

/* KISSY */
node[0].blur()
node[0].submit()
node[0].focus()
node[0].select()
node[0].reset()
node[0].scrollIntoView()
KISSY.Event
绑定事件

/* YUI */
node.on('click',function(e){
     e.halt(); //阻止事件
     //得到包装好的目标元素
     var node = e.target;
     //得到裸的目标元素
     var el = Y.Node.getDOMNode(node);
});
绑定事件 续

/* KISSY */
node.on('click',function(e){
     e.preventDefault(); //阻止事件
     var el = e.target; //得到裸目标元素
     //得到包装好的目标元素
     var node = S.Node(el);
});
自定义事件-YUI
/* YUI */
var EventFactory = function(){
     this.publish('customEvent');
};
Y.augment(EventFactory, Y.Event.Target);
var EventCenter = new EventFactory();

EventCenter.fire('customEvent',{
     param:param
});

EventCenter.subscribe('customEvent',function(e){
     //e完全自定义
     S.log(e.param)
});
自定义事件-KISSY
/* KISSY */
var EventFactory = new Function;
S.augment(EventFactory, S.EventTarget);
var eventCenter = new EventFactory();

EventCenter.fire('customEvent',{
     param:param
});

eventCenter.on('customEvent',function(e){
     //e是一个Event Faced,e上挂载了参数的回调
     e.preventDefault();
     S.log(e.param);
});
KISSY支持mouseenter/leave
/* KISSY */
Event.on('#id', 'mouseenter', function(ev) {
    // do something
});

Event.on('#id', 'mouseleave', function(ev) {
    // do something
});


        和YUI一样,KISSY同样支持
        mouseenter和mouseleave
KISSY支持focusin/out
/* KISSY */
Event.on('#id', 'focusin focusout',
function(ev) {
    // do something
});




         和YUI一样,KISSY同样支持
         mouseenter和mouseleave
KISSY.JSON
使用JSON
/* KISSY */
KISSY.use('core',function(S){
     //从object转换为字符串
     var str = S.JSON.stringify({
          a:1
     });

      //从字符串转换为object
      var obj = S.JSON.parse('{"a":1}')

});

 JSON: http://www.json.org/js.html
参与KISSY的开发
参与
• 到哪里去了解最新版的KISSY
  – http://kissyteam.github.com/
• KISSY Project
  – http://github.com/kissyteam
• KISSY 源码
  – http://github.com/kissyteam/kissy
Thank you~
Q&A

Mais conteúdo relacionado

Mais procurados

KISSY Mechanism
KISSY MechanismKISSY Mechanism
KISSY Mechanismlifesinger
 
jQuery源码学习
jQuery源码学习jQuery源码学习
jQuery源码学习fangdeng
 
iOS App 開發 -- Storybard 基礎練習、APP 上架、IAP
iOS App 開發 -- Storybard 基礎練習、APP 上架、IAPiOS App 開發 -- Storybard 基礎練習、APP 上架、IAP
iOS App 開發 -- Storybard 基礎練習、APP 上架、IAPMing-Sian Lin
 
mixin based component infrastructure
mixin based component infrastructuremixin based component infrastructure
mixin based component infrastructureyiming he
 
Yui3 初探
Yui3 初探Yui3 初探
Yui3 初探isnull
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应zhaolinjnu
 
希望科技研发部变量命名及编码规范
希望科技研发部变量命名及编码规范希望科技研发部变量命名及编码规范
希望科技研发部变量命名及编码规范Hongjian Wang
 
iPhone,ios,Object-C基础入门
iPhone,ios,Object-C基础入门iPhone,ios,Object-C基础入门
iPhone,ios,Object-C基础入门Lucien Li
 
掌星 移动互联网开发笔记-Vol001
掌星 移动互联网开发笔记-Vol001掌星 移动互联网开发笔记-Vol001
掌星 移动互联网开发笔记-Vol001rainx1982
 
程式人雜誌 2015年五月
程式人雜誌 2015年五月程式人雜誌 2015年五月
程式人雜誌 2015年五月鍾誠 陳鍾誠
 
JQuery 学习
JQuery 学习JQuery 学习
JQuery 学习cssrain
 
YUI介绍和使用YUI构建web应用
YUI介绍和使用YUI构建web应用YUI介绍和使用YUI构建web应用
YUI介绍和使用YUI构建web应用Adam Lu
 
Aisanux安装光盘分析
Aisanux安装光盘分析Aisanux安装光盘分析
Aisanux安装光盘分析Guangyao Cheng
 
Spring入门纲要
Spring入门纲要Spring入门纲要
Spring入门纲要yiditushe
 
15 Subclassing UITableViewCell
15 Subclassing UITableViewCell15 Subclassing UITableViewCell
15 Subclassing UITableViewCellTom Fan
 

Mais procurados (19)

KISSY Mechanism
KISSY MechanismKISSY Mechanism
KISSY Mechanism
 
Banquet 52
Banquet 52Banquet 52
Banquet 52
 
jQuery源码学习
jQuery源码学习jQuery源码学习
jQuery源码学习
 
iOS App 開發 -- Storybard 基礎練習、APP 上架、IAP
iOS App 開發 -- Storybard 基礎練習、APP 上架、IAPiOS App 開發 -- Storybard 基礎練習、APP 上架、IAP
iOS App 開發 -- Storybard 基礎練習、APP 上架、IAP
 
mixin based component infrastructure
mixin based component infrastructuremixin based component infrastructure
mixin based component infrastructure
 
ios分享
ios分享ios分享
ios分享
 
Yui3 初探
Yui3 初探Yui3 初探
Yui3 初探
 
Node way
Node wayNode way
Node way
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应
 
希望科技研发部变量命名及编码规范
希望科技研发部变量命名及编码规范希望科技研发部变量命名及编码规范
希望科技研发部变量命名及编码规范
 
iPhone,ios,Object-C基础入门
iPhone,ios,Object-C基础入门iPhone,ios,Object-C基础入门
iPhone,ios,Object-C基础入门
 
Banquet 15
Banquet 15Banquet 15
Banquet 15
 
掌星 移动互联网开发笔记-Vol001
掌星 移动互联网开发笔记-Vol001掌星 移动互联网开发笔记-Vol001
掌星 移动互联网开发笔记-Vol001
 
程式人雜誌 2015年五月
程式人雜誌 2015年五月程式人雜誌 2015年五月
程式人雜誌 2015年五月
 
JQuery 学习
JQuery 学习JQuery 学习
JQuery 学习
 
YUI介绍和使用YUI构建web应用
YUI介绍和使用YUI构建web应用YUI介绍和使用YUI构建web应用
YUI介绍和使用YUI构建web应用
 
Aisanux安装光盘分析
Aisanux安装光盘分析Aisanux安装光盘分析
Aisanux安装光盘分析
 
Spring入门纲要
Spring入门纲要Spring入门纲要
Spring入门纲要
 
15 Subclassing UITableViewCell
15 Subclassing UITableViewCell15 Subclassing UITableViewCell
15 Subclassing UITableViewCell
 

Semelhante a Kissy简介

KISSY for starter
KISSY for starterKISSY for starter
KISSY for starteryiming he
 
Javascript之昨是今非
Javascript之昨是今非Javascript之昨是今非
Javascript之昨是今非Tony Deng
 
jQuery底层架构
jQuery底层架构jQuery底层架构
jQuery底层架构fangdeng
 
Jni攻略之八――操作对象的构造方法
Jni攻略之八――操作对象的构造方法Jni攻略之八――操作对象的构造方法
Jni攻略之八――操作对象的构造方法yiditushe
 
面向未来的前端类库开发 — KISSY 类库构想与实践
面向未来的前端类库开发  — KISSY 类库构想与实践面向未来的前端类库开发  — KISSY 类库构想与实践
面向未来的前端类库开发 — KISSY 类库构想与实践taobao.com
 
Java script closures
Java script closuresJava script closures
Java script closuresskywalker1114
 
Java script closures
Java script closuresJava script closures
Java script closuresskywalker1114
 
Ejb工作原理学习笔记
Ejb工作原理学习笔记Ejb工作原理学习笔记
Ejb工作原理学习笔记yiditushe
 
Keep your code clean
Keep your code cleanKeep your code clean
Keep your code cleanmacrochen
 
Lucene2 4学习笔记1
Lucene2 4学习笔记1Lucene2 4学习笔记1
Lucene2 4学习笔记1yiditushe
 
Network and Multitasking
Network and MultitaskingNetwork and Multitasking
Network and Multitaskingyarshure Kong
 
iPhone,ios,Object-c基础入门
iPhone,ios,Object-c基础入门iPhone,ios,Object-c基础入门
iPhone,ios,Object-c基础入门Lucien Li
 
Yui3入门
Yui3入门Yui3入门
Yui3入门cly84920
 
使用 Java 上的 future/promise API
使用 Java 上的 future/promise  API使用 Java 上的 future/promise  API
使用 Java 上的 future/promise APIkoji lin
 
iOS程序设计-数据持久化
iOS程序设计-数据持久化iOS程序设计-数据持久化
iOS程序设计-数据持久化qiyutan
 
由一个简单的程序谈起――之五(精华)
由一个简单的程序谈起――之五(精华)由一个简单的程序谈起――之五(精华)
由一个简单的程序谈起――之五(精华)yiditushe
 
Spring4.x + hibernate4.x_配置详解
Spring4.x + hibernate4.x_配置详解Spring4.x + hibernate4.x_配置详解
Spring4.x + hibernate4.x_配置详解zany_hui
 

Semelhante a Kissy简介 (20)

KISSY for starter
KISSY for starterKISSY for starter
KISSY for starter
 
Javascript之昨是今非
Javascript之昨是今非Javascript之昨是今非
Javascript之昨是今非
 
jQuery底层架构
jQuery底层架构jQuery底层架构
jQuery底层架构
 
Jni攻略之八――操作对象的构造方法
Jni攻略之八――操作对象的构造方法Jni攻略之八――操作对象的构造方法
Jni攻略之八――操作对象的构造方法
 
面向未来的前端类库开发 — KISSY 类库构想与实践
面向未来的前端类库开发  — KISSY 类库构想与实践面向未来的前端类库开发  — KISSY 类库构想与实践
面向未来的前端类库开发 — KISSY 类库构想与实践
 
Mvc
MvcMvc
Mvc
 
Java script closures
Java script closuresJava script closures
Java script closures
 
Java script closures
Java script closuresJava script closures
Java script closures
 
Ejb工作原理学习笔记
Ejb工作原理学习笔记Ejb工作原理学习笔记
Ejb工作原理学习笔记
 
J Query Learn
J Query LearnJ Query Learn
J Query Learn
 
Keep your code clean
Keep your code cleanKeep your code clean
Keep your code clean
 
Lucene2 4学习笔记1
Lucene2 4学习笔记1Lucene2 4学习笔记1
Lucene2 4学习笔记1
 
Network and Multitasking
Network and MultitaskingNetwork and Multitasking
Network and Multitasking
 
iPhone,ios,Object-c基础入门
iPhone,ios,Object-c基础入门iPhone,ios,Object-c基础入门
iPhone,ios,Object-c基础入门
 
Yui3入门
Yui3入门Yui3入门
Yui3入门
 
YUI 3 菜鳥救星
YUI 3 菜鳥救星YUI 3 菜鳥救星
YUI 3 菜鳥救星
 
使用 Java 上的 future/promise API
使用 Java 上的 future/promise  API使用 Java 上的 future/promise  API
使用 Java 上的 future/promise API
 
iOS程序设计-数据持久化
iOS程序设计-数据持久化iOS程序设计-数据持久化
iOS程序设计-数据持久化
 
由一个简单的程序谈起――之五(精华)
由一个简单的程序谈起――之五(精华)由一个简单的程序谈起――之五(精华)
由一个简单的程序谈起――之五(精华)
 
Spring4.x + hibernate4.x_配置详解
Spring4.x + hibernate4.x_配置详解Spring4.x + hibernate4.x_配置详解
Spring4.x + hibernate4.x_配置详解
 

Mais de jay li

犀牛书第六版
犀牛书第六版犀牛书第六版
犀牛书第六版jay li
 
淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践jay li
 
Jswebapps
JswebappsJswebapps
Jswebappsjay li
 
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript潜力无限的编程语言Javascript
潜力无限的编程语言Javascriptjay li
 
Responsive Web UI Design
Responsive Web UI DesignResponsive Web UI Design
Responsive Web UI Designjay li
 
深入剖析浏览器
深入剖析浏览器深入剖析浏览器
深入剖析浏览器jay li
 
HTML/CSS/JS基础
HTML/CSS/JS基础HTML/CSS/JS基础
HTML/CSS/JS基础jay li
 
淘宝前端技术巡礼
淘宝前端技术巡礼淘宝前端技术巡礼
淘宝前端技术巡礼jay li
 
F2e security
F2e securityF2e security
F2e securityjay li
 
中国元素在设计中的应用 -如瑟
中国元素在设计中的应用 -如瑟中国元素在设计中的应用 -如瑟
中国元素在设计中的应用 -如瑟jay li
 
卫银霞 -统计数字会撒谎
卫银霞 -统计数字会撒谎卫银霞 -统计数字会撒谎
卫银霞 -统计数字会撒谎jay li
 
编码大全 拔赤
编码大全 拔赤编码大全 拔赤
编码大全 拔赤jay li
 
小控件、大学问
小控件、大学问小控件、大学问
小控件、大学问jay li
 
Mobile UI design and Developer
Mobile UI design and DeveloperMobile UI design and Developer
Mobile UI design and Developerjay li
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoloadjay li
 
Html5form
Html5formHtml5form
Html5formjay li
 
Js doc toolkit
Js doc toolkitJs doc toolkit
Js doc toolkitjay li
 
新业务新员工培训 Banner设计
新业务新员工培训   Banner设计新业务新员工培训   Banner设计
新业务新员工培训 Banner设计jay li
 
夏之 专题设计
夏之 专题设计夏之 专题设计
夏之 专题设计jay li
 

Mais de jay li (20)

犀牛书第六版
犀牛书第六版犀牛书第六版
犀牛书第六版
 
淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践
 
Jswebapps
JswebappsJswebapps
Jswebapps
 
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript潜力无限的编程语言Javascript
潜力无限的编程语言Javascript
 
Responsive Web UI Design
Responsive Web UI DesignResponsive Web UI Design
Responsive Web UI Design
 
深入剖析浏览器
深入剖析浏览器深入剖析浏览器
深入剖析浏览器
 
HTML/CSS/JS基础
HTML/CSS/JS基础HTML/CSS/JS基础
HTML/CSS/JS基础
 
淘宝前端技术巡礼
淘宝前端技术巡礼淘宝前端技术巡礼
淘宝前端技术巡礼
 
F2e security
F2e securityF2e security
F2e security
 
中国元素在设计中的应用 -如瑟
中国元素在设计中的应用 -如瑟中国元素在设计中的应用 -如瑟
中国元素在设计中的应用 -如瑟
 
卫银霞 -统计数字会撒谎
卫银霞 -统计数字会撒谎卫银霞 -统计数字会撒谎
卫银霞 -统计数字会撒谎
 
编码大全 拔赤
编码大全 拔赤编码大全 拔赤
编码大全 拔赤
 
小控件、大学问
小控件、大学问小控件、大学问
小控件、大学问
 
Mobile UI design and Developer
Mobile UI design and DeveloperMobile UI design and Developer
Mobile UI design and Developer
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoload
 
Html5form
Html5formHtml5form
Html5form
 
Slide
SlideSlide
Slide
 
Js doc toolkit
Js doc toolkitJs doc toolkit
Js doc toolkit
 
新业务新员工培训 Banner设计
新业务新员工培训   Banner设计新业务新员工培训   Banner设计
新业务新员工培训 Banner设计
 
夏之 专题设计
夏之 专题设计夏之 专题设计
夏之 专题设计
 

Kissy简介