首页

手机appUI界面设计赏析(七)

前端达人

手机UI中的交互是保持产品鲜活生命力的源动力。好的交互可以帮助用户快速地获得反馈,认知布局,增强体验感和沉浸感。

手机UI中的交互是保持产品鲜活生命力的源动力。好的交互可以帮助用户快速地获得反馈,认知布局,增强体验感和沉浸感。这里为大家整理了12款优秀并富有创意的交互作品,为你的产品设计注入灵感。

还有精美的天气app赏析

jhk-1601983971748.png

jhk-1601983997786.png

jhk-1601984016327.png

jhk-1601984124858.jpg

jhk-1601984237705.png

WechatIMG373.jpeg

WechatIMG374.png

WechatIMG375.jpeg

WechatIMG376.png

WechatIMG377.jpeg

WechatIMG391.jpeg

WechatIMG392.png

WechatIMG395.png

WechatIMG396.png

WechatIMG455.png

WechatIMG456.png

WechatIMG457.png

WechatIMG458.jpeg

WechatIMG459.jpeg

WechatIMG460.png

WechatIMG461.png

WechatIMG462.jpeg

WechatIMG463.jpeg

WechatIMG464.png

WechatIMG466.jpeg



   --手机appUI设计--

  --精美的天气app设计--


(以上图片均来源于网络)


  蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服



  更多精彩文章:

       手机appUI界面设计赏析(一)

       手机appUI界面设计赏析(二)

       手机appUI界面设计赏析(三)

       手机appUI界面设计赏析(四)

       手机appUI界面设计赏析(五)

       手机appUI界面设计赏析(六)




CSS基础知识第三篇

前端达人

盒子模型

看透网页布局的本质

首先利用CSS设置好盒子的大小,然后摆放盒子的位置。最后把网页元素比如文字图片等等,放入盒子里面。

概念

盒子模型由元素的内容边框border内边距padding和外边距margin组成
盒子里面的文字和图片等元素是内容区域,盒子的厚度我们称为盒子的边框
盒子内容与边框的距离是内边距,盒子与盒子之间的距离是外边距

盒子边框

语法

border:border-width粗细|border-style样式|border-color颜色 

边框综合设置
border: 1px solid red; 没有顺序

表格的细线边框
cellspacing=“0” ,将单元格与单元格之间的距离设置为0
border-collapse:collapse; 表示相邻边框合并在一起

内边距

padding属性用于设置内边距,是指边框与内容之间的距离

属性
padding-left左内边距padding-right右内边距padding-top上内边距padding-bottom下内边距

简写
2个值 padding: 上下内边距 左右内边距 ;
4个值 padding: 上内边距 右内边距 下内边距 左内边距 ;

内盒尺寸计算(元素实际大小)
盒子的实际的大小 = 内容的宽度和高度 + 内边距 + 边框

外边距

margin属性用于设置外边距。margin控制盒子和盒子之间的距离,属性和简写与padding相同

块级盒子水平居中

盒子必须指定宽度(width)然后就给左右的外边距都设置为auto

文字居中和盒子居中区别

盒子内的文字水平居中是text-align:center, 而且还可以让行内元素和行内块居中对齐
块级盒子水平居中 左右margin 改为 auto

清除元素的默认内外边距

代码

* {
padding:0;     /* 清除内边距 */
margin:0;      /* 清除外边距 */
} 

注意
行内元素为了兼容性, 尽量只设置左右内外边距, 不设置上下内外边距

外边距合并

相邻块元素垂直外边距的合并

当上下相邻的两个块元素相遇时,如果上面的元素有下外边距margin-bottom,下面的元素有上外边距margin-top,则他们之间的垂直间距不是margin-bottom与margin-top之和,取两个值中的较大者这种现象被称为相邻块元素垂直外边距的合并

解决方案
尽量给只给一个盒子添加margin值

嵌套块元素垂直外边距的合并

对于两个嵌套关系的块元素,如果父元素没有上内边距及边框,父元素的上外边距会与子元素的上外边距发生合并,合并后的外边距为两者中的较大者

解决方案
可以为父元素定义上边框
可以为父元素定义上内边距
可以为父元素添加overflow:hidden

盒子模型布局稳定性

按照优先使用宽度(width)内边距(padding)外边距(margin)

原因
margin有外边距合并还有ie6下面margin加倍的bug所以最后使用
padding会影响盒子大小,需要进行加减计算,其次使用
width没有问题,经常使用宽度剩余法高度剩余法来做

浮动

CSS 布局的三种机制

普通流(标准流)

块级元素会独占一行,从上向下顺序排列
行内元素会按照从左到右顺序排列,碰到父元素边缘则自动换行

浮动

让盒子从普通流中浮起来,主要作用让多个块级盒子一行显示

定位

将盒子定在浏览器的某一个位置

为什么需要浮动

因为行内块元素可以实现多个元素一行显示但中间会有空白缝隙
因为行内块元素不能实现盒子左右对齐

什么是浮动

概念

元素的浮动是指设置了浮动属性的元素
会脱离标准普通流的控制并可以移动到指定位置

作用

让多个盒子(div)水平排列成一行,使得浮动成为布局的重要手段
浮动最早是用来控制图片,实现文字环绕图片的效果
可以实现盒子的左右对齐等等

语法

选择器 { float: 属性值; } 
  • 1

属性值
none(元素不浮动(默认))left(元素左浮动)right(右浮动)

特点


加了浮动的盒子是浮起来的,漂浮在其他标准流盒子的上面

加了浮动的盒子不占位置,它原来的位置漏给了标准流的盒子

浮动元素改变display属性, 类似转换成行内块元素,但是元素之间没有空白缝隙

浮动的应用

浮动和标准流的父盒子搭配

实际的导航栏中不直接用链接a而是用li包含链接(li+a)
li+a语义更清晰
直接用a搜索引擎容易辨别为有堆砌关键字嫌疑而影响网站排名

浮动的扩展

浮动元素与父盒子的关系
子盒子的浮动参照父盒子对齐
不会与父盒子的边框重叠,也不会超过父盒子的内边距

浮动元素与兄弟盒子的关系
在一个同一个父级盒子中,如果前一个兄弟盒子是浮动的,那么当前盒子会与前一个盒子的顶部对齐
在一个同一个父级盒子中,如果前一个兄弟盒子是普通流的,那么当前盒子会显示在前一个兄弟盒子的下方

清除浮动

为什么要清除浮动

浮动元素不占用原文档流的位置,会对后面的元素排版产生影响

清除浮动本质

父级元素因为子级浮动导致内部高度为0,清除浮动后,父级会根据浮动的子盒子检测高度,父级有高度就不会影响下面的标准流

清除浮动的方法

语法

选择器{clear:属性值;}  clear 清除 
  • 1

属性值
left清除左浮动right清除右浮动both同时清除左右浮动

额外标签法

是W3C推荐的做法是通过在浮动元素末尾添加一个空的标签例如<div style=”clear:both”></div>,或则其他标签br等亦可 
  • 1

优缺点
通俗易懂,书写方便,但是添加许多无意义的标签,结构化较差

父级添加overflow属性方法

可以给父级添加:overflow为hidden|auto|scroll都可以实现

优缺点
代码简洁,但是内容增多时候容易造成不会自动换行导致内容被隐藏掉,无法显示需要溢出的元素

使用after伪元素清除浮动

:after 方式为空元素额外标签法的升级版,.clearfix:after {  content: ""; display: block; height: 0; clear: both;visibility: hidden; } 
.clearfix {*zoom: 1;}  /* IE6、7 专有 */ 
  • 1
  • 2

优缺点
符合闭合浮动思想结构语义化正确,但是由于IE6-7不支持:after,使用zoom:1触发hasLayout

使用双伪元素清除浮动

方法

.clearfix:before,.clearfix:after {
content:"";
display:table;
}
.clearfix:after {
clear:both;
}
.clearfix {
*zoom:1;
} 

优缺点
代码更简洁,但由于IE6-7不支持:after使用zoom:1触发hasLayout

精美时尚的天气☁️ 手机APP界面UI设计欣赏 - 蓝蓝设计(十二)

前端达人

手机UI中的交互是保持产品鲜活生命力的源动力。好的交互可以帮助用户快速地获得反馈,认知布局,增强体验感和沉浸感。

手机UI中的交互是保持产品鲜活生命力的源动力。好的交互可以帮助用户快速地获得反馈,认知布局,增强体验感和沉浸感。这里为大家整理了一些优秀并富有创意的交互作品,为你的产品设计注入灵感。

jhk-1599450540777.jpg

--精美时尚的天气☁️手机app--jhk-1599450537147.jpg

--精美时尚的天气☁️手机app--

jhk-1599528210651.jpg

--精美时尚的天气☁️手机app--

jhk-1599528218678.jpg

jhk-1599528340106.jpg

jhk-1599528344567.jpg

WechatIMG172.png

jhk-1599449851286.png

jhk-1599449824025.png

jhk-1599010597722.png

jhk-1599010532826.png

jhk-1599010495523.png

WechatIMG173.jpeg

WechatIMG174.png

WechatIMG175.png

WechatIMG176.jpeg

WechatIMG177.png

--手机appUI设计--

 (以上图片均来源于网络)



 蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服



  更多精彩文章:

       手机appUI界面设计赏析(一)

       手机appUI界面设计赏析(二)

       手机appUI界面设计赏析(三)

       手机appUI界面设计赏析(四)

       手机appUI界面设计赏析(五)

       手机appUI界面设计赏析(六)

       手机appUI界面设计赏析(七)

       手机appUI界面设计赏析(八)

      手机appUI界面设计赏析(九)

       手机appUI界面设计赏析(十)

     手机appUI界面设计赏析(十一)




超赞的页面设计赏析

前端达人

网页中超过95%以上的信息都是通过文字的形式呈现。 然而,页面文字并非毫无章法的随意呈现。事实上,更具可读性、视觉效果以及独特排版和布局的网页文本设计,更能吸引用户,提升用户愉悦度。这也是为什么越来越多的设计师日益重视网页排版设计的重要原因。

BS界面是基于浏览器的界面,随着人们对于用户体验要求的不断提高,BS界面的设计要求也越来越高,

接下来为大家分享一下我收集到的案例:

0130015f4ef6fe11013f1a64a7ae6e.png

jhk-1598577838087.jpg

jhk-1599010563540.png

jhk-1599010690940.jpg

jhk-1599450537147.jpg

jhk-1599528268664.png

WechatIMG178.png

WechatIMG180.jpeg

WechatIMG181.jpeg

WechatIMG182.jpeg

WechatIMG183.jpeg

WechatIMG184.jpeg

WechatIMG201.jpeg

WechatIMG202.png

WechatIMG203.png

WechatIMG204.png

WechatIMG206.png




(以上图片均来源于网络)



  蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服



  更多精彩文章:

       ui界面设计之网站设计案例欣赏(一)

       超赞的创意页面排版设计,打造“视”不可挡的网页设计







超赞的创意网页排版设计,打造 “视”不可挡的网页设计

前端达人

网页中超过95%以上的信息都是通过文字的形式呈现。 然而,页面文字并非毫无章法的随意呈现。事实上,更具可读性、视觉效果以及独特排版和布局的网页文本设计,更能吸引用户,提升用户愉悦度。这也是为什么越来越多的设计师日益重视网页排版设计的重要原因。

BS界面是基于浏览器的界面,随着人们对于用户体验要求的不断提高,BS界面的设计要求也越来越高,

接下来为大家分享一下我收集到的案例:

jhk-1598599171213.jpg

jhk-1598599175297.jpg

jhk-1598599244105.png

jhk-1598599256648.png

WechatIMG73.png

WechatIMG74.png

WechatIMG94.png

WechatIMG106.jpeg

WechatIMG138.png

WechatIMG139.png

WechatIMG140.jpeg

WechatIMG141.pngWechatIMG142.jpeg

WechatIMG143.png

WechatIMG156.jpeg

WechatIMG157.jpeg

WechatIMG158.jpegWechatIMG158.jpeg



(以上图片均来源于网络)


蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服



  更多精彩文章:

       ui界面设计之网站设计案例欣赏(一)


超赞 时尚简约 手机APP界面UI设计欣赏 - 蓝蓝设计(十一)

前端达人

手机UI中的交互是保持产品鲜活生命力的源动力。好的交互可以帮助用户快速地获得反馈,认知布局,增强体验感和沉浸感。

手机UI中的交互是保持产品鲜活生命力的源动力。好的交互可以帮助用户快速地获得反馈,认知布局,增强体验感和沉浸感。这里为大家整理了一些优秀并富有创意的交互作品,为你的产品设计注入灵感。

WechatIMG78.png



WechatIMG102.jpeg

jhk-1589856834298.jpg

jhk-1589856847369.jpg

jhk-1596893249060.png

jhk-1596893316552.jpg

jhk-1596893336786.jpg

jhk-1598335311209.jpg

jhk-1599010550962.png

jhk-1599010555618.png

jhk-1599010562811.png

jhk-1599010576450.png

WechatIMG78.png

WechatIMG79.png

WechatIMG80.jpeg

WechatIMG81.png

WechatIMG82.png

WechatIMG100.png

WechatIMG101.pngWechatIMG102.jpeg

WechatIMG103.jpeg

WechatIMG104.png

--手机appUI设计--

 (以上图片均来源于网络)



 蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服



  更多精彩文章:

       手机appUI界面设计赏析(一)

       手机appUI界面设计赏析(二)

       手机appUI界面设计赏析(三)

       手机appUI界面设计赏析(四)

       手机appUI界面设计赏析(五)

       手机appUI界面设计赏析(六)

       手机appUI界面设计赏析(七)

       手机appUI界面设计赏析(八)

      手机appUI界面设计赏析(九)

       手机appUI界面设计赏析(十)



JavaScript进阶教程(4)-函数内this指向解惑call(),apply(),bind()的区别

前端达人

目录

1 函数的定义方式

1.1 函数声明

1.2 函数表达式

1.3 函数声明与函数表达式的区别

1.4 构造函数Function(了解即可,一般不用)

2 函数的调用方式

3 函数内 this 的指向

4 call、apply、bind

4.1 call,apply

4.1.1 新的函数调用方式apply和call方法

4.1.2 apply和call可以改变this的指向

4.2 call,apply使用

4.3 bind

4.4 总结

5 函数的其它成员(了解)

6 高阶函数

6.1 作为参数

6.2 作为返回值

7 总结


1 函数的定义方式

定义函数的方式有三种:

  1. 函数声明
  2. 函数表达式
  3. new Function(一般不用)

1.1 函数声明


  1. // 函数的声明
  2. function fn() {
  3. console.log("我是JS中的一等公民-函数!!!哈哈");
  4. }
  5. fn();

1.2 函数表达式

函数表达式就是将一个匿名函数赋值给一个变量。函数表达式必须先声明,再调用。


  1. // 函数表达式
  2. var fn = function() {
  3. console.log("我是JS中的一等公民-函数!!!哈哈");
  4. };
  5. fn();

1.3 函数声明与函数表达式的区别

  1. 函数声明必须有名字。
  2. 函数声明会函数提升,在预解析阶段就已创建,声明前后都可以调用。
  3. 函数表达式类似于变量赋值。
  4. 函数表达式可以没有名字,例如匿名函数。
  5. 函数表达式没有变量提升,在执行阶段创建,必须在表达式执行之后才可以调用。

下面是一个根据条件定义函数的例子:


  1. if (true) {
  2. function f () {
  3. console.log(1)
  4. }
  5. } else {
  6. function f () {
  7. console.log(2)
  8. }
  9. }

以上代码执行结果在不同浏览器中结果不一致。我们可以使用函数表达式解决上面的问题:


  1. var f
  2. if (true) {
  3. f = function () {
  4. console.log(1)
  5. }
  6. } else {
  7. f = function () {
  8. console.log(2)
  9. }
  10. }

函数声明如果放在if-else的语句中,在IE8的浏览器中会出现问题,所以为了更好的兼容性我们以后最好用函数表达式,不用函数声明的方式。

1.4 构造函数Function(了解即可,一般不用)

在前面的学习中我们了解到函数也是对象。注意:函数是对象,对象不一定是函数,对象中有__proto__原型,函数中有prototype原型,如果一个东西里面有prototype,又有__proto__,说明它是函数,也是对象。


  1. function F1() {}
  2. console.dir(F1); // F1里面有prototype,又有__proto__,说明是函数,也是对象
  3. console.dir(Math); // Math中有__proto__,但是没有prorotype,说明Math不是函数

对象都是由构造函数创建出来的,函数既然是对象,创建它的构造函数又是什么呢?事实上所有的函数实际上都是由Function构造函数创建出来的实例对象。

所以我们可以使用Function构造函数创建函数。

语法:new Function(arg1,arg2,arg3..,body);
arg是任意参数,字符串类型的。body是函数体。


  1. // 所有的函数实际上都是Function的构造函数创建出来的实例对象
  2. var f1 = new Function("num1", "num2", "return num1+num2");
  3. console.log(f1(10, 20));
  4. console.log(f1.__proto__ == Function.prototype);
  5. // 所以,函数实际上也是对象
  6. console.dir(f1);
  7. console.dir(Function);

2 函数的调用方式

  1. 普通函数
  2. 构造函数
  3. 对象方法

  1. // 普通函数
  2. function f1() {
  3. console.log("我是普通函数");
  4. }
  5. f1();
  6. // 构造函数---通过new 来调用,创建对象
  7. function F1() {
  8. console.log("我是构造函数");
  9. }
  10. var f = new F1();
  11. // 对象的方法
  12. function Person() {
  13. this.play = function() {
  14. console.log("我是对象中的方法");
  15. };
  16. }
  17. var per = new Person();
  18. per.play();

3 函数内 this 的指向

函数的调用方式决定了 this 指向的不同:

调用方式 非严格模式 备注
普通函数调用 window 严格模式下是 undefined
构造函数调用 实例对象 原型方法中 this 也是实例对象
对象方法调用 该方法所属对象 紧挨着的对象
事件绑定方法 绑定事件对象  
定时器函数 window  

  1. // 普通函数
  2. function f1() {
  3. console.log(this); // window
  4. }
  5. f1();
  6. // 构造函数
  7. function Person() {
  8. console.log(this); // Person
  9. // 对象的方法
  10. this.sayHi = function() {
  11. console.log(this); // Person
  12. };
  13. }
  14. // 原型中的方法
  15. Person.prototype.eat = function() {
  16. console.log(this); // Person
  17. };
  18. var per = new Person();
  19. console.log(per); // Person
  20. per.sayHi();
  21. per.eat();
  22. // 定时器中的this
  23. setInterval(function() {
  24. console.log(this); // window
  25. }, 1000);

4 call、apply、bind

了解了函数 this 的指向之后,我们知道在一些情况下我们为了使用某种特定环境的 this 引用,需要采用一些特殊手段来处理,例如我们经常在定时器外部备份 this 引用,然后在定时器函数内部使用外部 this 的引用。
然而实际上 JavaScript 内部已经专门为我们提供了一些函数方法,用来帮我们更优雅的处理函数内部 this 指向问题。这就是接下来我们要学习的 call、apply、bind 三个函数方法。call()、apply()、bind()这三个方法都是是用来改变this的指向的。

4.1 call,apply

call() 方法调用一个函数, 其具有一个指定的 this 值和分别地提供的参数(参数的列表)。
apply() 方法调用一个函数, 其具有一个指定的 this 值,以及作为一个数组(或类似数组的对象)提供的参数。

注意:call() 和 apply() 方法类似,只有一个区别,就是 call() 方法接受的是若干个参数的列表,而 apply() 方法接受的是一个包含多个参数的数组。

call语法:

fun.call(thisArg[, arg1[, arg2[, ...]]]) 

call参数:

  • thisArg

    • 在 fun 函数运行时指定的 this 值
    • 如果指定了 null 或者 undefined 则内部 this 指向 window
  • arg1, arg2, ...

    • 指定的参数列表

apply语法:

fun.apply(thisArg, [argsArray]) 

apply参数:

  • thisArg
  • argsArray

apply() 与 call() 相似,不同之处在于提供参数的方式。
apply() 使用参数数组而不是一组参数列表。例如:

fun.apply(this, ['eat', 'bananas']) 

4.1.1 新的函数调用方式apply和call方法


  1. function f1(x, y) {
  2. console.log("结果是:" + (x + y) + this);
  3. return "666";
  4. }
  5. f1(10, 20); // 函数的调用
  6. console.log("========");
  7. // apply和call方法也是函数的调用的方式
  8. // 此时的f1实际上是当成对象来使用的,对象可以调用方法
  9. // apply和call方法中如果没有传入参数,或者是传入的是null,那么调用该方法的函数对象中的this就是默认的window
  10. f1.apply(null, [10, 20]);
  11. f1.call(null, 10, 20);
  12. // apply和call都可以让函数或者方法来调用,传入参数和函数自己调用的写法不一样,但是效果是一样的
  13. var result1 = f1.apply(null, [10, 20]);
  14. var result2 = f1.call(null, 10, 20);
  15. console.log(result1);
  16. console.log(result2);

4.1.2 apply和call可以改变this的指向


  1. // 通过apply和call改变this的指向
  2. function Person(name, sex) {
  3. this.name = name;
  4. this.sex = sex;
  5. }
  6. //通过原型添加方法
  7. Person.prototype.sayHi = function(x, y) {
  8. console.log("您好啊:" + this.name);
  9. return x + y;
  10. };
  11. var per = new Person("小三", "男");
  12. var r1 = per.sayHi(10, 20);
  13. console.log("==============");
  14. function Student(name, age) {
  15. this.name = name;
  16. this.age = age;
  17. }
  18. var stu = new Student("小舞", 18);
  19. var r2 = per.sayHi.apply(stu, [10, 20]);
  20. var r3 = per.sayHi.call(stu, 10, 20);
  21. console.log(r1);
  22. console.log(r2);
  23. console.log(r3);

4.2 call,apply使用

apply和call都可以改变this的指向。调用函数的时候,改变this的指向:


  1. // 函数的调用,改变this的指向
  2. function f1(x, y) {
  3. console.log((x + y) + ":===>" + this);
  4. return "函数的返回值";
  5. }
  6. //apply和call调用
  7. var r1 = f1.apply(null, [1, 2]); // 此时f1中的this是window
  8. console.log(r1);
  9. var r2 = f1.call(null, 1, 2); // 此时f1中的this是window
  10. console.log(r2);
  11. console.log("=============>");
  12. //改变this的指向
  13. var obj = {
  14. sex: "男"
  15. };
  16. // 本来f1函数是window对象的,但是传入obj之后,f1的this此时就是obj对象
  17. var r3 = f1.apply(obj, [1, 2]); //此时f1中的this是obj
  18. console.log(r3);
  19. var r4 = f1.call(obj, 1, 2); //此时f1中的this是obj
  20. console.log(r4);


调用方法的时候,改变this的指向:


  1. //方法改变this的指向
  2. function Person(age) {
  3. this.age = age;
  4. }
  5. Person.prototype.sayHi = function(x, y) {
  6. console.log((x + y) + ":====>" + this.age); //当前实例对象
  7. };
  8. function Student(age) {
  9. this.age = age;
  10. }
  11. var per = new Person(10); // Person实例对象
  12. var stu = new Student(100); // Student实例对象
  13. // sayHi方法是per实例对象的
  14. per.sayHi(10, 20);
  15. per.sayHi.apply(stu, [10, 20]);
  16. per.sayHi.call(stu, 10, 20);

总结

apply的使用语法:
1 函数名字.apply(对象,[参数1,参数2,...]);
2 方法名字.apply(对象,[参数1,参数2,...]);
call的使用语法
1 函数名字.call(对象,参数1,参数2,...);
2 方法名字.call(对象,参数1,参数2,...);
它们的作用都是改变this的指向,不同的地方是参数传递的方式不一样。

如果想使用别的对象的方法,并且希望这个方法是当前对象的,就可以使用apply或者是call方法改变this的指向。

4.3 bind

bind() 函数会创建一个新函数(称为绑定函数),新函数与被调函数(绑定函数的目标函数)具有相同的函数体(在 ECMAScript 5 规范中内置的call属性)。当目标函数被调用时 this 值绑定到 bind() 的第一个参数,该参数不能被重写。绑定函数被调用时,bind() 也可以接受预设的参数提供给原函数。一个绑定函数也能使用new操作符创建对象:这种行为就像把原函数当成构造器。提供的 this 值被忽略,同时调用时的参数被提供给模拟函数。
bind方法是复制的意思,本质是复制一个新函数,参数可以在复制的时候传进去,也可以在复制之后调用的时候传入进去。apply和call是调用的时候改变this指向,bind方法,是复制一份的时候,改变了this的指向。

语法:

fun.bind(thisArg[, arg1[, arg2[, ...]]]) 

参数:

  • thisArg

    • 当绑定函数被调用时,该参数会作为原函数运行时的 this 指向。当使用new 操作符调用绑定函数时,该参数无效。
  • arg1, arg2, ...

    • 当绑定函数被调用时,这些参数将置于实参之前传递给被绑定的方法。

返回值:

返回由指定的this值和初始化参数改造的原函数的拷贝。

示例1:


  1. function Person(name) {
  2. this.name = name;
  3. }
  4. Person.prototype.play = function() {
  5. console.log(this + "====>" + this.name);
  6. };
  7. function Student(name) {
  8. this.name = name;
  9. }
  10. var per = new Person("人");
  11. var stu = new Student("学生");
  12. per.play();
  13. // 复制了一个新的play方法
  14. var ff = per.play.bind(stu);
  15. ff();

示例2:


  1. //通过对象,调用方法,产生随机数
  2. function ShowRandom() {
  3. //1-10的随机数
  4. this.number = parseInt(Math.random() * 10 + 1);
  5. }
  6. //添加原型方法
  7. ShowRandom.prototype.show = function() {
  8. //改变了定时器中的this的指向了
  9. window.setTimeout(function() {
  10. //本来应该是window, 现在是实例对象了
  11. //显示随机数
  12. console.log(this.number);
  13. }.bind(this), 1000);
  14. };
  15. //实例对象
  16. var sr = new ShowRandom();
  17. //调用方法,输出随机数字
  18. sr.show();

4.4 总结

  • call 和 apply 特性一样

    • 都是用来调用函数,而且是立即调用
    • 但是可以在调用函数的同时,通过第一个参数指定函数内部 this 的指向
    • call 调用的时候,参数必须以参数列表的形式进行传递,也就是以逗号分隔的方式依次传递即可
    • apply 调用的时候,参数必须是一个数组,然后在执行的时候,会将数组内部的元素一个一个拿出来,与形参一一对应进行传递
    • 如果第一个参数指定了 null 或者 undefined 则内部 this 指向 window
  • bind

    • 可以用来指定内部 this 的指向,然后生成一个改变了 this 指向的新的函数
    • 它和 call、apply 最大的区别是:bind 不会调用
    • bind 支持传递参数,它的传参方式比较特殊,一共有两个位置可以传递
      • 在 bind 的同时,以参数列表的形式进行传递
      • 在调用的时候,以参数列表的形式进行传递 
      • 那到底以 bind 的时候传递的参数为准呢?还是以调用的时候传递的参数为准呢?
      • 两者合并:bind 的时候传递的参数和调用的时候传递的参数会合并到一起,传递到函数内部。

5 函数的其它成员(了解)

  • arguments
    • 实参集合
  • caller
    • 函数的调用者
  • length
    • 函数定义的时候形参的个数
  • name
    • 函数的名字,name属性是只读的,不能修改

  1. function fn(x, y, z) {
  2. console.log(fn.length) // => 形参的个数
  3. console.log(arguments) // 伪数组实参参数集合
  4. console.log(arguments.callee === fn) // 函数本身
  5. console.log(fn.caller) // 函数的调用者
  6. console.log(fn.name) // => 函数的名字
  7. }
  8. function f() {
  9. fn(10, 20, 30)
  10. }
  11. f()

6 高阶函数

函数可以作为参数,也可以作为返回值。

6.1 作为参数

函数是可以作为参数使用,函数作为参数的时候,如果是命名函数,那么只传入命名函数的名字,没有括号。


  1. function f1(fn) {
  2. console.log("我是函数f1");
  3. fn(); // fn是一个函数
  4. }
  5. //传入匿名函数
  6. f1(function() {
  7. console.log("我是匿名函数");
  8. });
  9. // 传入命名函数
  10. function f2() {
  11. console.log("我是函数f2");
  12. }
  13. f1(f2);


作为参数排序案例:


  1. var arr = [1, 100, 20, 200, 40, 50, 120, 10];
  2. //排序---函数作为参数使用,匿名函数作为sort方法的参数使用,此时的匿名函数中有两个参数,
  3. arr.sort(function(obj1, obj2) {
  4. if (obj1 > obj2) {
  5. return -1;
  6. } else if (obj1 == obj2) {
  7. return 0;
  8. } else {
  9. return 1;
  10. }
  11. });
  12. console.log(arr);

6.2 作为返回值


  1. function f1() {
  2. console.log("函数f1");
  3. return function() {
  4. console.log("我是函数,此时作为返回值使用");
  5. }
  6. }
  7. var ff = f1();
  8. ff();

作为返回值排序案例: 


  1. // 排序,每个文件都有名字,大小,时间,可以按照某个属性的值进行排序
  2. // 三个文件,文件有名字,大小,创建时间
  3. function File(name, size, time) {
  4. this.name = name; // 名字
  5. this.size = size; // 大小
  6. this.time = time; // 创建时间
  7. }
  8. var f1 = new File("jack.avi", "400M", "1999-12-12");
  9. var f2 = new File("rose.avi", "600M", "2020-12-12");
  10. var f3 = new File("albert.avi", "800M", "2010-12-12");
  11. var arr = [f1, f2, f3];
  12. function fn(attr) {
  13. // 函数作为返回值
  14. return function getSort(obj1, obj2) {
  15. if (obj1[attr] > obj2[attr]) {
  16. return 1;
  17. } else if (obj1[attr] == obj2[attr]) {
  18. return 0;
  19. } else {
  20. return -1;
  21. }
  22. }
  23. }
  24. console.log("按照名字排序:**********");
  25. // 按照名字排序
  26. var ff = fn("name");
  27. // 函数作为参数
  28. arr.sort(ff);
  29. for (var i = 0; i < arr.length; i++) {
  30. console.log(arr[i].name + "====>" + arr[i].size + "===>" + arr[i].time);
  31. }
  32. console.log("按照大小排序:**********");
  33. // 按照大小排序
  34. var ff = fn("size");
  35. // 函数作为参数
  36. arr.sort(ff);
  37. for (var i = 0; i < arr.length; i++) {
  38. console.log(arr[i].name + "====>" + arr[i].size + "===>" + arr[i].time);
  39. }
  40. console.log("按照创建时间排序:**********");
  41. // 按照创建时间排序
  42. var ff = fn("time");
  43. // 函数作为参数
  44. arr.sort(ff);
  45. for (var i = 0; i < arr.length; i++) {
  46. console.log(arr[i].name + "====>" + arr[i].size + "===>" + arr[i].time);
  47. }

超赞 时尚简约 手机APP界面UI设计欣赏 - 蓝蓝设计(十)

前端达人

手机UI中的交互是保持产品鲜活生命力的源动力。好的交互可以帮助用户快速地获得反馈,认知布局,增强体验感和沉浸感。

手机UI中的交互是保持产品鲜活生命力的源动力。好的交互可以帮助用户快速地获得反馈,认知布局,增强体验感和沉浸感。这里为大家整理了一些优秀并富有创意的交互作品,为你的产品设计注入灵感。

WechatIMG107.png

WechatIMG108.png

WechatIMG109.jpeg

WechatIMG110.png

WechatIMG111.jpeg

WechatIMG113.png

WechatIMG115.png

WechatIMG116.jpeg

WechatIMG117.jpeg

WechatIMG118.jpeg

WechatIMG119.jpeg

WechatIMG120.jpeg

WechatIMG121.jpeg

WechatIMG122.jpeg

WechatIMG124.jpeg

WechatIMG125.jpeg

WechatIMG126.jpeg

WechatIMG128.jpeg

WechatIMG129.jpeg

WechatIMG130.jpeg

WechatIMG159.jpeg

WechatIMG160.jpeg




--手机appUI设计--

 (以上图片均来源于网络)

 蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服



  更多精彩文章:

       手机appUI界面设计赏析(一)

       手机appUI界面设计赏析(二)

       手机appUI界面设计赏析(三)

       手机appUI界面设计赏析(四)

       手机appUI界面设计赏析(五)

       手机appUI界面设计赏析(六)

       手机appUI界面设计赏析(七)

       手机appUI界面设计赏析(八)

      手机appUI界面设计赏析(九)




ES6 模块知识点总结

前端达人

模块化 export 和 import

import 导入模块、export 导出模块
可以直接在任何变量或者函数前面加上一个 export 关键字,就可以将它导出。
在一个文件中:

export const sqrt = Math.sqrt; export function square(x) { return x * x; } export function diag(x, y) { return sqrt(square(x) + square(y)); }  
    然后在另一个文件中这样引用:
import { square, diag } from 'lib'; console.log(square(11)); // 121 console.log(diag(4, 3));  

总结

//mod.js // 第一种模块导出的书写方式(一个个的导出) // 导出普通值 export let a = 12; export let b = 5; // 导出json export let json = { a, b }; // 导出函数 export let show = function(){ return 'welcome'; }; // 导出类 export class Person{ constructor(){ this.name = 'jam'; } showName(){ return this.name; } } //index.js //导出模块如果用default了,引入的时候直接用,若没有用default,引入的时候可以用{}的形式 // 导入模块的方式 import { a, b, json, show, Person } from './mod.js'; console.log(a); // 12 console.log(b); // 5 console.log(json.a); // 12 console.log(json.b); // 5 console.log(show()); // welcome console.log(new Person().showName()); // jam //mod1.js // 第二种模块导出的书写方式 let a = 12; let b = 5; let c = 10; export { a, b, c as cc // as是别名,使用的时候只能用别名,特别注意下 }; //index1.js // 导入模块的方式 import { a, b, cc // cc是导出的,as别名 } from './mod1.js'; console.log(a); // 12 console.log(b); // 5 console.log(cc); // 10 //mod2.js // 第三种模块导出的书写方式 ---> default // default方式的优点,import无需知道变量名,就可以直接使用,如下 // 每个模块只允许一个默认出口 var name = 'jam'; var age = '28'; export default { name, age, default(){ console.log('welcome to es6 module of default...'); }, getName(){ return 'bb'; }, getAge(){ return 2; } }; //index2.js // 导入模块的方式 import mainAttr from './mod2.js'; var str = ' '; // 直接调用 console.log(`我的英文名是:${mainAttr.name}我的年龄是${mainAttr.age}`); mainAttr.default(); // welcome to es6 module of default... console.log(mainAttr.getName()); // bb console.log(mainAttr.getAge()); // 2 //mod3.js var name = 'jam'; var age = '28'; export function getName(){ return name; }; export function getAge(){ return age; }; //index3.js // 导入模块的方式 import * as fn from './mod3.js'; // 直接调用 console.log(fn.getName()); // 


超赞 时尚简约 手机APP界面UI设计欣赏 - 蓝蓝设计(九)

前端达人

手机UI中的交互是保持产品鲜活生命力的源动力。好的交互可以帮助用户快速地获得反馈,认知布局,增强体验感和沉浸感。

手机UI中的交互是保持产品鲜活生命力的源动力。好的交互可以帮助用户快速地获得反馈,认知布局,增强体验感和沉浸感。这里为大家整理了一些优秀并富有创意的交互作品,为你的产品设计注入灵感。

WechatIMG67.jpeg


WechatIMG68.png


WechatIMG69.jpeg


WechatIMG70.jpeg

WechatIMG71.jpeg

WechatIMG64.jpeg

WechatIMG65.png

WechatIMG72.png

WechatIMG76.png

WechatIMG77.png

WechatIMG78.png

WechatIMG79.png

WechatIMG80.jpeg

WechatIMG81.png

WechatIMG82.png



--手机appUI设计--

 (以上图片均来源于网络)

 蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服



  更多精彩文章:

       手机appUI界面设计赏析(一)

       手机appUI界面设计赏析(二)

       手机appUI界面设计赏析(三)

       手机appUI界面设计赏析(四)

       手机appUI界面设计赏析(五)

       手机appUI界面设计赏析(六)

       手机appUI界面设计赏析(七)

       手机appUI界面设计赏析(八)


日历

链接

个人资料

蓝蓝设计的小编 http://www.lanlanwork.com

存档