美文网首页
事件的防抖和节流、跨域相关

事件的防抖和节流、跨域相关

作者: 宁不空 | 来源:发表于2019-08-12 17:00 被阅读0次

保持内心的好奇和平静。


我们总是会遇到事件的频繁触发所导致的请求重复发送及动画掉帧的问题,这些问题有着统一的解决方案,这次做一个总结。

节流

定时器函数通常会遇到的情况是在设置的延迟时间之内回调请求还未执行完毕,或者在鼠标滑动事件中事件的频繁触发,事件节流是为了解决这一个问题所总结出的思想模式,即在一定的延迟时间内事件只执行一次

/**
*  通过使用闭包,判断上一次与当前时间的间隔是否大于设置的时间间隔,如果大于
*  则再次执行回调,否则不执行
*/
function debunce(fn, delay) {
  var lastT = Date.now();
  return function() {
    var nowT = Date.now();
    if(nowT - lastT > delay) {
      // 绑定this
      fn.call(this);
      lastT = nowT;
    }
  }
}

document.scroll = debunce(function() {
    console.log('触发了', Date.now());
  }, 200);
节流.png

防抖

防抖多数用来做防止重复提交的问题,比方说按钮频繁点击从而导致的请求重发提交

/***
* 使用闭包函数,如果定时器存在则不执行事件,如果定时器不存在则执行事件
*/

function bunce(fn, delay) {
  var timer = null;
  return function () {
    clearTimeout(timer);
    timer = setTimeout(function () {
      fn.call(this);
    }, delay);
  }
}

document.getElementById('btn').onclick = bunce(function () {
  console.log('是否频繁触发?');
}, 1200);
防抖.gif

效果就是只有最后一次触发后的1200ms后事件才会触发执行


跨域

跨域是浏览器的同源策略导致的,浏览器为了数据安全考虑 规定:
只有协议名,域名,端口号完全一致的才可以互相访问数据

解决跨域有很多方法:

  • jsonp
  • corse
  • 设置代理

其中jsonp利用了script天然的没有跨域限制来实现
corse需要后台设置
设置代理可以后台配置也可以前台配置,现在用webpack来设置代理特别简单

/**
* jsonp 的实现思路 前后端都需要配置
*/
// 定义回调函数
function getInfo(data) {
  // data 一般为后端返回数据 做对应处理就可以了
}
// 前端工作 与后端统一回调名称 callback 这里用了callback
var script = document.createElment('script');
script.src = 'localhost:8080?callback=getInfo'; // 响应地址
// 插入script标签执行
document.appendChild(script);

相关文章

  • 事件的防抖和节流、跨域相关

    保持内心的好奇和平静。 我们总是会遇到事件的频繁触发所导致的请求重复发送及动画掉帧的问题,这些问题有着统一的解决方...

  • 前端进阶知识谱

    JS 如何解决跨域的问题 文件上传如何做断点续传 表单可以跨域吗 promise、async有什么区别 防抖/节流...

  • 防抖节流、跨域问题

    防抖节流 防抖: 防止用户在短时间内多次进行请求操作 (和点击或者滚动无关,只和发请求的频率有关) 防抖有N种方式...

  • Javascript 基础

    1、函数防抖和函数节流 【《javascript高级程序设计》里,函数节流是这里讲的函数防抖。】函数防抖: 在事件...

  • js的防抖和节流

    js的 防抖(debounce)和 节流(throttle ) 防抖和节流一般用于高频触发事件,属于浏览器性能优化...

  • 每日一题:防抖,节流

    防抖(debounce)和节流(throttle)的核心思想都是为了减少调用事件的频率,以提高性能。 防抖和节流的...

  • 在 Vue 中使用lodash对事件进行防抖和节流

    事件节流和防抖是提高性能或降低网络开销的好方法。虽然 Vue 1曾经支持对事件的节流和防抖,但是在Vue 2中为了...

  • 前端面试题 笔记 Javascript篇

    Javascript Async 和 await Let const var 作用域 数组去重 几种? 节流和防抖...

  • [JavaScript] 函数节流(throttle)和函数防抖

    js 的函数节流(throttle)和函数防抖(debounce)概述 函数防抖(debounce) 一个事件频繁...

  • 面试过程中遇到的问题记录

    1.js的防抖和节流 函数防抖 函数防抖原理(debounce):当持续触发事件时,一定时间段内没有再触发事件,事...

网友评论

      本文标题:事件的防抖和节流、跨域相关

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