Skip to content

前端工程师框架

常用框架

jQuery

jQuery 基础认识

jQuery 的特点
  • 轻量、开源、免费、易于学习

  • 兼容性处理

  • 强大的选择器

  • 链式操作

  • 编辑的 DOM 操作

  • 可靠的事件处理机制

  • 封装了简单易用的 Ajax 操作

  • 丰富的插件

版本兼容性
  • 1.x

    • 兼容 IE678 低版本浏览器,官网不在更新
  • 2.x

    • 兼容 IE9 以上 浏览器,官网不在更新
  • 3.x

    • 官网主要维护更新版本

兼容性引入

  • html
    <!--chrome firefox safari opera ie9+ -->
    <!--[if gt ie 8]> -->
    <!-- <![endif]-->
    
    <!--ie8以及以下-->
    <!--[if lte ie 8]> <![endif]-->

jQuery 的使用

jQuery 的 ready 事件
  • ready 表示页面中的 DOM 加载完毕后 触发

    • $(document).ready(function(){ ... })

    • 简写 $(function(){ .... })

原生 JS 的 load 事件
  • load 事件在页面所有的一切加载完毕后触发
    • window.onload =function(){ ... }
文档

jQuery 代码基础

jQuery 的 顶级(全局)对象
  • $

    • 相当于原生 JavaScript 的 window 对象

    • 等价于 jQuery

      • jQuery(function(){})
    • $(function(){})

  • 相等

    • $(document).ready(function(){ ... })

    • jQuery(document).ready(function(){ ... })

  • 怎么区分 $ 符号的功能

    • $ 的参数如果是 dom 对象,把该对象转为 jQuery dom

    • $ 的参数如果是 字符串,作为 jQuery 的选择器

    • $ 的参数如果是 字符串,并且以<开头,则是创建一个新元素

jQuery 的 DOM 对象
  • 本质

    • 使用 jQuery 选择器获取的对象,不是原生的 DOM 对象, 称之为 jQuery dom 对象

    • jQuery dom 对象 本质上是由原生 dom 对象组成的集合

  • 操作语法

    • $box.css("color")

      • 参数只写属性名,返回值是属性值
    • $box.css("background","green")

      • 修改简单元素样式
    • $box.css("background":"green","fonst-size":"20px")

      • 修改多个样式
    • $box.css( width:400, height:400, backgroud:'red'; )

      • 添加多个样式

      • 属性要添加 ‘’引号

原生 JS DOM 和 jQuery DOM 相互转换
  • 原生的 DOM 转换为 jQuery DOM

    • $(函数)
      • $(box).css("border","2px solid red");
  • jQuery DOM 转换为 原生的 DOM

    • 取元素下标:$box[0]

      • $(box[0]).style.border = "2px solid red";
    • .get(0)

      • $(box.get(0)).style.border = "2px solid red";
jQuery 选择器
  • 1.基本选择器

    • ID 选择器

      • $("#box")
    • class 类选择器

      • $(".item")
    • 标签名选择器

      • $("li")
    • 组合选择器

      • $("li.item")
    • 全局选择器

      • $("*")
    • 多个选择器

      • $("li,p")
  • 2.层级选择器

    • 后代元素

      • $("#box li")
    • 子元素

      • $("#box>li")
    • 紧邻的兄弟元素

      • $("#box+li")
    • 后面所有的兄弟元素

      • $("#box~li")
  • 3.筛选选择器

    • :first

      • 获取第一个元素

      • $('li:first')

    • :last

      • 获取最后一个元素

      • $('li:last')

    • :eq(index)

      • $('li:eq(2)')
        • 获取到的 li 元素中,选择索引号为 2 的元素 索引号 index 从 0 开始
    • :even

      • $('li:even')
        • 获取到的 li 元素中,选择索引号为偶数的元素
    • :odd

      • $('li:odd')
        • 获取到的 li 元素中,选择索引号为奇数的元素
    • :lt(index)

      • <
    • :gt(index)

      • >
    • :not(selector)

    • :lang()1.9+

    • :root1.9+

    • :header

      • 所有的标题标签
    • :focus

      • 获取焦点元素
    • :target1.9+

      • 锚点指向元素
    • :animated

      • 正在执行动画元素
  • 4.内容选择器

    • :contains(text)

      • 包含指定的文本
    • :has(selector)

      • 包含满足条件的后代元素
    • :empty

      • 没有内容,也没有子元素
    • :parent

      • 要么有内容,要么有子元素
  • 5.可见性选择器

    • :hidden

      • 不可见的元素
    • :visible

      • 可见的元素
  • 6.属性选择器

    • [attribute]

      • 直接写属性名
    • [attribute=value]

      • 指定属性名的值
    • [attribute!=value]

      • 属性名不等于某个值
    • [attribute^=value]

      • 属性名以某个值开始
    • [attribute$=value]

      • 属性名以某个值结束
    • [attribute*=value]

      • 属性包含某个值
    • js
      [attrSel1][attrSel2][attrSelN];
      • 多个属性 选择器
  • 7.子元素选择器

    • :first-child

      • 选择一个是所有兄弟元素里面的第一个元素
    • :last-child

      • 选择一个是所有兄弟元素里面的第最后一个元素
    • :nth-child(1)

      • 子主题 1
    • :nth-last-child()

    • :only-child

      • 没有兄弟元素的元素
    • :first-of-type

      • 选择所有兄弟元素里面的相同标签的第一个
    • :last-of-type()

    • :nth-of-type(1)

      • 选择所有兄弟元素里面同标签的第一个
    • :nth-last-of-type()

      • 子主题 1
    • :only-of-type

  • 8.表单选择器

    • :input

      • 所有的表单控件
    • input 的 type 值

      • :text

      • :password

      • :radio

      • :checkbox

      • :file

      • :reset

      • :image

      • :submit

      • :button

  • 9.表单对象选择器

    • :enabled

    • :disabled

    • :checked

    • :selected

  • 10.混淆选择器

    • $.escapeSelector(selector) 3.0+
      • className 或者 IDname 是有特殊符号
jQuery 属性与样式操作
  • 属性操作

    • attr(name|properties|key,value|fn)

      • 1.设置属性

        • $(this).attr('index')
      • 2.自定义设置元素的属性值

        • $(this).attr('index',4)
      • 参数

        • name

          • 名字
        • properties

          • 性质
        • key,value

        • fn

          • 函数
    • removeAttr(name)

      • 删除属性
    • prop(name|properties|key,value|fn)

      • 获取在匹配的元素集中的第一个元素的属性值

      • 参数

        • name

          • 名字
        • properties

          • 性质
        • key,value

        • fn

          • 函数
    • removeProp(name)

      • 用来删除由.prop()方法设置的属性集
    • data()

      • data()方法可以在指定的元素上存取数据,并不会修改 DOM 元素结构 ,一旦页面刷新,之前存放的数据都将被删除

      • 获取属性

        • .data('属性','值')

        • js
          $(span).data("uname", "andy"); // 获取属性
          console.log($("span").data("uname")); // andy
          // 也可以获取其他属性
          console.log($("div").data("index")); // 返回数字
CSS 类操作
  • addClass(class|fn)

    • 为每个匹配的元素添加指定的类名。

    • $('div').addClass('current')

  • removeClass([class|fn])

    • 从所有匹配的元素中删除全部或者指定的类。

    • $('div').removeClass('current')

  • toggleClass(class|fn[,sw])

    • 如果存在(不存在)就删除(添加)一个类。

    • $('div').toggleClass('current')

  • hasClass()

    • 判断是否有某个 class 值
      • 返回 true 或 false
  • HTML 代码/文本/值 获取 设置

    • html([val|fn])

      • 取得第一个匹配元素的 html 代码内容。类似 innerHTML 这个函数不能用于 XML 文档。但可以用于 XHTML 文档。
    • text([val|fn])

      • 取得所有匹配元素的内容。类似 innerText
    • val([val|fn|arr])

      • 获得匹配元素的当前值。
样式操作
  • 1.CSS 操作

    • css(attr,[value])
      • 或者设置 css 属性,参数可以使用对象
  • 2.位置操作

    • offset([obj])

      • 元素在页面中的坐标,返回对象(属性 left top)
    • position()

      • 元素在第一个定位的祖先元素内的坐标,只读
  • 3.尺寸操作

    • width() / height()

      • 元素内容的尺寸
    • innerWidth() / innerHeight()

      • 内容尺寸+padding
    • outerWidth() / outerHeight()

      • 实际盒子的尺寸
jQuery 筛选方法
  • 过滤

    • eq(index|-index)

    • first()

    • last()

    • hasClass(class)

    • filter(expr|obj|ele|fn)

    • is(expr|obj|ele|fn)

    • map(callback)

    • has(expr|ele)

    • not(expr|ele|fn)

    • slice(start,[end])

  • 查找

    • parent([expr])

      • 获取一个祖先元素
    • parents([expr])

      • 获取所有的祖先元素(满足条件)
    • js
      parentsUntil([e|e][,f])
      • 获取祖先元素集合 写参数就是指定过滤排除掉这个元素参数
    • offsetParent()

      • 返回第一个定位的祖先元素
    • js
      nextUntil([e|e][,f])
      • 查找当前元素之后所有的同辈元素,直到遇到匹配的那个元素为止
    • js
      prevUntil([e|e][,f])
      • 查找当前元素之前所有的同辈元素,直到遇到匹配的那个元素为止
    • closest(e|o|e)1.7*

      • 从元素本身开始,逐级向上级元素匹配,并返回最先匹配的元素
    • 查找父级

      • $('li').parent();
    • 查找最近子级

      • $('ul').children('li');
    • 查找后代

      • $('ul').find('li');
    • 查找兄弟节点

      • $('.first').siblings('li');
    • 查找当前元素之后的 所有兄弟元素

      • $('.first').nextAll();
    • 紧邻在后面的兄弟元素

      • next([expr])
    • 查找当前元素之前的 所有兄弟元素

      • $('.last').prevAll();
    • 紧邻在前面的兄弟元素

      • prev([expr])
    • 检查当前元素是否为某个特定元素

      • 返回布尔值

      • $('div').hacClass('protected');

    • 获取指定索引号元素

      • $('li').eq(2);

      • 相当于:eq(2)

  • 串联

    • add("li")1.9*

      • 把元素加入当前集合中
    • addBack()1.9+

      • 把调用该方法的元素 加入当前集合中
    • contents()

      • 返回所有子节点的集合
    • end()

      • 返回最后一次 破坏性操作(过滤,查找操作)
    • andSelf()1.8-

jQuery DOM 对象方法
  • 遍历:each()

    • js
      $("#myList li").each(function (index, ele) {
      	// ele.innerHTML +="你好啊";
      	$(ele).append("你好啊");
      });
  • 返回新集合:map()

    • $("#myList li").map(function(index,ele){ return $(ele).html(); })
  • 集合中元素的数量:length

  • index() 返回该元素在父元素的索引位置

  • get([index]) 返回集合指定索引的 dom 对象,不写参数 还可以把 jQuery dom 集合转为存数组

  • is() 判断 jQuery dom 是否满足条件,返回布尔值

jQuery DOM 操作
  • 1.创建元素

  • 2.内部插入

    • append()

      • 追加到后面
    • appendTo()

      • 追加到指定元素前面
    • prepend()

      • 追加到前面
    • prependTo()

      • 追加到指定元素后面
  • 3.外部插入

    • after("")

      • 元素后面添加元素
    • insertAfter("指定元素")

      • 指定元素后面添加元素
    • befor()

      • 元素前面添加元素
    • insertBefor("指定元素")

      • 指定元素前面添加元素
    • 消息滚动案例

      • 子主题 1
  • 4.包裹

    • .wrap("li")

      • 每个元素都包裹一个元素
    • .wrapAll("li")

      • 全部元素统一包裹一个元素
    • .wrapInner("#box")

      • 在 box 元素里面添加一个包裹他子元素的元素
    • .unwrap("a")

      • 去掉包裹父元素
  • 5.替换

    • .replaceWith(新建标签标签或者元素)

      • 替换元素
    • .replaceAll(元素)

      • 替换元素到指定标签元素里
  • 6.删除

    • .empty()

      • 清空一个元素里的所有内容
    • .remove()

      • 删除元素
    • .detach()

      • 删除元素(可恢复删除的元素)

      • 恢复

        • 使用:.append(元素)
  • 7.克隆

    • .clone().appendTo("body")
      • 克隆追加到 body 元素里
  • 选项卡案例

    • 单击事件

    • //头部 $(this)addClass("current").removeClass("current");

    • //内容 $("li").removaClass("current").eq($(this).index()).addClass("current");

  • jQuery 事件

    • 1.事件绑定

      • 鼠标悬浮和鼠标离开. 把事件名作为方法

        • $("#btn").mouseover(function(){ $(this).css("background-color","#999"); }).mouseout(function(){ $(this).css("background-color","#f5f5f5"); })
      • 单击事件:.on(event,fn)

        • .on("cclick",function(){ })

        • //使用 on 同时绑定多个事件 $("#btn").on({ "mouseover":function(){ $("#btn").css("background-color","red"); }, "mouseout":function(){ $("#btn").css("background-color","teansparent"); }, "click":function(){ alert("OK"); }, })

      • //把事件 仅仅绑定一次 $("#btn").one("dbclick",function(){ })

      • 把事件名作为方法

    • 2.解除事件绑定

      • $("#btn").off();

        • 解除全部事件
      • $("#btn").off("mouseout");

        • 解除指定事件
    • 3.事件委派

      • on(event,selectoer,fn)
        • $("#myList").on("click","li",function(){ $(this).toggleClass("current"); })
    • 4.控制事件触发

      • $("#btn").trlgger("事件")

        • 外面可以包裹一个点击事件

        • 返回的是 jQuery dom 可以连贯操作

        • 无法触发元素自带的事件

        • 会触发集合中所有元素的事件

      • $("#btn").trlggerHandle("事件")

        • triggerHandle 值触发集合中第一个元素的事件
    • 5.事件列表

      • 除了原生 js 的事件

      • 新增事件

        • ready

          • 页面中的 DOM 加载完毕
        • focusin()

          • 获取焦点,绑定给输入框的父元素
        • focusout()

          • 失去焦点,绑定给输入框的父元素
        • mouseenter()

          • 类似于 mouseover:鼠标悬停在元素上

          • mouseenter 与 mouseover 的区别

        • mouseleave()

          • 类似于 mouseout:鼠标离开在元素

          • mouseleave 与 mouseout 的区别

        • hover()

          • mouseenter()和 mouseleave()的集合
    • 6.事件对象

      • pageX

        • 鼠标箭头 X 坐标
      • pageY

        • 鼠标箭头 Y 坐标
      • target

        • 当前触发事件的元素
      • which

        • 键盘按键的 ascii 码
      • type

        • 事件类型(事件名称)
      • event.preventDefault();

        • 阻止默认操作
      • event.stopPropagation();

        • 阻止事件冒泡
      • return false;

        • 既可以阻止事件冒泡,又可以阻止默认操作
      • 案例

        • 鼠标拖拽元素案例

          • 1.鼠标按下事件

            • 1.按下的元素透明度

            • 2.鼠标在元素上的位置

            • 3.鼠标移动事件

              • 获取鼠标位置

              • 改变元素位置

            • 4.连贯操作

              js
              .mouseup(function(){
                  // 4.1透明度恢复
                  // 解除绑定mousemove事件
                  $(this).off("mouseover") })
        • 键盘控制元素移动案例

          • 1.绑定键盘事件

            • js
              //计算页面的宽高
              var pWidth = $(window).width(); var pHeight = $(window).height(); //绑定键盘事件
              $(document).keydown(function(event){
                  //获取目前的位置
                  var left = $("#box").offset().left;    var top = $("#box").offset().top;
                  //判断按键
                  switch(event.which){        case 65
                          //向左移动
                          $("#box").offset({              left: Math.max(left-10,0)            });            break;                case 68
                          //向右移动
                          $("#box").offset({              left: Math.min(left+10, pWidth-40)            });            break;        case 87
                          // 向上移动
                          $("#box").offset({              top: Math.max(top-10,0)            });            break;        case 83
                          // 向下移动
                          $("#box").offset({              top: Math.min(top+10, pHeight-40)            });            break;    } })
            • w:87 上 a:65 左 s:83 下 d:68 右

        • 图片放大镜案例

          • 0.计算小图的位置

          • 1.鼠标悬停事件

            • 1.显示大图并设置改变大图位置

              • 子主题 1
            • 2.放大镜元素 显示并跟随鼠标移动

              • 计算放大镜元素

              • 放大镜元素跟随鼠标移动

            • 3.绑定 鼠标移动位置

              • 1.鼠标在小图的位置

              • 2.控制大图 显示部分内容

                • $("#bigBox").scrollLeft(mLeft *3)..scrollTop(mTop *3)

                • 小图和大图的倍数对应

          • 2.鼠标离开事件

            • 大图隐藏
  • jQuery 动画效果

    • ([s],[e],[fn])参数

      • [] 中括号可以都省略

      • [s]速度

        • ("slow")

        • ("normal")

        • ("fast")

        • 毫秒数值

          • 1000
      • [e]切换效果

        • 默认是"swing"

        • 可用参数"linear"

      • [fn]动画完成执行的函数

        • function(){}
    • 基本效果

      • 基本相关的 css 属性变化:透明度变化, 元素大小相关样式,外边距

      • 隐藏:hide([s,[e],[fn]])

        • hide()

          • 无动画
        • hide("fast")

          • 快速的隐藏
        • hide("normal")

        • hide("slow")

          • 缓慢的隐藏
        • hide(3000)

        • hide(3000,function(){ alert("Animation Done."); })

      • 显示:show([s,[e],[fn]])

        • show()

          • 无动画
        • show("fast")

          • 快速的隐藏
        • show("normal")

        • show("slow")

          • 缓慢的隐藏
        • show(3000)

        • show(3000,function(){ $(this).text("Animation Done!"); })

      • 隐藏和显示切换切换:toggle([s],[e],[fn])

        • $('td).toggle();

        • $("p").toggle("slow");

        • $("p").toggle("fast",function(){ alert("Animation Done."); });

        • $('#foo').toggle(showOrHide);

          • //相当于 if (showOrHide) { $('#foo').show(); } else { $('#foo').hide(); }
    • 滑动效果

      • 垂直向上或向上的运动

      • slideDown([s],[e],[fn])

        • 下滑动
      • slideUp([s,[e],[fn]])

        • 上滑动
      • slideToggle([s],[e],[fn])

        • 显示和隐藏切换

        • 配合.hover()使用

          • 鼠标经过事件
        • 上述两个合并的动画

    • 淡入淡出效果

      • 透明度的变化/渐变

      • e 透明度参数

        • 0.1 ~ 1
      • fadeIn([s],[e],[fn])

        • 淡入效果
      • fadeOut([s],[e],[fn])

        • 淡出效果
js
fadeToggle([s, [e], [fn]]);

淡入淡出切换效果

js
fadeTo([[s], o, [e], [fn]]);

仅仅改变透明度效果

  • 自定义

自定义动画:

js
animate(p,[s],[e],[fn])1.8\*
- p 参数

  - 1.包含作为动画属性和终值的样式属性和及其值的集合

  - 2.或 CSS 样式

  - $("p").animate({ height: 'toggle', opacity: 'toggle' }, "slow");

- ```js
  // 在一个动画中同时应用三种类型的效果
  $("#go").click(function () {
  	$("#block").animate(
  		{ width: "90%", height: "100%", fontSize: "10em", borderWidth: 10 },
  		1000
  	);
  });
  ```

-
  • 使动画停止:stop([c],[j])1.7*

  • 使动画延迟执行:delay(d,[q])

  • 使动画完成:finish([queue])1.9+

  • 动画设置

    • 执行一个禁用的动画:jQuery.fx.off

      • //关闭页面中所有的动画 jQuery.fx.off = true;

      • jQuery.fx.off = true; $("input").click(function(){ $("div").toggle("slow"); });

    • 设置动画的显示帧速:jQuery.fx.interval 3.0-

      • jQuery.fx.interval = 100;
  • 动画的队列

    • 所有的动画操作会加入到队列中,依次执行

    • .stop()停止动画

      • $(this).children('ul').stop().slideToggle();
    • 其他操作不会加入滑动队列

    • .stop()写在动画或者效果的前面,相当于停止结束上一次的动画

  • jQuery 动画和 CSS3 动画

    • 兼容性,css3 的动画和过渡需要 IE9+,jQuery 可以使用 1.*版本的

    • CSS3 的动画或者过渡必须给元素具体的 CSS 属性值

  • 案例

    • 消息滚动动画案例

    • 轮播图案例

    • 手风琴

  • jQuery Ajax

    • 1.快速请求方法

      • $.get("url",function(data){ })

      • $.post("url",function(data){ })

    • 2.ajax 方法

      • $.ajax({url:"",type:"get 或者 post",data:{name:"JIM",message:"哈哈哈"},async:true,success:function(data){alert(data);}})
    • 3.表单方法

      • $("#myForm").serialize()
        • 把表单中有 name 属性的表单控件的值,拼接成字符串
    • 4.处理 json 数据

    • 地址联动案例

      • 子主题 1
  • jQuery 工具方法

    • 数组和对象操作方法

      • $.each(object,[callback])

        • 遍历数组或者类数组对象
      • $.grep(array,fn,[invert])

        • 过滤数组
      • $.map(arr|obj,callback)

        • 从数组中取出信息,返回新的数组
      • $.makeArray(obj)

        • 把类数组对象转为纯数组
      • $.inArray(val,arr,[from])

        • 判断某个元素在数组中的位置,不存在,返回-1
      • $.merge(first,second)

        • 合并数组
      • $.toArray()

        • 返回一个新的纯数组
      • $.extend([d],tgt,obj1,[objN])

      • $.sub()1.9-

      • $.when(deferreds)

      • $.unique(array)3.0-

      • $.uniqueSort(array)3.0+

      • $.parseJSON(json)3.0-

      • $.parseXML(data)

    • 函数操作

      • $.proxy(function,context)

        • 改函数内的 this 指向
      • $.noop

    • 测试操作类型判断

      • $.type(obj)

        • 判断类型
      • $.isFunction(obj)3.3-

        • 判断是否是函数的方法
      • $.isEmptyObject(obj)

        • 判断是否是空的对象
      • $.isPlainObject(obj)

        • 判断是否是纯的对象(构造函数是 Object)
      • $.isWindow(obj)3.3-

        • 判断是否是 Windows 对象
      • $.isNumeric(value)1.7+

        • 判断是否是数字(NaN 为 false)
      • $.contains(c,c)

      • $.isArray(obj)3.2-

    • 字符串操作

      • $.trim(str)

        • 去掉字符串起始和结尾的空格
      • $.param(obj,[traditional])

        • 把对象序列化成字符串
    • 插件编写

      • $.error(message)

        • 接受一个字符串,并且直接抛出一个包含这个字符串的异常
      • $.fn.jquery

        • 判断 jQuery 版本号的字符串
  • 代码案例

    • 1.菜单收缩展开效果

      • 绑定单击事件

      • //点击展开收缩 $(this).toggleClass("open");

      • //判断 ul 是隐藏还是显示 $(this).next("ul").slideToggle();

      • //连写简化效果 $(this).toggleClass("open").next("ul").slideToggle();

    • 2.手风琴菜单

      • 绑定单击事件

      • js
        $(document).ready(function(){
            // 绑定单击事件
            $(".nav-list h3").click(function(){         $(this).addClass("open").siblings("h3").removeClass.("open").end().next("ul").slideDown().siblings("ul").slideUp();    })    })
    • 3.手风琴菜单 2(关闭其他)

      • js
        $(document).ready(function(){    // 绑定单击事件
            $(".nav-list h3").click(function(){         $(this).toggleClass("open").siblings("h3").removeClass.("open").end().next("ul").slideTaggle().siblings("ul").slideUp();    })    })
  • 基于 jQuery 的插件

Backbone

  • 是一个轻量级的 MVC JavaScript 库

  • 基于 underscore.js

    • 子主题 1

Bootstrap

  • 页面结构

    • nav

      • 导航部分
    • div.container

      • 主体部分
    • footer

      • 页尾
  • 样式

    • 网格类

      • .col- 针对所有设备

      • .col-sm- 平板 - 屏幕宽度等于或大于 576px

      • .col-md- 桌面显示器 - 屏幕宽度等于或大于 768px)

      • .col-lg- 大桌面显示器 - 屏幕宽度等于或大于 992px)

      • .col-xl- 超大桌面显示器 - 屏幕宽度等于或大于 1200px)

    • 容器

      • .container (固定宽度)

      • .container-fluid (全屏宽度)

    • 文字排版

    • 颜色

      • 柔和的文本。

      • 重要的文本。

      • 执行成功的文本。

      • 代表一些提示信息的文本。

      • 警告文本。

      • 危险操作文本。

      • 副标题。

      • 深灰色文字。

      • 浅灰色文本(白色背景上看不清楚)。

      • 白色文本(白色背景上看不清楚)。

    • 按钮

数据可视化库

数据可视化

  • 数据可视化的主要目的:借助图形化手段,清晰有效的传达与沟通信息

  • 数据可视化可以把数据从冰冷的数字转换成图形,揭示蕴含在数据中的规律和道理

  • 使用场景

    • 通用报表

    • 移动端图表

    • 大屏可视化

    • 图编辑&图分析

    • 地理可视化

    • 图解

前端画图基础

  • canvas

    • canvas 是 HTML5 新增的专门用来绘制图形的元素, canvas 元素是一块无色透明的区域, 开发者需要通过 js 脚本在元素中绘图;
  • svg

    • html 元素

Echarts.js

  • 百度 Echarts 开源图表官网

  • 使用步骤

    • 1.下载并引入 ECharts

      • 下载

      • js
        <!-- 引入 echarts 文件 -->
    • 2.准备一个具备大小的 DOM 容器

      • 生成的图表装在这个容器内
    • 3.初始化 echarts 实例对象

      • 实例化 echarts 对象
    • 4.指定配置项和数据(option)

      • 根据具体需求修改配置选型
    • 5.将配置项设置给 echarts 实例对象

      • 让 echarts 对象根据修改好的配置生效
    • 示例语法

      • js
        <!-- 引入 echarts 文件 -->
        <!-- 为echarts准备一个具备大小(宽高)的dom -->
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));         // 指定图表的配置项和数据
        var option = {            title: {                text: 'ECharts 入门示例'            },            tooltip: {},            legend: {                data:['销量']            },            xAxis: {                data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]            },            yAxis: {},            series: [{                name: '销量',                type: 'bar',                data: [5, 20, 36, 10, 10, 20]            }]        };
        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);
  • 配置和组件

    • 特性

      • 拖拽重计算

        • 1.拖拽整合数据

        • 2.剔除畸形数据

      • 数据视图

        • 满足用户对数据的需求

        • 视图改变,修改数据

      • 动态类型切换

        • 不同类型的图表展现
      • 值域漫游

        • 地图图表聚焦到你所关心的数值上
      • 数据区域缩放

        • 聚焦到你所关心的数据上
      • 多图联动

        • 更友好的关联数据分析
      • 百搭的时间轴

        • 时间维度的扩展
      • 大规模散点

        • 展现大数据的魅力
      • 力导向布局

        • 复杂关系网络的呈现
      • 动态数据添加

        • 实时展现数据变化
      • 多维度图例开关

        • 切换你所关心的数据系列
      • 多维度堆积

        • 展现更具有内涵的图表
      • 商业 BI

        • 一些应用广泛的商务图表
      • 混搭:全部图表可混合搭配

        • 用最佳的租户方式展现你的独特数据
      • 特效

    • 组件

      • 颜色主题(Theme)

        • var chart = echarts.init(dom, 'light'); 或者 var chart = echarts.init(dom, 'dark');

        • js
          // 假设主题名称是 "vintage"
          $.getJSON('xxx/xxx/vintage.json', function (themeJSON) {    echarts.registerTheme('vintage', JSON.parse(themeJSON))    var chart = echarts.init(dom, 'vintage'); });
        • 如果保存为 UMD 格式的 JS 文件,那么支持了自注册,直接引入 JS 文件即可: // HTML 引入 vintage.js 文件后(假设主题名称是 "vintage") var chart = echarts.init(dom, 'vintage'); // ...

      • 调色盘

        • 调色盘,可以在 option 中设置。它给定了一组颜色,图形、 系列会自动从其中选择颜色。 可以设置全局的调色盘, 也可以设置系列自己专属的调色盘。

        • js
          option = {
              // 全局调色盘。
              color: ['#c23531','#2f4554', '#61a0a8', '#d48265', '#91c7ae','#749f83',  '#ca8622', '#bda29a','#6e7074', '#546570', '#c4ccd3'],     series: [{        type: 'bar',
                                                                                                                                                            // 此系列自己的调色盘。
                                                                                                                                                            color: ['#dd6b66','#759aa0','#e69d87','#8dc1a9','#ea7e53','#eedd78','#73a373','#73b9bc','#7289ab', '#91ca8c','#f49f42'],        ...    }, {        type: 'pie',
                                                                                                                                                            // 此系列自己的调色盘。
                                                                                                                                                            color: ['#37A2DA', '#32C5E9', '#67E0E3', '#9FE6B8', '#FFDB5C','#ff9f7f', '#fb7293', '#E062AE', '#E690D1', '#e7bcf3', '#9d96f5', '#8378EA', '#96BFFF'],        ...    }] }
      • 高亮的样式:emphasis

        • js
          option = {
          	series: {
          		type: "scatter", // 普通样式。
          		itemStyle: {
          			// 点的颜色。
          			color: "red",
          		},
          		label: {
          			show: true,
          			// 标签的文字。
          			formatter: "This is a normal label.",
          		}, // 高亮样式。
          		emphasis: {
          			itemStyle: {
          				// 高亮时点的颜色。
          				color: "blue",
          			},
          			label: {
          				show: true, // 高亮时标签的文字。
          				formatter: "This is a emphasis label.",
          			},
          		},
          	},
          };
    • 组件参数详解

      • 更详细配置访问官网文档:https://www.echartsjs.com/zh/option.html#title

      • title:标题组件

        • title:{...}

          • 标题文字

          • 子标题

          • 标题位置

          • 边框颜色

          • 边框宽度

      • tooltip:提示框组件

        • tootip{...}

          • 提示框组件可以设置在多种地方:

          • 触发

          • 配置

          • 如何显示

          • 触屏设置

          • 坐标

          • 时效

          • 触发条件

          • 动画

            • 时间

            • 效果

          • ...

      • legend:图例组件

        • legend: {...}
      • toolbox:工具栏组件

        • toolbox: {...}

          • 组件 ID

          • 是否显示

          • 整个组件的宽度、大小

            • 默认自适应
          • 布局朝向

            • 上下左右
          • 图标

            • 工具栏图标大小

            • 工具栏图标间隔

            • 鼠标经过时图标标题

          • 工具配置项

            • feature: {...}

            • 最基本的属性

              • show:true/false
            • 自定义工具

              • 只能以 my 开头

              • js
                myTool1:{
                    show: true,
                        title: '自定义扩展方法',
                    icon: 'image://http://echarts.baidu.com/images/favicon.png',
                    onclick: function (){                    alert('myToolHandler2')                } }
            • 保存图片

              • saveasimage:{}
            • 还原

              • restore:{}
            • 数据视图

              • dataview:{}
            • 缩放视图

              • datazoom:{}
            • 动态类型切换

              • magictype:{type['','']}

                • type 里面填写类型

                • 类型

                  • 所有属性 { show , type , title , icon , iconStyle , emphasis , option , seriesIndex }
            • 选框组件的控制按钮

              • brush:{...}
            • 工具图标样式

              • iconstyle:{...}

                • 颜色

                • 边框

                  • 边框颜色

                  • 边框宽度

                  • 边框类型

                  • 阴影大小

                  • 阴影颜色

                  • 阴影偏移

                    • 水平

                    • 垂直

                • 图形的透明度

          • tooltip

            • 提示组件
      • grid:直角坐标系内绘图网格

      • xAxis:直角坐标系 grid 中的 X 轴

        • xAxis:{...}
      • yAxis:直角坐标系 grid 中的 Y 轴

        • yAxis:{...}
      • polar:极坐标系组件

        • polar:{...}

          • 可以用于散点图和折线图

          • 每个极坐标系拥有一个角度轴和一个半径轴

      • series:系列列表组件

        • series:{[...]}

          • 图表类型

            • line

            • ...

          • ID

          • 名称

          • 坐标系

          • 链接

          • 动画

          • 状态

          • 指针样式

          • 图形数据信息标签

            • lable:{...}

              • 是否显示:show:true/false

              • X,Y 轴

                • 绝对像素值和相对百分比

                  • // 绝对的像素值 position: [10, 10], // 相对的百分比 position: ['50%', '50%']
                • 上下左右、内部的

              • 标签旋转

                • rotate
              • 标签偏移

                • offset
              • 标签内容格式器

                • formatter
              • 自定义富文本样式

                • rich{...}
                  • 文字字体/大小/颜色/粗细/对齐方式/行高/背景色/ 边框样式:颜色/宽度/圆角/内边距/阴影/宽度
              • 折线拐点标志

                • itemStyle:{...}

                  • 颜色 color:{...}

                    • type:''

                      • linear

                        • 线性渐变

                          js
                          // 线性渐变,前四个参数分别是 x0, y0, x2, y2, 范围从 0 - 1,相当于在图形包围盒中的百分比,如果 globalCoord 为 `true`,则该四个值是绝对的像素位置
                          color: { type: 'linear', x: 0, y: 0, x2: 0, y2: 1, colorStops: [{ offset: 0, color: 'red'
                          // 0% 处的颜色
                           }, { offset: 1, color: 'blue'
                           // 100% 处的颜色
                            }], global: false
                            // 缺省为 false
                             }
                      • radial

                        • 径向渐变

                          • js
                            // 径向渐变,前三个参数分别是圆心 x, y 和半径,取值同线性渐变
                            color: {    type: 'radial',    x: 0.5,    y: 0.5,    r: 0.5,    colorStops: [{        offset: 0, color: 'red' // 0% 处的颜色
                                                                                                         }, {        offset: 1, color: 'blue'
                                                                                                             // 100% 处的颜色
                                                                                                            }],    global: false
                                    // 缺省为 false } // 纹理填充
                                    color: {    image: imageDom, // 支持为 HTMLImageElement, HTMLCanvasElement,不支持路径字符串
                                        repeat: 'repeat' // 是否平铺, 可以是 'repeat-x',
                                            'repeat-y', 'no-repeat' }
                      • 支持回调函数

                  • 描边样式

                  • 阴影样式

                  • 线条样式

                    • linestyle:{...}

                      • 颜色

                      • 线宽

                      • 类型

                      • 阴影

                      • 透明

          • 图形的高亮样式

            • emphasis:{...}
          • 标记线和点

            • mark
      • color:调色盘颜色列表

      • 数据存放组件

        • data:{...}

Highcharts.js

AntV

D3.js

There.js

webapp 框架

MUI

  • 官方网址

  • 头部:带图标和标题

    • html
      <header class="mui-bar mui-bar-nav">  <h1 class="mui-title">工作 </header>
  • 主体

  • 导航

    • html
      <nav class="mui-bar mui-bar-tab">发现 9 消息 我的 设置</nav>

3D 场景

  • WebGL

  • Three.js

ES 语言风格

  • TypeScript

  • CoffeeScript

JS 插件

  • parallel.js: 前后端通用的一个并行库

  • zepto: 用于现代浏览器的兼容 jQuery 的库

  • totoro: 稳定的跨浏览器测试工具

  • TheaterJS: 一个用于模拟人输入状态的 JS 库

  • stellar.js: 前端用于实现异步滚动效果的库,现已不再维护

  • skrollr: 另一款实现一步滚动的开源库,使用人数众多,可实现各种狂拽酷炫掉渣天的前端效果,看真相

  • Framework7: 前端框架,是开发人员可以基于 web 技术构建 IOS7 程序

  • regulex: 用于生成 正则表达式 的可视化流程图

  • markdown-it: 新型 Markdown 解析器,快速,支持插件

  • multiline: 用于 Javascript 中的多行文本,类似于 Ruby 的 HERE Doc

  • screenfull.js: 全屏插件,支持各大浏览器

  • lunr.js: 类似于 Solr, 但是用于浏览器上的全文搜索引擎,可以为 JSON 创建索引,离线也可以使用

  • jquery.hotkeys: jQuery 插件,用于绑定热键

  • breach_core: Javascript 编写的 Browser (浏览器)

  • octocard: 用于生成 Github 信息卡片的库

  • github-cards: 用于生成 Github 信息卡片的库

  • money.js: 轻量级货币转换库,web 和 node 皆可用

  • accounting.js: 轻量级的数字、货币转换库

  • javascript-algorithms: Javascript 实现的各种算法集合

  • lazy.js: 类似于 underscore, 但是会延迟执行,某些场景下,性能会有很大的提升

  • seajs: 前端模块加载器,解决模块化、依赖等问题

  • jQuery-One-Page-Nav: 单页应用中一个用于处理导航栏的库

  • js.js: Javascript 实现的 javascript JIT

  • jquery-ui: jQuery 团队开发的 UI 相关的前端库,功能强大

  • todomvc: 分别基于 AngularJS/EmberJS/Backbone 等实现的 TODO List, 帮助开发者选择前端 MVC 库

  • localForage: Mozilla 出品,用于离线存储,基于 IndexedDB, WebSQL 或者 localStorage, 提供一致的接口

  • EventEmitter: 浏览器版的 EventEmitter

  • jquery.serializeJSON: jQuery 插件,用于将 form 表单序列化成 JSON 数据

  • knockout: 前端 MVVM 框架,用于开发富前端应用

  • mermaid: 可以根据文本生成流程图,类似于 Markdown 的语法

  • js-sequence-diagrams: 另一款可以根据文本生成流程图的库,类似于 Markdown 的语法

  • flow: 一个用来检测 Javascript 语法错误的库, Facebook 出品

  • zoomooz: jQuery 插件,用来处理浏览器缩放

  • fancyBox: 一个用于放大缩小图片、Web 内容或者多媒体元素的库,优雅大方

  • mithril.js: 轻量型前端 MVC 框架,部分使用场景下性能优于 Angular.js 和 React

  • backbone: 强大的前端 MVC 库,鼻祖级前端库,最初为了配合 Rails 来模块化前端应用,兼容性良好 (兼容到 IE6),插件丰富,性能良好

  • jquery.smartbanner: smartbanner 是从 IOS6 开始支持的一个新特性, 这个插件提供了对早期 IOS4/5 和 Android 的支持

  • jquery.scrollTo: 在页面上以一个元素为起始以动画的方式移动(ScrollTo)到另一个元素, 支持回退等

  • jScrollPane: 自定义的滚动条,让所有浏览器都显示一样的滚动条

  • onepage-scroll: 提供类似于 iPhone6 展示页类似的效果,适用于单页应用,兼容到 IE8

  • scrollMonitor: 前端插件用来监控元素的滚动事件(进入、退出等),性能很好

  • ScrollMagic: 神奇的滚动交互效果插件,可以在滚动的过程中设置各种各样的动态效果

  • infinite-scroll: 滚动加载,滚动到最下到自动加载, Paul Irish 大神之作

  • animatable: 仅仅依靠 border-width 和 background-position 实现的各种动态效果,看真相

  • Fluidbox: 页面上内嵌图片的放大缩小效果,类似于 Medium 中的效果

  • jquery-validation: jQuery 的一个插件,用于校验 Form 表单

  • BigVideo.js: jQuery 的一个插件, 用于实现大背景(视频、图片)效果

  • emscripten: 一款基于 LLVM, 可以将 C/C++ 转换成 Javascript 的工具,使得 Javascript 可以近乎 Native 的速度

  • qrcode-generator: 各种语言的二维码生成工具

  • device.js: 一个可以检测设备类型的工具,可以让我们根据不同的设备来为其定制响应的 Javascript 和 CSS

  • jquery-qrcode: jQuery 插件,用来生成二维码

  • Wookmark-jQuery: jQuery 的一个插件,可以用来实现瀑布流的效果

  • isotope: 可以用来过滤、排列布局,实现美观的动态布局切换效果,Demo

  • lazysizes: 功能强大的图片延迟加载工具,可以首先加载一个低质量的图片,然后再加载高质量的图片

  • progressbar.js: 简洁美观的进度条,扁平化

  • pigshell: 一个由 Javascript 实现的 Shell, 将互联网当做一个大的文件系统, 通过 cd/ls/cat…..等命令, 可以访问 Facebook/Twitter/Google Drive 等网络服务

  • spectrum: Js 实现的颜色选择器 (Colorpicker)

  • jQuery.countdown: jQuery 倒计时插件

  • summernote: WYSIWYG 富文本编辑器

  • awesomplete: 非常轻型的一个自动补全 JS 库, 没有任何依赖, 配置简单, 美观

  • switchery: IOS 7 上 Switch 的 JS 实现, 支持 IE8 及以上浏览器

  • trix: Basecamp 公司出品的富文本编辑器,简洁小巧

  • sensor.js: 在智能移动设备浏览器上,通过 HTML5 的 api 使用移动设备的功能。定位、运动、倾斜等

  • hyhyhy: 用于创建 基于 HTML5 的 演示文稿

  • swipebox: jQuery 插件,用于处理移动端的触摸事件

  • FileAPI: 前端用户处理文件(拖放、多文件上传等)

  • Sortable: 现代浏览器上用于实现元素拖拽排序的功能,支持 Meteor, AngularJS, React,不依赖 jQuery

  • Swiper: 用于实现浏览器上的滑动切换效果,支持硬件加速

  • matter-js: 2D 物理效果引擎,碰撞、弹跳等

  • jQTouch: 用于辅助创建手机端的 Web 应用,支持主题、Zepto.js 等

  • snabbt.js: 一个利用 Javascript 和 CSS transform 的 animation 库

  • c3: 基于 D3 的图表库

  • echarts: 企业级图表库,百度开发

  • parallax.js: 一个用于响应智能手机 orientation 的库

  • jQuery-Animate-Enhanced: jQuery 动画库的一个增强,用于现代浏览器

  • wysihtml: 富文本编辑器,适用于现代浏览器

  • slip: 一个通过滑动或者拖拽来操控列表的库

  • evil-icons: 一个矢量图库,提供 Ruby/Node 等支持

  • PhotoSwipe: JS 的一个图片展示库

  • focusable: 是页面上一个元素高亮的库,有图有真相

  • firefox.html: Firefox 在浏览器端的实现 —— HTML 版的 Firefox

  • jquery-mobile: jQuery 团队开发的用于辅助手机端 web app 开发的库,基于 HTML5

  • mobile-angular-ui: 基于 angularjs 和 bootstarp 的 web app 开发框架

  • interact.js: 一个适用于现代浏览器的,用于处理 手势、拖放、缩放等的库

  • rebound-js: 实现部分物理效果,Facebook 出品

  • basket.js: 基于 LocalStorage 的资源加载器,可以用来缓存 script 和 css, 手机端使用速度快于浏览器直接缓存

  • iscroll: 高性能的滚动(scroll)处理库,功能强大,支持各种事件,不依赖任何的库,且插件丰富, 大众点评的手机端列表滚动就是用这个库处理的

  • metrics-graphics: 基于 D3 的图表库,简洁、高效,Mozilla 出品

  • accessible-html5-video-player: Paypal 出品的 Video 播放器

  • loading: 几种 Loading 效果,基于 SVG

  • flippant.js: 一款能够漂亮的网页元素翻转效果库,代码许久不更新,不过作为源码学习还是不错的

  • move.js: 基于 CSS3 的前端动画框架

  • scrollReveal.js: 使元素以非常酷帅的方式进入画布 (Viewpoint),看 Demo

  • Modernizr: 一个用来检测 HTML5 和 CSS3 支持情况的库

  • foundation: 另一款前端模版框架,类似于 Bootstrap

  • Flat-UI: Bootstrap 的一款主题,简洁美观

  • iCheck: 一款漂亮的 Checkbox 插件

  • Swipe: 非常轻量级的一个图片滑动切换效果库, 性能良好, 尤其是对手机的支持, 压缩后的大小约 5kb

  • slick: 功能异常强大的一个图片滑动切换效果库

  • SocialButtons: 漂亮的社交按钮

  • sweetalert: 一个非常美观的用于替换浏览器默认 alert 的库

  • web-animations-js: Javascript 实现的 Web Animation API

  • vivus: 可以动态描绘 SVG 的 JS 库, 支持多种动画

  • plyr: 轻量, 小巧, 美观的 HTML5 视频播放器

  • timesheet.js: 基于 HTML5 & CSS3 时间表

  • slideout: 一个非常美观的侧滑菜单

移动端插件

  • Touch.js

    • 移动端触摸事件库
  • swiper.js

    • 应用

      • H5 微信场景

      • 子主题 2

    • 移动端触摸滑动插件

  • animation.js

    • css3 动画库
  • iScroll.js

    • 移动端区域滚动插件
  • three.js

  • canvas.js

前端自动化、Sass 样式预处理语言

  • gulp

  • webpack

    • 模块化打包
  • sass

  • node

  • ES6

常用框架

移动端开发框架

网页 WebApp

混合 HybridApp

桥接 BridgeApp

  • React Native

  • Weex

  • Xamarin(C#)

  • RubyMoton(Ruby)

  • Titanium(JS)

渐进 ProgressiveApp

  • PWA

  • MinProgram

  • Taro

  • Nanachi

  • Chameleon

自绘 OwndrawApp

  • Flutter(Dart)

  • CrossApp(C++)

  • Corona(Lua)

  • Kivy(Python)

Mui&H5+

ionic Framework

微信

  • 微信小程序

    • WEUI:官方组件设计

    • 开发

      • 开发工具

      • 框架

      • 组件

      • API 接口

    • 运营

      • 推广

      • 维护

  • 微信公众号开发

nodejs 全栈开发

多端开发框架

游戏引擎

  • 白鹭

uni-app

  • https://uniapp.dcloud.io/

  • 网络 API

    • 发起请求

      • js
        uni.request({
        	url: "https://www.example.com/request",
        	data: { text: "uni.request" },
        	header: {
        		"custom-header": "hello",
        		// 自定义请求头信息
        	},
        	success: (res) => {
        		console.log(res.data);
        		this.text = "request success";
        	},
        });
  • 微信小程序 封装异步请求

    • 为什么封装

      • 原生的微信小程序不支持 promise

      • uniapp 的请求不能够方便的添加请求中效果

      • uniapp 的请求返回值是个数组,不够方便

    • utils 工具类目录下

      • 微信小程序异步请求的封装 request.js 代码例子

        js
        // es6 promise 微信小程序的 api 的铺垫
        export default (params)=>{
          // 加载中
           uni.showLoading({ title:"加载中" }) return new Promise((resolve,reject)=>{ wx.request({ ...params, success(res){ resolve(res.data); }, fail(err){ reject(err); }, complete(){ uni.hideLoading(); } }) }) }
        • 导入

          • main.js

            • import request from "./utils/request";

            • Vue.prototype.request=request;

              • 挂载
        • 页面调用

          • 导入

            • export default { components: { } }
          • onLoad(){ this.request({ url:'' }).then(res=>{ console.log(res) }) }

            • resolve()调用了 then()里面的 res=>{console.log(res)}
      • 如果时间返回的是时间戳格式 可以使用第三方法库处理

        • Moment.js

          • 中文网
            • momentjs.cn
        • 项目目录下命令行安装

        • 使用页面引入

          • import moment from "moment";

mpvue

taro

wepy

chameleon

Released under the MIT License.