0.0.13 • Published 4 years ago

tlfns v0.0.13

Weekly downloads
2
License
ISC
Repository
github
Last release
4 years ago

安装:

$ npm i -S tlfns 

使用方式:

// 引入指定功能 
import xxx from "tlfns/src/xx/xxx.js";
或 
import 'tlfns/src/xx/xxx.js';  // 引入无变量导出的某些功能 

◆无变量导出的预设功能:

import 'tlfns/src/dom/EventTarget-noexport.js';  
EventTarget
  .addListener(evtName,listener,immediateWay)  // 绑定事件监听 
    evtName       str,事件名称 
    listener      fn,事件回调 
    immediateWay  bol,可选,立即响应的方式,默认:不立即响应,0:原生触发方式,1:仅执行回调 
  .offListeners(evtName,listener)             // 移除事件监听 
    evtName?   str,可选,不存在则移除所有监听  
    listener?  fn,可选,存在则只移除当前事件,否则移除所有该类事件 
  .emitListeners(evtName,data,emitWay)        // 触发事件 
    evt?      Event/str,可选,事件名称,不存在则触发所有事件的所有监听 
    data?     any,可选,传递的数据,在 evt.msg 中获取  
    emitWay?  0/1,触发方式,默认:0 原生触发方式 
    
import 'tlfns/src/es/Object-noexport.js';  
Object
  .forEach((val,key)=>{})        // 对象遍历 
  .map((val,key)=>{})            // 返回一新对象,键的值由回调返回值确定 
    let obj = { key1: 1, key2: 2 }
    let obj1 = obj.map((val,key)=>{
      if(val===1){ return 100; }
      return val;
    })
    console.log(obj1); // {key1: 100, key2: 2}
  .filter((val,key)=>{})         // 返回一新对象,根据返回调回值来过滤原对象的键值对 
  .reduce((val,key)=>{},initVal) // 返回最后一次回调的返回值 
  .some((val,key)=>{})           // 当返回值返回true时,则立即返回true,否则最终返回 false 
  .every((val,key)=>{})          // 当返回值返回false时,则立即返回false,否则最终返回 true 

◆ES相关:

import {getThisFnName,throttle} from './src/es/functions.js';  
getThisFnName()    // str,函数内获取当前函数的名称 [函数内执行当前函数] [严格模式下可用] 
throttle(fn,context,time=600)   // 函数节流: 限制函数执行频率 
  fn       // [高频]执行的函数 
  context  // 函数执行的上下文 
  time=600 // num,限制的频率,单位:ms  

import {roundFloat,preciseAdd,preciseMul} from './src/es/Number.js';  
roundFloat(num,decimals=0)       // 取舍小数位 
preciseAdd(num1,num2)            // 浮点数精确相加 
preciseMul(num1,num2,decimals)   // 浮点数精确相乘 

◆DOM相关:

import copyText from './src/dom/copyText.js';  
copyText(text)    // 文本复制,返回是否复制成功的 Promise, 

import multiRowsEllipsis from './src/dom/multiRowsEllipsis.js';  
multiRowsEllipsis(elem,rows=2,sym='...',autoMode=true)   // 多行省略号,返回最终的字符串  
  elem      显示文本的且需设置多行省略的元素 
  rows      行数 
  sym       省略号字符串 
  autoMode  是否自动改变 [vue中需交给vue来维护,将返回最终的字符串重新赋值到文本显示区] 

import onResize from './src/dom/onResize.js';  
onResize(elem,callback,immediate=true)   // 监听元素的尺寸变化 
  elem       监听的元素 [目前仅支持可插入子元素的元素监听] 
  callback   元素尺寸变化时的回调 
  immediate  是否立即触发响应 

◆BOM相关:

import {getOSName,getBrowserInfo,isIE,isLowerIE,webPAble} from './src/bom/env.js';  
getOSName()       // str,获取操作系统名称 
  如: 'windows' 'mac' 'linux' 'android' 'ios' 'unkonwn' 
getBrowserInfo()  // str,获取浏览器名称&版本 
isIE()            // bol,是否为IE 
isLowerIE()       // bol,是否为低版本IE [IE7、8、9 之一] 
webPAble()        // bol,浏览器是否支持webP格式图片 

import onConsoleOpen from './src/bom/onConsoleOpen.js';  
onConsoleOpen(callback)                  // 监听控制台打开 

◆其他功能:

import LocalFiles from 'tlfns/src/utils/LocalFiles.js';  
LocalFiles  本地文件上传 
  let localFiles = new LocalFiles({
    // 配置项可选,默认值如下:  
    multiple=true,  // 是否多选 
    accept='*',             // 可选文件类型,可自定义,如: '.pdf,.doc' 
    limitNum=99,            // 一次最多可选数量 
    limitSize=10*1024*1024, // 最大文件体积10M,unit:B 
    base64=false, // 是否返回base64 
    
    url='',              // 上传地址 
    uploadField='',      // 文件上传字段
  });
  button1.addEventListener("click",function(evt){
    localFiles.pick()
    .then(list=>{
      console.log(list);
    });
  })
  // 使用拖放功能上传 
  localFiles.onDrop(div1,function(list){
    console.log(list);
  })

◆设计方案:

import adapt from './src/design/adapt.js';  
adapt(sizeList,root,outMinHandle,outMaxHandle)  // 用于移动端页面布局 
  Example: 
    adapt(
      [200,375,600],  // 最小屏幕宽度 200, 最大 600, 默认按照 375 宽度布局 
      window, 
      ()=>{
        // 当屏幕宽度超过了最小值时的回调 
        console.log('超过了最小值 200px');
      }, 
      ()=>{
        // 当屏幕宽度超过了最大值时的回调 
        console.log('超过了最大值 600px');
      } 
    )
    
    // 在按照 375 宽度布局时, 
    // CSS样式中, 0.2rem 即表示 20px 
    // 使用less时: 
    // 在less中定义变量 @w: 1rem/ratio; 来表示1px 
    // 后续使用,如 width: 20 *@w 来表示20px在iPhone8中的大小 
    // 而当屏幕尺寸变化时,将按比例进行缩放,始终保持同 375 屏宽时,相同的比例大小 


import StateManager from './src/design/StateManager.js';  
StateManager: 状态<=>控制 条件配置化 
场景: 
  当业务复杂,一个功能是否可用或一个UI元素的显示控制或逻辑操作,需要多个状态/条件值来确定,
  而大量存在该场景时,若每次都条件来组合判断,冗余且逻辑散落未集中管理,导致开发、维护困难 
  
  场景需求: 多对多, 多个条件对多个操作 
  对象存储: 一对多, 多个条件合并为一个对应多个操作 
  对象查询: 多对一, 多个条件合并为一个查询指定一个操作 
解决方案: 
  将需要组合的条件配置化,集中管理,
  通过一函数传入条件来进行判断, 

StateManager 使用例子:  
  // 初始化 传入 将会用到的所有条件的list
  let stMg = new StateManager([ 
    'aa', // 条件a
    'bb', // 条件b
    'cc', // 条件c
    'dd', // 条件d
    'ee', // 条件e
    'ff', // 条件f
  ]);
  // 定义 功能 和 条件的对应关系 
  stMg.setConfigs([
    [
      // 表示 条件aa为'01'&条件bb为'01'&条件cc为'03', 对应的 hd1: '001', hd2: true 
      { aa: '01', bb: '01', cc: '03' },
      { hd1: '001', hd2: true, },
    ],
    [
      // 表示 aa条件为'02'时[其他条件任意],对应的 hd1: '222' 
      { aa: '02', },
      { hd1: '222', },
    ],
    [
      // 表示 cc 条件不为'02'时,对应的 hd1: '非02' 
      { cc: '!02', },
      { hd1: '非02', },
    ],
    // ...  定义若干个,根据自己业务需求而定 
  ])
  stMg.setter(
    { aa: '01', bb: '02', },
    { hd1: true, hd2: '01', },
  )


  // 后续在需要使用的地方进行查询
  // 可将 stMg.getter 导出, 在需要的地方引入使用 
  let val1 = stMg.getter('hd1',{ aa: '01', bb: '01', }); 
  console.log( val1 ); // '222'  
  let val2 = stMg.getter('hd2',{ aa: '01' }); 
  console.log( val2 ); // undefined  
  let val3 = stMg.getter('hd1',{ aa: '01', bb: '01', cc: '03' }); 
  console.log( val3 ); // '001'  
  let val4 = stMg.getter('hd1',{ cc: '01' }); 
  console.log( val4 ); // '非02'  

针对于使用vue的项目,若使用了vuex,则可将该功能集成到 store 中 
  // 注册到store中 
  stMg.install(store,'stateManager');  
  // 后续在需要使用的地方进行查询 
  vm.$store.getters['stateManager/query']('hd2',{
    aa: '01',
    bb: '02',
  })
0.0.11

4 years ago

0.0.12

4 years ago

0.0.13

4 years ago

0.0.10

5 years ago

0.0.9

5 years ago

0.0.8

5 years ago

0.0.7

5 years ago

0.0.6

5 years ago

0.0.5

5 years ago

0.0.4

5 years ago

0.0.3

5 years ago

0.0.2

5 years ago

0.0.1

5 years ago