美文网首页
前端总结

前端总结

作者: 奋斗1216 | 来源:发表于2018-07-02 14:51 被阅读0次
           学习了 微信小程序        虽然第一次学     但是我感觉比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

    相关文章

      网友评论

          本文标题:前端总结

          本文链接:https://www.haomeiwen.com/subject/kxcluftx.html