作者归档:月夜

jQuery数据集处理函数及动画效果函数

map / each / show / hide / fadeOut / fadeIn / fadeTo / slideUp

slideDown / slideToggle /animate

本文中代码其测试页面点击此处可以查看

map & each

使用回调函数对结果集内的每个元素进行处理,回调函数接受两个参数,分别是当前元素索引和当前元素。二者的区别在于map返回回调函数返回值的新对象,each返回受回调函数影响的原始对象。
比如给所有的段落和类为foo的元素追加标签名和索引。

$("p,.foo").map(function(index, ele) {
  $(this).append("  " + ele.tagName + "  #" + index);
});

可同样使用each完成同样的功能,但是如果对追加了标签名和索引的元素集合进一步处理,比如给标签为,类为foo的元素设置一个红色的字体,黄色的背景,则应该使用each,如果使用map则无法达到期望的结果。

$("p,.foo")
  .each(function(index,ele) {
    $(this).append("  " + ele.tagName + "  #" + index);
  })
  .find("span.foo").css({"color" : "red", "background" : "yellow"});

show & hide

不带参数调用这两个函数会对元素的样式添加或删除display:none;
如 $(“#bar”).hide(); 或 $(“#bar”).show();
这样调用没有动画效果,直接显示或者直接隐藏,没有过度效果,可以通过增加过度时间参数来增加效果。
如 $(“#bar”).hide(2000); 或 $(“#bar”).show(2000);

fadeOut 、fadeIn、fadeTo

可以实现元素淡入淡出效果,fadeOut淡出,通过将元素透明度从1调整到0,来实现元素的淡出,元素淡出结束后设置元素display:none;样式,可设置持续时间参数,默认持续时间为400ms,也接受回调函数参数,在结束后被调用。fadeIn淡入,通过将元素透明度从0调整到1,来实现元素的淡入,元素淡入结束后如果元素有display:none;样式,则会移除该样式。fadeTo可指定淡入或淡出的透明度,为0至1之间的一个数值。必须提供两个参数,一个是持续时间,另一个是目标透明度,也可以通过回调函数作为第三个参数用于在调用结束后被调用。
淡入淡出函数接受两个文本的快捷持续时间,分别是fast和slow,分别对应200ms和600ms。
如将表单元素淡出,并输出对应淡出信息,再讲表单元素淡入,输出对应淡入信息。

$("form")
  .fadeOut(1000, function() {
    console.log("淡出!");
  })
  .fadeIn(1000, function() {
    console.log("淡入!");
  });

将表单淡出到50%透明度,并输出对应信息。

$("form").fadeTo(1000, 0.5, function() {
  console.log("50%透明度");
});

slideUp、slideDown、slideToggle

可以实现元素的收缩与展开,slideUp向上收缩元素,slideDown向下展开元素,slideToogle是展开和收缩的开关,当前元素处于展开状态,应用slideToggle则会收缩,当处于收缩的时候应用则会展开,收缩与展开结束后通过设置元素display:none;样式或删除该样式给用户视觉展现。都可以接受两个参数,分别是持续时间和回调函数。

$("p.foo")
  .slideUp(1000, function() {
    console.log("收缩!");
  })
  .slideDown(1000, function() {
    console.log("展开!");
  });

同样针对类为foo的段落使用slideToggle。

$("p.foo").slideToggle(1000, function() {
  $bar = $("p.foo").attr("style");
  if ($bar === "display: none;") {
    console.log("slide Up");
  } else {
    console.log("slide Down");
  }
});

animate

能利用元素绝大多数可视CSS属性制作动画,其接受两种格式的多种参数,其中第二种格式的参数有更多的选项​,分别是
animate({json target css}, duration, action, succ callback)
animate({json target css}, {json animate options})
我们给id=bar的段落增加背景色和边框,然后5秒内完成段落的长宽缩放,并输出完成信息。

$("#bar")
  .css({
    "background" : "yellow",
    "border" : "1px solid black"
  })
  .animate(
    {
      "width" : "500px",
      "height" : "100px"
    },
    5000,
    "swing",
    function() {
      console.log("animate complete!");
    });

采用第二种格式的参数代码如下,效果与前段一样。

$("#bar")
  .css({
    "background" : "yellow",
    "border" : "1px solid black"
  })
  .animate({
               "width" : "500px",
               "height" : "100px"
           },
           {
             "duration" : 5000,
             "easing" : "swing",
             "complete" : function() {
               console.log("Animate complete!");
             }
          });

jQuery中的内容包装与元素删除函数

wrap / unwrap / wrapAll / wrapInner

remove / detach

测试文件见前篇文章中的测试页面代码。点击此处可直接进入

wrap

在元素(标签)外包装一个或多个元素(标签),函数参数接受元素集合,也接受返回标签的回调函数作为参数。如通过在所在标签<span></span> 标签外包装<strong></strong>标签、给所有的段落包装<strong></strong>标签,使得文字变粗,或者给所选元素集合包装一个<div>

在使用的时候注意标签的嵌套是否合法,如给所有的段落外增加<strong></strong>就属于嵌套不合法。

$("span").wrap("");
//$("span").wrap(""); $("span").wrap(""); //像上面这样写也可以 //类为foo的span包装标签,其他span标签包装标签 $("span").wrap(function() { return $(this).is(".foo") ? "" : ""; }); 

unwrap

删除包住所选元素的元素,不接受参数,如要删除包住<span>元素的元素。

$("span").unwrap();

wrapAll

wrapAll将所选的元素集合都用一个元素包装,如将所有的段落用一个<div>包住,需要注意的是wrapAll是会移动元素的,在<span>元素集合上使用wrapAll,使用<strong>包住该元素集合。

var div = $("&lt;div>", { "css" : {"background" : "yellow"} }); $("p").wrapAll(div); //注意元素的移动 $("span").wrapAll("");&lt;/div>

wrapInner

包裹元素内容,可以用标签包住元素内的所有内容,如将所有的段落文字变成粗体。

$("p").wrapInner("");

remove & detach

remove和detach用于删除DOM中的元素,其区别是remove直接删除选中的元素,detach除了删除选中的元素外,还保存了删除元素的数据。

jQuery在DOM中添加元素

学习jQuery使用的测试页面代码如下,后续的继续学习中如无变化则以该文档为测试练习文档,练习时jQuery的版本为1.11.1,其所在路径与测试页面相同,该系列文档为《深入PHP与jQuery开发》的阅读笔记及总结。

    
    
    
      Reading Test Page
    
    
      
Hello World!
      
Another paragraph, but this one has a class.
      
This is a span inside a paragraph.
      
Paragraph with an id. 
         And this sentence is in a span.
      

      
Sign Up Form

append() / appendTo()

作用:在目标元素内之后添加元素
区别:由目标元素调用 / 由新建元素调用
示例:

    //append()
    var para = $("
", {
      "text" : "I'm a new paragraph!",
      "css"  : {"background" : "yellow"}
    });
    $("body").append(para);

    //appendTo()
    $("

", {
       "text" : "I'm a new paragraph!",
       "css"  : {"background" : "yellow"}
    }).appendTo("body");

prepend() / prependTo()

作用: 在目标元素内之前添加元素
区别: 由目标元素调用 / 由新建元素调用
示例:

    //prepend()
    var para = $("
", {
      "text" : "I'm a new paragraph!",
      "css"  : {"background" : "yellow"}
    });
    $("body").prepend(para);

    //prependTo()
    $("

", {
      "text" : "I'm a new paragraph!",
      "css"  : {"background" : "yellow"}
    }).prependTo("body");

after() / insertAfter()

作用: 在目标元素外之后添加元素
区别: 由目标元素调用 / 由新建元素调用
示例:

    //after()
    var para = $("
", {
      "text" : "I'm a new paragraph!",
      "css"  : {"background" : "yellow"}
    });
    $("p.foo").after(para);

    //insertAfter()
    $("

", {
      "text" : "I'm a new paragraph!",
      "css"  : {"background" : "yellow"}
    }).insertAfter("p.foo");

before() / insertBefore()

作用: 在目标元素外之前添加元素
区别: 有目标元素调用 / 由新建元素调用
示例:

    //before()
    var para = $("
", {
      "text" : "I'm a new paragraph!",
      "css"  : {"background" : "yellow"}
    });
    $("p.foo").before(para);

    //insertBefore()
    $("

", {
      "text" : "I'm a new paragraph!",
      "css"  : {"background" : "yellow"}
    }).insertBefore("p.foo");

《参与感》读后感

昨天晚上等孩子睡觉后,开始阅读《参与感》,看了一半,今天趁着孩子午睡,看完了剩下的另一半,看完后有些感触,随手写写,算作记录。

从这本书的阅读体验开始说起吧,这本书的阅读体验是近些年阅读的书中最好的一本,其排版、插图让人读的很轻松,段落首行不缩进与行间距与段间距让我恍如在电脑、平板或手机上阅读,形成了很好的多设备统一。可能只是符合自己的阅读习惯,毕竟常见的中文文章中是要求段落首行缩进的,随着移动设备的普及,首行不缩进看着整齐划一,而且在略显小的屏幕尺寸中,首行缩进会显得有些不协调,这可能是我自己的感觉。

这方面平常要多注意一些,尤其在进行微博、微信等社会化媒体的运营过程中,内容的排版应该是用户打开后首先呈现在眼前的,一个整齐的、简洁的,配图与内容高度契合的内容相信会带来印象的加分。但是经常看到却是内容非原创的不说,排版同样很凌乱,图片与内容中的文字不一致,比较典型的有在一个地方显示「登录」,在另一个地方显示「登陆」,类似这样的真有不少,这些真应该改改了。

再说说这本书,这是一本最近比较火的一本书,但是一直都没买来阅读,直到公司买来让大家都看看,这才在周末用了两个大块时间来读一读。我不太爱购买这类的图书,其原因之一其公司太火,有很多研究其公司的机构,书中所说的也不会太脱离这些研究的范畴;其原因之二是自己说出来的大部分是针对过程的总结性东西,往往会只讲招式,不见心法。

在读这本书之前,回忆了一下可能大概说到的地方,结合这两年各种大咖大谈特谈的互联网思维,开看,一边读一边觉得似曾相识,非常符合预想,但距离感颇远且都漂浮在空中,营销打法、产品、设计、传播…… 这些都是最近几年大家在谈论的,但却很少有人做到,或者说都很少真的开始做,这是值得思考的问题之一。

最近几年都知道玩法变了,用户变了,变得更有话语权了,要参与感、要归属感、要对话,但在实际操作时呢?有哪个真正的开始举起手术刀先来给自己开开刀,更多的时候只是想获得一个数字,急功近利。

读完后又重温了一遍互联网思维做产品的方方面面,同时获得了不少的新名词与法则,这些给人更多的就像是武功招式,就像独孤九剑,你知道破枪式、破剑式、破箭式… 但就如何修炼这些招式则不知道,当然就算知道也不一定适用自己。我们应该审视自己的产品或者企业,探索一些真正的跟用户一起共同完成产品演变的方法或者法则。

这本书感觉最好的内容是最后的笔记部分,当然整本书也非常有价值,将手头的产品跟书中的每部分进行关联思考会带来一定的思路,如果说整本书在各部分只讲一个点「MIUI是如何找到100个初始参与者,如何一年到50万」这中间想来不会如书中那样简单,这些过程是如何思考的? 讲完这一个点后再扩展在后面将其他部分再谈谈,或许价值更大。就如书中归纳的三三法则,这本书应该归属于内容战略中的产物之一,也是小米生态圈中的产品之一。

每一个企业的成长之路都是唯一而不可复制的,换一批人同样的做法不一定就能达到同样的高度。我想每个企业都应该寻找属于自己的法则,并随着每一波浪潮不断的修正,不断的修正属于自己的法则,在能够建立法则之前,我们还是努力先找到属于自己的开始之路。

当自身的经历跟努力齐头并进,当恰当的时间身边聚集起互补的人,当找到一个点做出单点的爆品,当找到初始的梦想赞助商,也许随后的进程会推动你不得不大步向前迈进,真到这一步想想就令人激动跟振奋。在这之前,寂寞和各种不理解会一直伴随着你一路前行,这也是修心之路,在耐得住寂寞的同时勿忘初心,你要时刻问一问自己能坚持多久。

最近这一段时间一直在思索去年大半年负责的产品,基础部分有些重「zhong」了,没有保持简洁性,起步的想法有些高了,尽管走通了整个预期的流程,并在此之上构建了几个应用,但回过头来看看,就这个阶段并没有足够的资源来驾驭这种模式的持续前进,反而延长了尽早进入寻找梦想赞助商的阶段,同时也没有做好选择切入的哪个点,在初始的定位上存在问题,是要好好的做做调整,从单点的产品开始,将基础部分变轻,再变轻,甚至基础的部分为什么就不能做出一个单一的简洁产品?这些可能是读这些书最大的收获,但至于怎么做,还要找到属于自己的路,不过较之以前思路越发的清晰了。

在此要感谢在公司「景安网络」的这大半年经历,传统的加上个人野路子的产品思维方式与公司领导言语中流露出来的思维在碰撞中有不小的变化。尽管我不太认可公司是一家完全的互联网企业,但我确实开始逐渐进入互联网领域了。

制作漂亮的Android应用图标

本文翻译自Android Developers博客
原文:Making Beautiful Android App Icons
作者:Roman Nurik

对于一般用户而言,主屏启动图标(有时候又叫应用图标)会带来用户对该应用的第一印象,随着手机跟平板高分辨率的普及,将应用图标做的精细和高质量就变得比较重要。要做到这样,请确保给你的应用制作XHDPI(320dpi)和XXHDDPI(480dpi)的图标。

在制作应用图标时,除了应用图标指南中的规范外,也请遵循下面这些同样重要的规范:

  • 应用图标为48dp大小的方形,并需要提供MDPI、HDPI、XHDPI与XXHDPI分辨率大小,如果不能全部提供,至少也应该提供XHDPI与XXHDPI分辨率大小;
  • Google Play中展示的512px大小的图标除了展示的小细节之外应该和应用图标保持一致;
  • 应用图标应该专门针对Android进行设计,可参考Pure Android指南中提到的,不要从其他平台照搬视觉元素和样式;
  • 应用图标应该是三维立体的,前视图,俯视时有一定的角度的透视,以便让用户感受到立体的存在;
  • 应用图标应该有明显的轮廓,尽量选择独特的形状,避免使用简单的方形或圆形图标;
  • 总体上应用图标应该简洁明了,但在局部也要有丰富的细节;(例如:精细的边缘效果、渐变、纹理等)
  • 应用图标应该使用浅背景,不要太暗或视觉对比太大,比如图标阴影部分;
  • 应用图标应该包括0dp-3dp的内边距,利用不同的内边距达到视觉上的一致性。

需要注意的是对于平板和大屏幕设备,其对于应用图标分辨率的要求要大于其自身分辨率,应该尽可能提供高分辨率的应用图标。举例来说,如果一个具有XHDPI屏幕的平板,则其对应用图标的要求需要达到XXHDPI级别的分辨率。