美文网首页
javascript基础函数

javascript基础函数

作者: leleo | 来源:发表于2019-07-08 09:59 被阅读0次

获取url参数

// 方法一:
function getQueryString(name) {
  var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  var r = window.location.search.substr(1).match(reg);
  if (r != null) return unescape(r[2]);
}

// 方法二;
function getQueryStringArgs() {
  // 取得查询字符串并去掉开头的问号
  var qs = (location.search.length > 0 ? location.search.substring(1) : ''),
    // 保存数据的对象
    args = {},
    // 取得每一项
    items = qs.length ? qs.split('&') : [],
    item = null,
    name = null,
    value = null;
  //逐个将每一项添加到args对象中
  for (var i = 0; i < items.length; i++) {
    item = items[i].split('=');
    name = decodeURIComponent(item[0]);
    value = decodeURIComponent(item[1]);
    if (name.length) {
      args[name] = value;
    }
  }
  return args;
}

JavaScript加载样式文件

function loadStyle(url) {
        var cssLink = document.createElement('link');
        cssLink.rel = 'stylesheet';
        cssLink.type = 'text/css';
        cssLink.href = url;
        var head = document.getElementsByTagName('head')[0];
        head.appendChild(cssLink)
    }

匹配多个转行的空格

^\s*(?=\r?$)\n

递归函数

function curData(keywords, filterData) {
  var ret = [];
  if (keywords.length == 0) {
    return filterData;
  }
  var pop = keywords.shift().toLowerCase();
  for (var i = 0; i < filterData.length; i++) {
    var dataqp = filterData[i]['data-name'].toLowerCase();
    var patt = new RegExp(pop).test(dataqp);
    if (patt) {
      ret.push(filterData[i]);
    }
  }
  ret = curData(keywords, ret);
  return ret;
}

列队递归函数

  let ID = 0;
  function createAsset(filename) {
  let duixiang = {
    ss : [ID]
  }
  return duixiang
}
function createGraph(){
  let mainAsset = createAsset();
  let queue = [mainAsset]
  for (const asset of queue) {
    
  console.log(queue)
    asset.ss.forEach(path => {
      let child = createAsset()
      queue.push(child)
    })
  }
}
createGraph();

// 需要注意,我现在给的代码是死循环,控制器就是ss里面的值,如果值为空时,就停止执行,如果一直都有,就一直执行,达到循环

获取对象的样式

// 获取marginLeft
var oUlMargin = getComputedStyle(obj, null).marginLeft;

// 设置ul的marginLeft
obj.style.marginLeft = 0 + "px";

给元素添加class

oLi[0].classList.add("active");

获取class集合

let oUl = document.querySelectorAll(".J-carousel ul");

复制元素节点

var iframe = document.getElementsByTagName("iframe")[0];
var oldNode = iframe.contentDocument.getElementById("myNode");
var newNode = document.importNode(oldNode, true);
document.getElementById("container").appendChild(newNode);

插入节点

before把参数节点插入到目标节点前面,只需获取目标节点的父节点,然后父节点调用insertBefore即可。

prepend把参数节点插入到目标节点第一个子节点的位置,获取目标节点的第一个子节点,然后调用insertBefore即可。

append的功能和原生API里appendChild的功能一样。

after把参数节点插入到目标节点的后面,只需获取目标节点的nextSibling,然后调用insertBefore即可。

动画封装

var lastTime = 0;
var prefixes = 'webkit moz ms o'.split(' '); //各浏览器前缀

var requestAnimationFrame = window.requestAnimationFrame;
var cancelAnimationFrame = window.cancelAnimationFrame;

var prefix;
//通过遍历各浏览器前缀,来得到requestAnimationFrame和cancelAnimationFrame在当前浏览器的实现形式
for( var i = 0; i < prefixes.length; i++ ) {
    if ( requestAnimationFrame && cancelAnimationFrame ) {
      break;
    }
    prefix = prefixes[i];
    requestAnimationFrame = requestAnimationFrame || window[ prefix + 'RequestAnimationFrame' ];
    cancelAnimationFrame  = cancelAnimationFrame  || window[ prefix + 'CancelAnimationFrame' ] || window[ prefix + 'CancelRequestAnimationFrame' ];
}

//如果当前浏览器不支持requestAnimationFrame和cancelAnimationFrame,则会退到setTimeout
if ( !requestAnimationFrame || !cancelAnimationFrame ) {
    requestAnimationFrame = function( callback, element ) {
      var currTime = new Date().getTime();
      //为了使setTimteout的尽可能的接近每秒60帧的效果
      var timeToCall = Math.max( 0, 16 - ( currTime - lastTime ) ); 
      var id = window.setTimeout( function() {
        callback( currTime + timeToCall );
      }, timeToCall );
      lastTime = currTime + timeToCall;
      return id;
    };
    
    cancelAnimationFrame = function( id ) {
      window.clearTimeout( id );
    };
}

//得到兼容各浏览器的API
window.requestAnimationFrame = requestAnimationFrame; 
window.cancelAnimationFrame = cancelAnimationFrame;

字符串转json对象

  function getJsonObj(str) {
    var obj = new Function('return ' + str)
    return obj();
  }
  var strJson = '{a:1,b:2}';
  var json = getJsonObj(strJson);
  console.log(typeof json)
  console.log(json)

内置对象的扩展方法

function MyArray(){
  MyArray.prototype = new Array();
  MyArray.prototype.run = function(){
    console.log('添加了一个方法')
  }
};

var arr = new MyArray();
console.log(arr);

浅拷贝

Object.assign(copyObj,obj);

深拷贝

var oldObj = {
  name : '小明',
  age : 18,
  friends:['小花','小猪'],
  goodF:{
    name : '小夏',
    age : 18,
    adress : '上海',
    petsd : [{name:'土豆'},{name:'苹果'}]
  },
  bir : new Date()
}
function deepCopyObj(oldObj, newObj){
  // 先检查第一个参数是否有值,如果没有就初始化一个空对象
  for (const key in oldObj) {
    if (oldObj.hasOwnProperty(key)) {
      const oldValue = oldObj[key];
      if(!isObj(oldValue)){
        newObj[key] = oldValue;
      }else{
        // 如果是引用类型,就再调用一次这个方法,去内部拷贝这个对象的所有属性
        var temObj = new oldValue.constructor;
        deepCopyObj(oldValue, temObj);
        newObj[key] = temObj;
      }
    }
  }
}

// 判断是否是一个对象
function isObj(obj){
  return obj instanceof Object;
}

// 判断是否是一个对象
function isArray(obj){
  return Array.isArray(obj);
}

// 调用
var newObj = [];
deepCopyObj(oldObj,newObj);
console.log(newObj)

resize自适应屏幕,优化性能

  // 初始化参数
  var winH = $(window).height();

  // 屏幕尺寸变化,winH实时获取最新高度
  var winTimer = null;
  $(window).resize(function () {
    winTimer = setTimeout(function () {
      clearTimeout(winTimer);
      var activewinH = $(window).height();
      if(activewinH != winH){
        winH = activewinH;
      }
    }, 200)
  })

跨域的iframe如何做高度自适应

方法一:

<!-- a.com -->
<iframe id="frame" src="http://b.com/">
    <!-- b.com -->
    <iframe src="http://a.com/proxy.html?height=111">
        <!-- a.com/aaa.html -->
        <script>
        top.document.getElementById('frame').height = window.location.search.split('=')[1];
        </script>
    </iframe>
</iframe>

方法二:

参考:https://www.cnblogs.com/congxueda/p/11825820.html

相关文章

  • JS相关思维导图

    javascript DOM操作 javascript windows对象 javascript函数基础 java...

  • JavaScript | 函数与方法

    Reference : JavaScript教程 - 廖雪峰的官方网站 JavaScript函数基础 定义函数 在...

  • part1整理

    函数式编程:JavaScript函数式编程指南 异步编程:异步编程 Promise源码 JavaScript基础知...

  • javaScript系列 [06]-javaScript和thi

    在javaScript系列 [01]-javaScript函数基础这篇文章中我已经简单介绍了JavaScript语...

  • js基础

    JavaScript基础 JavaScript基础语法 变量的声明 运算符 分支结构 循环结构 函数 数据结构 w...

  • JavaScript基础函数

    一:数组 1.indexOf() 搜索一个元素指定位置: Eg Var arr=[10,20,30]; arr....

  • javascript函数基础

    什么是函数 函数是可重复执行的代码块,为了完成特定的功能。 为什么使用函数 因为一部分代码使用次数或许很多,封装起...

  • JavaScript 基础:函数

    最近在阅读《JavaScript 高级程序设计(第三版)》,通过阅读它来学习 JS 知识,本文大部知识内容分来自此...

  • javascript基础-函数

    函数定义表达式: 函数声明语句:

  • javascript基础函数

    获取url参数 JavaScript加载样式文件 匹配多个转行的空格 递归函数 列队递归函数 获取对象的样式 给元...

网友评论

      本文标题:javascript基础函数

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