图片 7

微信小程序 实现点击添加移除class_JavaScript_脚本之家

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

0x003 初始化项目

  • 空白项目:

    ionic start myApp blank
    

图片 1

Paste_Image.png

  • 底部切换标签:

    ionic start myApp tabs
    

图片 2

Paste_Image.png

  • 带侧滑菜单:

    ionic start myApp sidemenu 
    

图片 3

Paste_Image.png

  • 项目生成后的项目目录:

图片 4

Paste_Image.png

我们看到这里继承的概念是多么的直白,“拷贝一个类的prototype
到另外一个类”,好,Code is cheap,看代码: function class1() { }
function class2() { } class2.prototype = class1.prototype;
class2.moreProperty1 = ” class 2 additional string ” ;
class2.moreMethod1 = function () { alert( ” class 2 additional method ”
); } /* 这样,首先是class2具有了和class1
一样的prototype,不考虑构造函数,两个类是等价的。
随后,又通过prototype给class2赋予了两个额外的方法。所以class2是在class1的基础上
增加了属性和方法,这就实现了类的继承。 */ function test() { var obj =
new class2(); // JavaScript提供了instanceof
操作符来判断一个对象是否是某个类的实例 alert(obj instanceof class2); //
true alert(obj instanceof class1); // ? }
运行代码,结果是不是在我们的意料之中?表面上看,上面的实现完全可行,js也可以正确的理解和实现这种继承关系,obj同时是class1和
class2的实例,但实质上则不然。js的这种理解实际上是基于一种很简单的策略,看下面的代码,先使用
prototype让class2 继承于class1,再在class2 中重复定义method 方法: //
定义class1 function class1() { // 构造函数 } // 定义class1 的成员
class1.prototype = { m1: function () { // 方法1 alert; } } // 定义class2
function class2() { // 构造函数 } // 让class2 继承于class1
class2.prototype = class1.prototype; // 给class2 重复定义方法method
class2.prototype.method = function () { alert( ” whose method2? class1
or class2 ” ); } // 创建两个类的实例 var obj1 = new class1(); var obj2 =
new class2 { // 分别调用两个对象的method 方法 obj1.method; }
从代码执行结果看,method方法在class1,2中运行的结果是相同的。
由此可见,当对class2 进行prototype
的改变时,class1的prototype也随之改变,即使对class2 的prototype
增减一些成员,class1的成员也随之改变。所以class1 和class2
仅仅是构造函数不同的两个类,它们保持着相同的成员定义。说到这里,相信读者已经发现了其中的奥妙:class1
和class2 的prototype
是完全相同的,是对同一个对象的引用。其实从这条赋值语句就可以看出来:
//让class2 继承于class1 class2.prototype=class1.prototype;
在js中,除了基本的数据类型,所有的赋值以及函数参数都是引用传递,而不是值传递。所以上面的语句仅仅是让class2
的prototype 对象引用class1
的prototype,造成了类成员定义始终保持一致的效果。从这里也看到了instanceof
操作符的执行机制,它就是判断一个对象是否是一个prototype
的实例,因为这里的obj1 和obj2
都是对应于同一个prototype,所以它们instanceof
的结果都是相同的。由此可见,使用prototype
引用拷贝实现继承不是一种正确的办法。但在要求不严格的情况下,却也是一种合理的方法,唯一的约束是不允许类成员的覆盖定义。其实,我们完全可以利用反射机制和prototype
来实现js正确的类继承: function class1() { // 构造函数 }
class1.prototype = { method: function () { alert; }, method2: function
() { alert; } } function class2() { // 构造函数 } // 让class2
继承于class1 for ( var p in class1.prototype) { class2.prototype[p] =
class1.prototype[p]; // 利用反射机制和prototype实现继承 } //
覆盖定义class1中的method 方法 class2.prototype.method = function () {
alert( ” class2 new method1 ” ); } // 创建两个类的实例 var obj1 = new
class1(); var obj2 = new class2 { // 分别调用两个对象的method 方法
obj1.method; // 分别调用两个对象的method2 方法 obj1.method2; }
从运行结果可见,obj2中重复定义的method
已经覆盖了继承的method方法,同时method2 方法未受影响。而且obj1中的method
方法仍然保持了原有的定义。这样,就实现了正确意义的类的继承。为了方便开发,可以为每个类添加一个共有的方法,用以实现类的继承:
// 为类添加静态方法inherit表示继承于某类 Function.prototype.inherit =
function { for ( var p in baseClass.prototype) { this .prototype[p] =
baseClass.prototype[p]; } } function class1() { // 构造函数 }
class1.prototype = { method: function () { alert; }, method2: function
() { alert; } } function class2() { // 构造函数 } // 让class2
继承于class1 // for (var p in class1.prototype) { //
class2.prototype[p] = class1.prototype[p]; //
利用反射机制和prototype实现继承 // } class2.inherit; //
等价于上面注释掉的那一个for循环 // 覆盖定义class1中的method 方法
class2.prototype.method = function () { alert( ” class2 new method1 ” );
} // 创建两个类的实例 var obj1 = new class1(); var obj2 = new class2 {
// 分别调用两个对象的method 方法 obj1.method; //
分别调用两个对象的method2 方法 obj1.method2; }
上面的代码使逻辑变的更加清楚,也更容易理解。通过这种方法实现的继承,有一个缺点,就是在class2
中添加类成员定义时,不能给prototype
直接赋值,而只能对其属性进行赋值,例如不能为: class2.prototype={
//成员定义 } 而只能为: class2.prototype.propertyName=someValue;
class2.prototype.methodName=function(){ //语句 }
由此可见,这样实现继承仍然要以牺牲一定的代码可读性为代价。有没有“不仅基类可以用对象直接赋值给property,而且在派生类中也可以同样实现,使代码逻辑更加清晰,也更能体现面向对象的语言特点”的js继承方式?引号里的说法是多么的诱人啊,继续学习去了。

 北京 上海  

0x001 简述

  • 系统:win10
  • IDE:WebStome
  • 教程地址:http://www.hubwiz.com/class/5507ca5be564e51314f544e4

wxml:

0x0013 栅格系统


图片 5

Paste_Image.png

  • 案例一:瀑布流
    • 代码:
      <div class=”bar bar-header bar-positive”>
      <h1 class=”title”>POPULAR</h1>
      <a class=”button icon ion-refresh”></a>
      </div>
      <div class=”scroll-content has-header”>
      <div class=”row”>
      <div class=”col”>[站外图片上传中……(9)]</div>
      <div class=”col”>[站外图片上传中……(10)]</div>
      <div class=”col”>[站外图片上传中……(11)]</div>
      <div class=”col”>[站外图片上传中……(12)]</div>
      </div>
      <div class=”row”>
      <div class=”col”>[站外图片上传中……(13)]</div>
      <div class=”col”>[站外图片上传中……(14)]</div>
      <div class=”col”>[站外图片上传中……(15)]</div>
      <div class=”col”>[站外图片上传中……(16)]</div>
      </div>
      <div class=”row”>
      <div class=”col”>[站外图片上传中……(17)]</div>
      <div class=”col”>[站外图片上传中……(18)]</div>
      <div class=”col”>[站外图片上传中……(19)]</div>
      <div class=”col”>[站外图片上传中……(20)]</div>
      </div>
      <div class=”row”>
      <div class=”col”>[站外图片上传中……(21)]</div>
      <div class=”col”>[站外图片上传中……(22)]</div>
      <div class=”col”>[站外图片上传中……(23)]</div>
      <div class=”col”>[站外图片上传中……(24)]</div>
      </div>
      </div>
      <div class=”tabs tabs-dark tabs-icon-only”>
      <a class=”tab-item”><i class=”icon
      ion-home”></i></a>
      <a class=”tab-item active”><i class=”icon
      ion-star”></i></a>
      <a class=”tab-item”><i class=”icon
      ion-camera”></i></a>
      <a class=”tab-item”><i class=”icon
      ion-chatbubble”></i></a>
      <a class=”tab-item”><i class=”icon
      ion-document”></i></a>
      </div>
    • 效果:
    ![](https://upload-images.jianshu.io/upload_images/1385720-849621cc15709616.png)

    Paste\_Image.png
  • 案例二:列宽
    .col-10 – 占据容器10%宽度
    .col-20 – 占据容器20%宽度
    .col-25 – 占据容器25%宽度
    .col-33 – 占据容器33%宽度
    .col-50 – 占据容器50%宽度
    .col-67 – 占据容器67%宽度
    .col-75 – 占据容器75%宽度
    .col-80 – 占据容器80%宽度
    .col-90 – 占据容器90%宽度

    • 代码:
      <div class=”bar bar-header”>
      <h1 class=”title”>指定列宽</h1>
      </div>
      <div class=”scroll-content has-header”>
      <div class=”row”>
      <div class=”col col-50″>.col.col-50</div>
      <div class=”col”>.col</div>
      <div class=”col”>.col</div>
      </div>

          <div class="row">
            <div class="col col-75">.col.col-75</div>
            <div class="col">.col</div>
          </div>
      
          <div class="row">
            <div class="col">.col</div>
            <div class="col col-75">.col.col-75</div>
          </div>
      
          <div class="row">
            <div class="col">.col</div>
            <div class="col">.col</div>
          </div>
      
        </div>
      
    • 效果:

    ![](https://upload-images.jianshu.io/upload_images/1385720-3d534f9929f4a941.png)

    Paste\_Image.png
  • 案例三:Metro 效果

    • 代码:
      <div class=”scroll-content”>
      <div class=”row”>
      <div class=”col col-50 positive-bg light”>
      <div>机票</div>
      <i class=”icon ion-plane”></i>
      </div>
      <div class=”col col-25 assertive-bg light”>
      <div>火车票</div>
      <i class=”icon ion-android-train”></i>
      </div>
      <div class=”col col-25 calm-bg light”>
      <div>用车</div>
      <i class=”icon ion-model-s”></i>
      </div>
      </div>

          <div class="row">
            <div class="col  calm-bg light">
              <div>酒店</div>
              <i class="icon ion-home"></i>
            </div>
            <div class="col stable-bg energized" >
              <i class="icon ion-person"></i>
              <div>我的携程</div>
            </div>
          </div>
      
          <div class="row">
            <div class="col  balanced-bg light">
              <div>旅游</div>
              <i class="icon ion-image"></i>
            </div>
            <div class="col energized-bg light">
              <div>景点门票</div>
              <i class="icon ion-pricetag"></i>
            </div>
            <div class="col  royal-bg light">
              <div>攻略社区</div>
              <i class="icon ion-person-stalker"></i>
            </div>
          </div>
      
        </div>
      
    • 效果:

    ![](https://upload-images.jianshu.io/upload_images/1385720-1dd9c70e4bb74659.png)

    Metro 效果.png
  • 案例四:指定列偏移
    .col-offset-10 – 偏移默认位置10%容器宽度
    .col-offset-20 – 偏移默认位置20%容器宽度
    .col-offset-25 – 偏移默认位置25%容器宽度
    .col-offset-33 – 偏移默认位置33%容器宽度
    .col-offset-50 – 偏移默认位置50%容器宽度
    .col-offset-67 – 偏移默认位置67%容器宽度
    .col-offset-75 – 偏移默认位置75%容器宽度
    .col-offset-80 – 偏移默认位置80%容器宽度
    .col-offset-90 – 偏移默认位置90%容器宽度

    • 代码:
      <div class=”bar bar-header”>
      <h1 class=”title”>指定列偏移</h1>
      </div>
      <div class=”scroll-content has-header”>
      <div class=”row”>
      <div class=”col col-33 col-offset-33″>.col</div>
      <div class=”col”>.col</div>
      </div>

          <div class="row">
            <div class="col col-33">.col</div>
            <div class="col col-33 col-offset-33">.col</div>
          </div>
      
          <div class="row">
            <div class="col col-33 col-offset-67">.col</div>
          </div>
        </div>
      
    • 效果:

图片 6

指定列偏移.png

  • 案例五:列纵向对齐

    • 代码:
      <div class=”bar bar-header”>
      <h1 class=”title”>列纵向对齐</h1>
      </div>
      <div class=”scroll-content has-header”>
      <div class=”row”>
      <div class=”col”>.col</div>
      <div class=”col”>.col</div>
      <div class=”col”>.col</div>
      <div class=”col”>1
      2
      3
      4</div>
      </div>

          <div class="row">
            <div class="col col-top">.col</div>
            <div class="col col-center">.col</div>
            <div class="col col-bottom">.col</div>
            <div class="col">1<br>2<br>3<br>4</div>
          </div>
      
          <div class="row row-top">
            <div class="col">.col</div>
            <div class="col">.col</div>
            <div class="col">.col</div>
            <div class="col">1<br>2<br>3<br>4</div>
          </div>
      
          <div class="row row-center">
            <div class="col">.col</div>
            <div class="col">.col</div>
            <div class="col">.col</div>
            <div class="col">1<br>2<br>3<br>4</div>
          </div>
      
          <div class="row row-bottom">
            <div class="col">.col</div>
            <div class="col">.col</div>
            <div class="col">.col</div>
            <div class="col">1<br>2<br>3<br>4</div>
          </div>
      
        </div>
      
    • 效果:

图片 7

列纵向对齐.png