JavaScript封装大全-持续更新

Ajax封装

  1. // 使用该封装需注意
  2. // Ajax(method(默认GET), url(网址 必传), success(res){(成功时数据处理函数 必传)}, error(res)(失败时数据处理函数), data(网址中qurey部分 用对象形式存储 默认为空))
  3. // 使用ES6语法
  4. class Ajax {
  5. // 解构传入的值 默认参数为空
  6. constructor({method='GET', url, success, error, data={}}={}) {
  7. this.method = method;
  8. this.url = url;
  9. this.success = success;
  10. this.error = error;
  11. this.data = data;
  12. this.main();
  13. }
  14. main() {
  15. const that = this;
  16. // 如果没传入success 则为false return结束程序
  17. if (!this.success) {
  18. console.log('缺少必传参数success');
  19. return;
  20. };
  21. // 如果没有传入url 则为false return结束程序
  22. if (!this.url) {
  23. console.log('缺少必传参数url');
  24. return;
  25. }
  26. // 创建xhr载体对象
  27. const xhr = new XMLHttpRequest();
  28. // 拼接data中键值对
  29. let str = '';
  30. for (let key in data) {
  31. str += `${key}=${data[key]}&`;// key=value&key=value&
  32. }
  33. if (this.method.toUpperCase() === 'GET') {
  34. url += str.slice(0, -1);// key=value&key=value
  35. }
  36. xhr.open(this.method, this.url);
  37. if (this.method.toUpperCase() === 'GET') {
  38. // GET数据格式默认为[querystring]
  39. xhr.send(null);
  40. } else {
  41. // POST需要设置数据格式
  42. xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  43. xhr.send(str.slice(0, -1));
  44. }
  45. xhr.onload = function() {
  46. if (xhr.status === 200) {
  47. // 将xhr响应交给success处理函数
  48. that.success(xhr.response);
  49. } else {
  50. // 将错误xhr状态交给error处理函数
  51. that.error && that.error(xhr.status);
  52. }
  53. }
  54. }
  55. }

Cookie封装

  1. // cookie语法字符
  2. // 名字=值;配置名=配置信息;配置名=配置信息;
  3. // - 配置名
  4. // expires 有效期
  5. // 值 必须为日期对象
  6. // path 路径
  7. // 值 为路径名
  8. // 增
  9. function setCookie(key, value, ops={}) {
  10. // 从ops中找到path拼接 没有则为空字符串
  11. const path = ops.path ? `;path=${ops.path}` : '';
  12. const d = new Date();
  13. // 从ops中找到expires和d相加并设置给d
  14. d.setDate(d.getDate() + ops.expires)
  15. // 将expires拼接 没有则为空字符串
  16. const exp = ops.expires ? `;expires=${d}` : '';
  17. //将所有字符串拼接成有效cookie字符
  18. document.cookie = `${key}=${value}${exp}${path}`;
  19. }
  20. // 删
  21. function deleteCookie(key, ops={}) {
  22. // 将ops中的expires修改为负值 即为删除cookie
  23. ops.expires = -1;
  24. // 利用setCookie将修改expires值给到key对应cookie
  25. setCookie(key, '', ops);
  26. }
  27. // 查
  28. function getCookie(key) {
  29. // 通过document.cookie获取到当前所有cookie组成的一个字符串 并使用splice分割成数组
  30. const arr = document.cookie.split('; ')
  31. // 循环数组
  32. for (let i = 0; i < arr.length; i++) {
  33. // 用splice分割字符串 并找到对应key值
  34. if (arr[i].split('=')[0] === key) {
  35. // 返回对应key值的value
  36. return arr[i].split('=')[1];
  37. }
  38. }
  39. // 如果document.cookie中不存在 返回null
  40. return null;
  41. }

缓速动画封装

  1. // slowMotion(需要运动元素, data中存放left和top键值对表示要运动到目标位置, 回调函数)
  2. function slowMotion(element, data, callback) {
  3. // 函数节流 配合下面的element.timer = null;
  4. if (element.timer) return;
  5. // 函数防抖 不需要配合element.timer = null; 有小
  6. // clearInterval(element.timer);
  7. element.timer = setInterval(() => {
  8. // 设置状态 用于记录是否到达目标位置
  9. let flag = false;
  10. // 循环
  11. for (let attr in data) {
  12. // 使用封装非行内属性的值找到当前位置
  13. const now = getStyle(element, attr);
  14. // 目标位置 - 当前位置 / 8 为步长 随着当前位置离目标位置越近 差值越小 步长越小 实现缓动
  15. let step = (data[attr] - now) / 8;
  16. // 步长取整
  17. step = step < 0 ? Math.floor(step) : Math.ceil(step);
  18. // 将当前位置 + 步长给到对应attr(left或者top)实现元素运动
  19. element.style[attr] = now + step + 'px';
  20. // 当元素到达终点时 将状态设置为true
  21. if (now == data[attr]) flag = true;
  22. }
  23. //状态为true 表示元素已到达终点
  24. if (flag) {
  25. // 清除间隔器
  26. clearInterval(element.timer);
  27. // 缺失这段代码 函数节流一直生效 无法开启下一个间隔器
  28. element.timer = null;
  29. // 调用传进来的回调函数 利用短路特性 当没有callback时 右边将不执行
  30. // 可以利用回调函数调用slowMotion函数实现 当元素到达当前目标位置时 继续向下一个目标位置缓动...
  31. // 例 slowMotion(div, {left : 100} () => {slowMotion(div, {top : 100})})
  32. callback && callback();
  33. }
  34. }, 30)
  35. }
  36. // 封装获取非行内属性的值(浏览器兼容) element为对应元素 attribute为非行内属性
  37. function getStyle(element, attribute) {
  38. return element.currentStyle ? element.currentStyle[attribute] : getCpmputed(element)[attribute];
  39. }

元素基础拖拽封装

  1. // new Drag(传入需拖拽的元素);
  2. class Drag {
  3. constructor (element) {
  4. this.element = element;
  5. this.addEvent();
  6. }
  7. addEvent() {
  8. // 原来downMouse内部的this指向element 这里将this指向强行修改指向Drag创建出来的实例对象
  9. // 用 bind 原因是bind不会自动执行函数
  10. this.element.onmousedown = this.downMouse.bind(this);
  11. }
  12. downMouse(event) {
  13. // element的事件对象(浏览器兼容)
  14. this.downE = event || window.event;
  15. // 原来moveMouse和removeMouse内部的this指向document 这里将this指向强行修改指向downMouse内部this指向 因为downMouse内部指向已经从element修改为Drag实例对象 所以moveMouse和removeMouse内部的this也指向Drag实例对象
  16. // 用 bind 原因是bind不会自动执行函数
  17. document.onmousemove = this.moveMouse.bind(this);
  18. document.onmouseup = this.removeMouse.bind(this);
  19. }
  20. moveMouse(event) {
  21. // document的事件对象(浏览器兼容)
  22. this.moveE = event || window.event;
  23. // 将鼠标在页面中的位置 - 鼠标相对于元素的偏移量得到元素左/上边应该距离页面的位置
  24. let l = this.moveE.pageX - this.downE.offsetX;
  25. let t = this.moveE.pageY - this.downE.offsetY;
  26. // 将元素限制在可视区域内(边界限定)
  27. // 这里if条件里不用 = 的原因是 如果用 = 当拖拽元素到边界上时会吸附在边界上
  28. if (l < 0) l = 0;
  29. if (t < 0) t = 0;
  30. // document.documentElement.clientWidth/Height为当前可视区域大小
  31. // this.element.offsetWidth/Height为当前元素宽高
  32. if (l > document.documentElement.clientWidth - this.element.offsetWidth) l = document.documentElement.clientWidth - this.element.offsetWidth;
  33. if (t > document.documentElement.clientHeight - this.element.offsetHeight) t = document.documentElement.clientHeight - this.element.offsetHeight;
  34. // 把当前位置给到元素的left/top
  35. this.element.style.left = l + 'px';
  36. this.element.style.top = t + 'px';
  37. }
  38. removeMouse() {
  39. // 鼠标抬起后 删除鼠标移动和抬起事件
  40. document.onmousemove = null;
  41. document.onmouseup = null;
  42. }
  43. }

JavaScript封装大全的更多相关文章

  1. JavaScript资源大全中文版(Awesome最新版--转载自张果老师博客)

    JavaScript资源大全中文版(Awesome最新版)   目录 前端MVC 框架和库 包管理器 加载器 打包工具 测试框架 框架 断言 覆盖率 运行器 QA 工具 基于 Node 的 CMS 框 ...

  2. javascript开源大全

    javascript开源大全 Ajax框架-jQuery 可视化HTML编辑器-CKEditor 国产jQuery-UI框架-(jUI)-DWZ 网页开发FireFox插件-Firebug 服务器端的 ...

  3. JavaScript 资源大全中文版

    我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-javascript 是 sorrycc 发起维护的 JS 资源列表,内容包括:包管理器.加 ...

  4. 【JS】javascript 正则表达式 大全 总结

    javascript 正则表达式 大全 总结 参考整理了一些javascript正则表达式 目的一:自我复习归纳总结 目的二:共享方便大家搜索 微信:wixf150 验证数字:^[0-9]*$ 验证n ...

  5. 【PCB】电子元件封装大全及封装常识

    电子元件封装大全及封装常识 电子元件封装大全及封装常识 一.什么叫封装封装,就是指把硅片上的电路管脚,用导线接引到外部接头处,以便与其它器件连接.封装形式是指安装半导体集成电路芯片用的外壳.它不仅起着 ...

  6. JavaScript封装

    js封装就是把使用方式简单化,内部逻辑和使用解耦.使用人员知道参数和返回值就可以了,其他不用使用人员设置. 封装就是将属性,方法,字段等封装成类. JavaScript封装方法 1,函数方式 func ...

  7. javaScript封装的各种写法

    在javascript的世界里,写法是个神奇的现象,真是百家齐开放啊!每次看到老外写的js组件,思想和写法都怪异,就没看到一个js结构基本相同的代码出来.今天,我就来谈谈js写法,我在开发过程中,也写 ...

  8. Javascript 封装问题

    Javascript 封装问题 为什么会用这样一个题目呢,这是要说封装的什么问题,本文并不讲高深的封装理论,只是解决一个小问题. 问题来源 今天在百度知道上闲逛,遇到一个网友的问题,问题如下,问题的地 ...

  9. javascript函数大全

    JavaScript函数大全 1.document.write(""); 输出语句2.JS中的注释为//3.传统的HTML文档顺序是:document->html->( ...

  10. 面向对象的JavaScript --- 封装

    面向对象的JavaScript --- 封装 封装 封装的目的是将信息隐藏.一般而言,我们讨论的封装是封装数据和封装实现.真正的封装为更广义的封装,不仅包括封装数据和封装实现,还包括封装类型和封装变化 ...

随机推荐

  1. jmeter学习-性能指标、jmeter初识

    一:性能测试的指标 1. 并发/并发数/并发用户数 狭义的并发:同一时间做相同的一件事 广义的并发:同一时间做不同事情,混合场景,对服务器来说的并发 性能测试,先做简单的狭义并发,在做广义并发:先做单 ...

  2. Sqoop导入MySQL表中数据到Hive出现错误: ERROR hive.HiveConfig: Make sure HIVE_CONF_DIR is set correctly.ERROR tool.ImportTool: Import failed:

    1.问题描述: (1)问题示例: [Hadoop@master TestDir]$ sqoop import --connect jdbc:mysql://master:3306/source?use ...

  3. Asp.Net Core 网站使用TinyMCE实现上传图片

    1.下载TinyMCE https://www.tiny.cloud/get-tiny/self-hosted/ 解压缩后放在网站wwwroot目录 2.下载中文语言包 https://www.tin ...

  4. MQ异常断开

    ActiveMQ:No operations allowed after statement closed问题及解决办法   ActiveMQ版本:5.5.1 现象: 系统现象:部分消息发送失败,失败 ...

  5. TAP 交换机

    首发第一篇,就想分享一下TAP交换机的网络设备,为啥要谈这个呢,因为是一个冷门产品,大厂一般都没有,有也不作为重点产品推介,所以关注的人少,希望能给有这方面需求的人,又苦于找不到介绍资料的人以帮助.在 ...

  6. 集群的概念、分类及LVS三种模式总结

    1.集群概念: 集群是一组协同工作的服务器,各有分工,对外表现为一个整体. 2.集群分类: 负载均衡集群LBC:分担服务的总体压力 高可用集群HAC:尽可能的保障服务状态的可用性 高性能运算集群HPC ...

  7. week4题解

    1.深度优先搜索 思路:以固定的移动顺序走迷宫,若能到终点则记一次 到终点后回溯到前一个有分岔的地方,走另一条路线 若走到死路也同样回溯到前一个有分叉的地方. 最终遍历所有路线 #include &l ...

  8. Mongodb between 时间范围

    db.getCollection("Order").find({ "Supplier.ServiceCode": "CNI", " ...

  9. idea中执行“npm/yarn”命令,提示'node/yarn' 不是内部或外部命令,也不是可运行的程序

    问题:idea中执行"npm/yarn"命令,提示'node/yarn' 不是内部或外部命令,也不是可运行的程序.但是在本地打开cmd 是可以运行npm/yarn命令的 解决方法: ...

  10. [rk3568][common] 环境搭建

    1. 安装依赖 sudo apt-get install uuid uuid-dev zlib1g-dev liblz-dev liblzo2-2 liblzo2-dev lzop \ git-cor ...