前端总结

2018-07-02  本文已影响0人  奋斗1216
       学习了 微信小程序        虽然第一次学     但是我感觉比vue还要好理解一些     

          1.导航栏标题
                   与iOS开发很相似,小程序的导航栏也可以全局设置一下,在公共文件app.json中设置了
          2.子页面调用公共js对象以便调用其方法
                  子页面想调用共公js的方法,需先在子页面js中先实例化app
          3.嵌套循环时候,最好重命名下list和index
                如果是嵌套循环,很容易出现多个list和index,例如表视图一样,所以在小程序中可以重命名 list 和index 方法为:wx:for-index='重命名' wx:for-list="重命名"
          4.善用公共模板
                在APP开发中,UI复用是一个很好的手段,在小程序上就是模板template。
                在逛小程序联盟的时候发现了一个大湿总结的比我好,搬过来一下。
          5.小程序的尺寸单位rpx

rpx单位是微信小程序中css的尺寸单位,rpx可以根据屏幕宽度进行自适应。规定屏幕宽为750rpx。如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素,1rpx = 0.5px。
6.小程序中用html、css
小程序中的选择器跟css的一样.
7.事件总结/冒泡事件
小程序的事件主要有:

                      touchtab 点击事件
                      touchstart 开始滑动
                      touchmove 滑动中
                      touchend 滑动结束
                      touchcancel 滑动中断


                 小程序中的wxml中绑定事件有两种:以touchtab为例 ,在wxml中必须有bind/catch不然无法实现上述事件

bindtouchtab和catchtouchtab bind的不会阻止事件冒泡(元素最里层到最外层函数执行),catch会阻止冒泡,只是冒泡到当前层结束

如果想在元素执行某事件时把元素的某个属性传到后台 可在元素中加入data-属性名称=“xxx”,在事件函数中 function(event){}的event中的currentTarget里面的data-set里面可查看接收在元素中绑定的的id或者其他属性clientX/Y 查看滑动手指距离屏幕左侧的位置,查看滑动位置也可以通过touchstart和和touchend的clientx/y获取
8.点击更换图片
9.锚点定位
10.调用工具js文件/utils文件中的函数/变量

                 在小程序中,定义了一项工具文件utils,此文件的js旨在本文件之内有效,当其他子页面想调用其中的js方法或者变量时,需要两步骤:

1:在utils被调用的js文件中,面向对象的方式模型输出: module.exports={要调用的函数名称:要调用的函数名称 };
2:在要调用的js文件中模块化引入utils的js文件 var object=require("utils被调用的js文件地址"); 可以输出一下object就能看到被调用的方法了;
11.后台交互/wx.request({})方法/渲染页面方法 解析
小程序的后台获取数据方式get/post具体函数格式如下:wx.request({})
12.scroll-view用法
如果屏幕中某元素的内容超过此元素的高度,可设置元素为scroll-view 为滚动状态元素,这样可以做到元素固定高度且元素内容滚动屏幕不滚动的效果;
scroll-view标签的主要属性分为以下几种:
scroll-x/y='true/false'----允许横向/纵向滚动

scroll-top/left='50'--设置滚动条出现的位置

bindscroll='' 滚动中触发的函数 event.detail = {scrollLeft, scrollTop, scrollHeight, scrollWidth, deltaX, deltaY}

bindscrolltoupper='scrolltoupper' 滚动到顶部/左边出发的函数
scrolltoupper
bindscrolltolower='scrolltolower' 滚动到底部/右边出发的函数
scrolltolower
upper-threshold='50' 距离顶部/左边多远时触发scrolltoupper函数
lower-threshold='50' 距离底部/右边多远时触发
scrolltolower 函数
scroll-into-view=‘id名字.这个是用来设置此元素的某个子元素出现在最上方,id的名字为此子元素的id
13.广告轮播
微信小程序广告轮播元素 图片所在元素/swiper-item>
其中属性有:

autoplay:true,是否自动播放

                      autoplaytxt:"停止自动播放",

                       indicatorDots: true,指示点

              indicator-color:"white",//指示点颜色 暂未启动

                        indicator-active-color:"red",//当前选中的指示点颜色暂未启动

                 indicatorDotstxt:"隐藏指示灯",

          interval: 1000,//图片切换间隔时间

   duration: 500,//每个图片滑动速度,

  ircular:true,//是否采用衔接滑动

        current:3,//初始化时第一个显示的图片 下标值(从0)index
           14.提示框
           15.数据缓存

第二周vue总结:
检测是否是数组:
ES3检测是否是数组:
Object.prototype.toString.call(要判断的变量)

      ES5检测是否是数组:
                Array.isArray() 
                数组转字符串:join("分隔符")
               字符串转换数组:split("分隔符")
             js对象转换成js字符串:stringify()
             js字符串转换成js对象:parse()

         

            路由懒加载:const 组件名=() => import('组件路径');

        

          ue代理:
                    一、跨域产生的原因:因为ajax有一个同源策略,但咱们调用的接口来自于第三方网站,那这里必须跨域

                    二、什么情况下会产生跨域:
         协议名://二级域名.一级域名.类型:端口号/目录1/文件名?参数1=值&参数2=值2&参数3=值3

                          1.协议不同
                          2.端口不同
                          3.主域不同
                          4.主域相同,子域不同
                          5.域名和ip
                    三、跨域解决方案
                                jsonp:前端+后端
                               CORS:服务端 http://www.ruanyifeng.com/blog/2016/04/cors.html
                              代理(服务端代理,客户端代理)
                     后端jsonp处理:

                    第一步:后端接收callback
                                 例如: $callback=$_GET['callback'];
                    第二步:如果用jsonp方式,返回数据,应该返回函数调用形式,函数调用内部的参数就是你要的json
                                例如:  echo $callback."(".$json.")";

   axios:不支持json
                获取元素:
                       querySelector() 只获取匹配第一个dom元素 兼容:IE8+
                       querySelectorAll() 获取匹配的一个dom列表 兼容:IE8+
                     清除ajax缓存:在url地址后面添加随机数 例如:?random=new Date().getTime()
                    解决跨域方法:jsonp,代理,cors

         jsonp实现步骤:
              前端实现:
                   jsonp实现原理:动态创建script标签 ,因为script中的src有跨域能力
                         第一步:动态创建script标签,并添加callback参数
                         第二步:要创建callback函数 例如:getdata
                 CORS跨域:http://www.ruanyifeng.com/blog/2016/04/cors.html
              php 实现的cors跨域:header('Access-Control-Allow-Origin: *');

               缺点:只支持IE10+
               优点:
                   1.前端无需改代码,
                   2.支持所有请求方式 包括:post,delete,put,get

               路由的钩子:(即导航守卫)
                           1.全局的
                           2.单个路由独享的
                           3.组件级的
                  

                  组件通讯
                      一、组件:组件是可复用的 Vue 实例

                      二、创建组件:

                     1.全局组件
                       Vue.component('my-component-name', {
                                      // ... 选项 ...
                      })

                    三、组件通讯
         父传子:
              1.创建两个组件A.vue和B.vue,并在A.vue中引入B.vue,并注册
              2.在A.vue引入的子组件自身添加要传递的属性

        子传父

            1. Event Bus:通过一个空的vue(即桥梁)实现兄弟之间数据传递
                    第一步:创建两个兄弟组件并引入到其他组件中  例如:son1,son2
                   第二步:创建一个空的vue  例如:bus.js
                  第三步:分别在两个兄弟组件中引入bus.js
                  第四步:例如:son1数据发送给son2,在son1通过触发一个事件响应来派发
                 第五步:在生命周期钩子上监听son1派发过来的事件   $on



           子传父:主要通过事件派发实现,具体通过$emit实现
                         派发事件:$emit()
                        接收事件:@事件名戒v-on


            vueX
                       Vuex:是一个集中式状态管理工具,相当于react中的 redux
                           1) 主要解决的问题:大中型项目中复杂组件通讯问题
                            2)  vuex操作流程:


                                               dispatch                   commit
        流程图::   vue组件---------------->actions------------>mutations------->state-------->vue组件更新

                       3 )vuex的重要概念:
                               state:要保存的状态
                              mutations:是最终改变状态的方法集,mutations中的代码是同步执行的 actions:
                     4)使用步骤:

                     第一步:先安装vuex
                       npm install vuex --save
                     第二步:在src创建一个store目录,用来存放vuex相关文件
                     第三步:在store目录先创建一个index.js文件,做为vuex入口文件
                    第四步:在store目录的index.js中,写入下面的内容
          



             vue的事件修饰符:
            .stop:阻止冒泡
            .prevent:阻止默认行为
             .capture
             . self
             .once:只触发一次
            .passive:.passive 修饰符尤其能够提升移动端的性能。
             CommonJS:属于服务端规范,产生物是node.js
             AMD,CMD:浏览器规范,属于异步规范
             AMD:Async Module Document,产出物:require.js
             CMD:comon mudle Document,产生物:sea.js


          vue钩子:
               1.生命周期钩子:
                   创建:beforeCreate,created(创建后,通常用于获取后台数据)
                   挂载:beforeMount,(dom加载后,通常用于对页面dom操作时)
                   更新:beforeUpate,updated
                   销毁:beforeDestroy,destroyed

            javascript中的深拷贝和浅拷贝?

                    https://www.zhihu.com/question/23031215

               js对象转换字符串:JSON.stringify(要转换的对象)
               json字符串转换成js对象:JSON.parse(要转换的字符串)
               json:即是一种数据传输格式
               json
                 对象,数组,对象和数组混合

         闭包

           1 概念:可以是外部变量访问内部变量,函数套函数。
                         闭包就是能够读取其他函数内部变量的函数
           2用途:可以在写组件和面向对象的时候用到等
           3 优点:可以定义多个变量,安全性较高,
          4缺点:定义多变量,会导致内存较大,容易泄露,不容易清除,可能会影响浏览器的性能问题等
         5注意点:
                (1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
                (2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。
              Mock::::
                 一、 Mock数据:实现前端分离开发,在后端没有准备好数据接口的情况,前端也可自行模拟数据
                 二、 mock数据的插件有很多,目前我推荐:mockjs
                         mockJS官网:http://mockjs.com/
                       demo地址:http://mockjs.com/examples.html
        mockjs具体语法:
         参考资料:
               https://segmentfault.com/a/1190000010211622

        生成大部分的数据:::
               Mock.mock({
        
                        "name":"@cname",  //生成中文名称
                         "email":"@email",  //生成邮箱
                        "price|200-1000.2":230,  //生成带小数价格
                         "imgurl":"@image(200x100)",  //生成尺寸为200*100图片
                        "title":"@ctitle",    //生成中文标题
                       "paragraph":"@cparagraph",   //生成中文段落
                       "pubdate":"@date(yyyy-MM-dd HH:mm:ss)",  //生成日期 年月日时分秒
                       "address":"@province @city @county"  //生成地址 省市县
                       "zip":"@zip"
             })

          ES6新增特性:

 1.let,const特点:  (1)没有变量提升    (2)  块级作用域    (3)不能重复定义
  2.模板字符串
  适用场景:解决字符串拼接问题
  用反引号实现:``    获取值:${ }
 3.箭头函数:  => 匿名函数:
function(item,index,arr) {
    console.log(arr)

}
用 =>来取代匿名函数

(形参1,形参2,.....) => {

 //代码块

}

 普通函数和箭头函数区别:
   箭头函数没有自己的this,它的this是其父级函数的this普通函数是有自己的this,他的this是在程序运行时确定的

call,apply,bind的理解
              1.相同点:call,apply,bind都可以改变this指向
              2..区别:call和apply的传参形式不同,
函数名.call(要改变的对象,参数1,参数2,......)    函数名.apply(要改变的对象,[参数1,参数2,......])bind返回函数本身,但this已经改变了    函数.bind(要改变的对象)(参数1,参数2,......)或函数.bind(要改变的对象,参数1,参数2,......)()

       
     js知识点总结

         1、js的基本数据类型

             Number、String、Boolean、Null、Undefined
             symbol:是ES6新增加的基本数据类型

             还有复杂数据类型:Object(Array、Json等)



        2、js有哪些内置对象

         Object是所有JS中所有对象的父对象

                  数据封装类对象:Object、Array、Boolean、Number、String

                   其他对象:Function、Arguments、Math、Date、RegExp、Error



        3、js基本规范?

            (1)不要在同一行声明多个变量;

             (2)请使用==或!==来比较true或false的值;

             (3)使用对象字面量(json)替代new Array这种形式

              (4)不要使用全局函数

              (5)switch语句带有default分支

             ( 6)函数不应该有时候有返回值,有时候没有返回值

               (7)for循环必须使用大括号

               (8)if语句必须使用大括号

               (9)for-in循环中变量,应使用var关键字明确限定作用域,从而避免作用域污染



               4、 eval是做什么的?

它的功能是把对应的字符串解析成JS代码并运行;
   应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。
   由JSON字符串转换为JSON对象的时候可以用eval,var obj =eval('('+ str +')')。
5、DOM怎样添加、移除、移动、复制、创建和查找节点
  创建新节点
   createDocumentFragment() //创建一个DOM片段
createElement() //创建一个具体的元素
   createTextNode() //创建一个文本节点
   添加、移除、替换、插入
   appendChild()
   removeChild()
   replaceChild()
   insertBefore() //在已有的子节点前插入一个新的子节点
   查找
   getElementsByTagName() //通过标签名称
   getElementsByName() //通过元素的Name属性的值(IE容错能力较强,会得到一个数组,其中包括id等于name值的)
   getElementById() //通过元素Id,唯一性
6、new操作符具体干了什么呢?
   (1)创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。
   (2)属性和方法被加入到 this 引用的对象中。
   ( 3)新创建的对象由 this 所引用,并且最后隐式的返回 this 。

               7、JSON 的了解?

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小。

格式:采用键值对,例如:{'age':'12', 'name':'back'}

                 8、null和undefined区别?

                    null表示“无”,转为数值时为0;undefined是表示“无”的原始值,转为数值时为NaN。

                 undefined:

                   (1)变量被声明了,但没赋值,就是undefined;

                   (2)调用函数时,应该提供的参数没有提供,该参数等于undefined;

                   (3)对象没赋值的属性,该属性的值为undefined;

                   (4)函数没有返回值时,默认返回undefined。
                     null:

                   (1)作为函数的参数,表示该函数的参数不是对象。
                   (2)作为对象原型链的终点。

jq总结

  1. 基本选择器:

    id .class 元素 * 群组

  2. 层次选择器:

    选择器1 选择器2

 parent>child  

 前一个兄弟+后一个兄弟

 前一个兄弟~之后所有兄弟

新选择器:

  1. 过滤选择器: 通过特定的过滤规则选出所需的DOM元素

    包括: 基本过滤(新), 内容过滤, 可见性过滤, 属性过滤

         子元素过滤, 表单过滤
    
 基本过滤: 也称为位置过滤:

      强调: 位置: 指DOM元素在jQuery元素中的下标位置

    包含: :first, :last,

             :not(selector),

             :even, :odd,

             :eq(i)

             :gt(i)   :lt(i)

       何时: 只要选择查询结果中指定位置的元素时

      vs first-child/last-child/nth-child(n)

       何时: 只要选择指定父元素下的第几个子元素时

            

 内容过滤: (了解)

  :contains(text) 比如: span:contains("购物车")

  :empty            比如: span:empty 选择内容为空的span

  :parent            比如: span:parent 选择包含子内容或元素的span   ——是:empty的反义

  :has(selector)  比如: div:has(.active) 选择包含class为active的子元素的父元素div       

 可见性过滤:  (了解)

   :visible  匹配所有可见的元素

   :hidden 所有不可见元素

       4种: css: display:none; visibility:hidden; opacity:0

              html: type="hidden"

     强调: :hidden只能匹配 display:none; 和type="hidden"



回顾: 属性过滤——其实就是css中的属性选择器

   [属性名] 匹配包含指定属性的元素

   [属性名=值] 匹配指定属性的值为指定值得元素

   [属性名!=值] 匹配指定属性的值不是指定值得元素

   [属性名^=值] 匹配指定属性的值以指定内容开头的元素

   [属性名$=值] 匹配指定属性的值以指定内容结尾的元素

   [属性名*=值] 匹配指定属性的值包含指定内容的元素

   [属性选择器1][属性选择器2]... 匹配同时满足属性选择器1,,2的元素

表单选择器: 利用表单中元素标签和type属性选择表单中的元素

  何时:今后,只要选择表单中的元素,都要用表单元素选择器:

  为什么: 代替DOM中的form.name

  包括:

     :input  选择所有input  textarea  select  button

         vs input: 仅选择input元素

     :text  选择type为text的元素

     :password  
     :radio
     :checkbox
     :submit
     :reset
     :button
     :file
     :hidden

不仅选择type="hidden",还选择display="none"

     :image 选取所有图形按钮

表单属性过滤选择器:

:enabled 选择所有可用的元素

:disabled 选择所有不可用的元素

:checked 选择被选中的checkbox

:selected 选择被选中的option

移动端:
移动端如何定义字体font-family

body{font-family: "Helvetica Neue", Helvetica, sans-serif;}

在android或者IOS下 拨打电话代码如下:

<a href="tel:15602512356">打电话给:15602512356</a>

发短信(winphone系统无效)

<a href="sms:10010">发短信给: 10010</a>

目前的浏览器支持程度: IE10+,chrome21+,opera12.1+,Firefox22+,
safari6.1+等;
如上浏览器的支持程度,我们可以把此元素使用在移动端很方便;
flex是什么呢?Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供 最大的灵活性。
flex的弹性布局有如下优势:
1.独立的高度控制与对齐。
2.独立的元素顺序。
3.指定元素之间的关系。
4.灵活的尺寸与对齐方式。
flax 容器有如下6个属性
flex-direction
flex-wrap
flex-flow
justify-content
align-items
align-content
项目的属性,以下有6个属性可以设置在项目中,
order
flex-grow
flex-shrink
flex-basis
flex
align-self
box-pack属性总共有4个值:
.box{
box-pack: start | end | center | justify;
/主轴对齐:左对齐(默认) | 右对齐 | 居中对齐 | 左右对齐/
}
各个值的含义如下:
start:
对于正常方向的框,首个子元素的左边缘被放在左侧(最后的子元素后是所有剩余的空间)
对于相反方向的框,最后子元素的右边缘被放在右侧(首个子元素前是所有剩余的空间)
end:
对于正常方向的框,最后子元素的右边缘被放在右侧(首个子元素前是所有剩余的空间)。
对于相反方向的框,首个子元素的左边缘被放在左侧(最后子元素后是所有剩余的空间)。
center:
均等地分割多余空间,其中一半空间被置于首个子元素前,另一半被置于最后一个子元素后.
justify:
在每个子元素之间分割多余的空间(首个子元素前和最后一个子元素后没有多余的空间)。
meta基础知识点:
属性基本含义:
content=”width=device-width:
控制 viewport 的大小,device-width 为设备的宽度
initial-scale – 初始的缩放比例
minimum-scale – 允许用户缩放到的最小比例
maximum-scale – 允许用户缩放到的最大比例
user-scalable – 用户是否可以手动缩放

    .忽略将页面中的数字识别为电话号码
   <meta name=”format-detection” content=”telephone=no” />
   3. 忽略Android平台中对邮箱地址的识别
       <meta name=”format-detection” content=”email=no” />
    4. 当网站添加到主屏幕快速启动方式,可隐藏地址栏,仅针对ios的safari
     <meta name=”apple-mobile-web-app-capable” content=”yes” />
   5. 将网站添加到主屏幕快速启动方式,仅针对ios的safari顶端状态条的样式
    <meta name=”apple-mobile-web-app-status-bar-style” content=”black” />
    <!– 可选default、black、black-translucent –>
    6. 需要在网站的根目录下存放favicon图标,防止404请求(使用fiddler可以监听 
   到),在页面上需加link如下:
      <link rel=”shortcut icon” href=”/favicon.ico”>

Element-UI使用指南:
https://blog.csdn.net/u012285967/article/details/53023825

上一篇下一篇

猜你喜欢

热点阅读