//获取图片原始宽高
function getImgNaturalDimensions(oImg, callback) {
  var nWidth, nHeight;
  if (!oImg.naturalWidth) {
    nWidth = oImg.naturalWidth;
    nHeight = oImg.naturalHeight;
    callback({w: nWidth, h:nHeight});
  } else {
    var nImg = new Image();
    nImg.onload = function() {
      var nWidth = nImg.width,
          nHeight = nImg.height;
      callback({w: nWidth, h:nHeight});
    }
    nImg.src = oImg.src;
  }
}

getImgNaturalDimensions(e.querySelector('img'),function (_img) {
  console.log(_img.w)
  console.log(_img.h)
})
//复制文字
document.querySelector('.j-copy-mail').onclick=function(){
    var _copymail = this.innerText
    var flag = copyTextToClipboard(_copymail)
    flag ? layer.msg(_copymail+' 已複製!',{offset: '128px'}) : layer.msg('複製失敗請重試!',{offset: '128px'})
    function copyTextToClipboard(text) {
        var textArea = document.createElement("textarea");
        textArea.style.background = 'transparent';
        textArea.value = text;
        document.body.appendChild(textArea);
        textArea.select();
        try {
            var successful = document.execCommand('copy');
            var msg = successful
        } catch (err) {
            var msg= false
        }
        document.body.removeChild(textArea);
        return msg
    }
}

//flex布局

<div class="box">
  <div class="b1">1</div>
  <div class="b2">2</div>
  <div class="b3">3</div>
</div>
//对应css
  .b1{
    background: #cccccc;
    order:2;
/*flex是flex属性是flex-grow,flex-shrink与flex-basis三个属性的简写*/
    flex:1 1 auto; /*等分放大缩小*/
    flex:0 0 auto; /*不放大不缩小*/
  }
  .b2{
    background: #eeeeee;
    order:1;
    /*默认auto,或者以width为自身的宽度,但如果设置了flex-basis,权重会width属性高,因此会覆盖widtn属性*/
    flex-basis:auto;
    flex-basis: 500px;
/*表示是否继承父元素的 align-items属性,若没有父属性,默认stretch*/
    align-self: auto;
  }
  .b3{
   background: #939393;
/*有用,更改元素排列 0开始,数字越小越靠前*/
    order:0;
/*默认0,用于决定项目在有剩余空间的情况下是否放大,0不放大,即使设置了固定宽度也会放大*/
/*若有多个1,则剩余空间平分*/
    flex-grow:1;
/*默认1,用于决定项目在有剩余空间的情况下是否缩小,即空间不足时大家一起等比例缩小*/
    flex-shrink:0;/*设置了这个为0后,即使缩小父box,时,其它两项会缩小,但这项不会缩小宽度*/
  }
  .b1,.b2,.b3{
  text-align: center;
  font-size: 60px;
  line-height: 300px;
  width: 30%;
  width: 600px;
  }
  .box{
    display: flex;
    /*width: 1200px;*/
    height: 900px;

/*控制排序方向与顺序*/
    flex-direction: row-reverse;/*321*/
    flex-direction: column;/*纵 123*/
    flex-direction: column-reverse;/*纵321*/
    flex-direction: row;/*123*/

/*控制是否换行*/
    flex-wrap: nowrap; /* 不换行,假设你200,子设置多少都没用,则是会 200/3来计算子容器*/
    flex-wrap: wrap; /*换行,假设父200,子300,共3个,则子实际变为200 = 父*/
    flex-wrap: wrap-reverse;
    flex-flow:row wrap;/* flex-deriction与flex-wrap属性的简写集合,默认属性为row nowrap */ /*推荐*/

/* 横轴处理*/
    justify-content:flex-start;/*左对齐*/
    justify-content:space-between;
    justify-content:flex-end;
    justify-content:space-around;/* 两边为中间隔的1/2 */
    justify-content:space-evenly; /*间距一致*/

/*纵轴处理*/
    align-items:stretch;/*默认 如果项目没设置高度,或高度为aut 则占满整个屏幕o*/
    align-items:flex-start; /*子容器在顶部*/
    align-items:flex-end; /*子容器在底部*/
    align-items:center;

/*注意:当flex-direction:column,时,justify-content 与 align-items 横纵轴会发过来*/

/*用于控制多行,一行,不会起效果*/
    align-content:stretch;/**/
    align-content:center;
    align-content:space-between;
}
// splice(位置,删除几个,插入)

//插入
var _arr = ['A','B','C','D']
_arr.splice(2,0,'F')  //['A', 'B', 'F', 'C', 'D']    第二个位置,插入一个F
console.log(_arr) 
console.log(_arr.splice(2,0,'F'))  //[]

//删除
var _arr = ['A','B','C','D']
_arr.splice(2,1)
console.log(_arr)  // ['A', 'B', 'D']  第二个位置,删除一个元素
console.log(_arr.splice(2,0)) //[]

//替换
var _arr = ['A','B','C','D']
_arr.splice(2,1,'F') //替换第三个字符为 F
console.log(_arr)  // ['A', 'B', 'F', 'D']
console.log(_arr.splice(2,1,'F')) //['F']


_arr.unshift('E','F') //插前
_arr.push('E','F') //插后
_arr.shift() //删前
_arr.pop() //删后

//箭头函数

  //两个参数
const sum = (num1,num2) =>{
  return num1 + num2
}

//一个参数
const power = (num) =>{
  return num * num
}
------> 一个参数时,() 可省
const power1 = num =>{
  return num * num
}

//fn代码中有一行代码 特殊写法
const mul = (num1,num2)=>num1 * num2
console.log(mul(11, 22));
//数组操作 filter map reduce

//通常:取出所有小于100的数字
const nums = [222,111,2222,333,123,10,20,30,50]
let newNums = []
for(let n of nums){
  if(n<100){
    newNums.push(n)
  }
}
console.log(newNums);

--------------------------------------------------------------------------

//filter 中的回调必须返回一个boolean值 :
//true,内部自动将回调的n加到新的数组中
//false,自动过滤此次n

const nums2 = [222,111,2222,333,123,10,20,30,50]
let nne = nums2.filter(function (n) {
  return n < 100   //返回一个bl值
})
console.log(nne); // [10, 20, 30, 50]

--------------------------------------------------------------------------

//map 如果需要对每个数据的每次回都操作,则用map

const mapArr = [222,111,2222,333,123,10,20,30,50]
let nne2 = mapArr.map(function (n) {
  return n*8
})
console.log(nne2); // [1776, 888, 17776, 2664, 984, 80, 160, 240, 400]

--------------------------------------------------------------------------

//reduce 对数据中所有的内容进行汇总
//reduce(fn,0)
//fn必须传两值:(前一个值即上一个返回值,初始值)
const reduceArr = [1,2,3,4,5,6,7,8,9,10]
let reduceArr2 = reduceArr.reduce(function(preV,n){
    return preV + n
},0)
console.log(reduceArr2)  //55
//第一次 preV = 0  n = 1
//第二次 PreV = 1  n = 2
//第三次 PreV = 2  n = 3
...
//最后一次  PreV = 9  n = 10
//获取Json长度
  function getJsonLength(jsonData){
    var jsonLength = 0;
    for(var item in jsonData){
      jsonLength++;
    }
    return jsonLength;
  }
//数组去重
var _arr = ['','apple','bannna',123,321,'','',123,'bannna']
console.log([...new Set(_arr)])  //["", "apple", "bannna", 123, 321]