js相关笔记

编程入门 行业动态 更新时间:2024-10-10 07:26:37

js相关<a href=https://www.elefans.com/category/jswz/34/1770047.html style=笔记"/>

js相关笔记

轮播图

html:

<div id="my-slider" class="slider-list"><ul><li class="slider-list__item--selected"><img src=".png"/></li><li class="slider-list__item"><img src=".jpg"/></li><li class="slider-list__item"><img src=".jpg"/></li><li class="slider-list__item"><img src=".jpg"/></li></ul>
</div>

css

#my-slider{position: relative;width: 790px;
}.slider-list ul{list-style-type:none;position: relative;padding: 0;margin: 0;
}.slider-list__item,
.slider-list__item--selected{position: absolute;transition: opacity 1s;opacity: 0;text-align: center;
}.slider-list__item--selected{transition: opacity 1s;opacity: 1;
}

js

class Slider{constructor(id){this.container = document.getElementById(id);this.items = this.container.querySelectorAll('.slider-list__item, .slider-list__item--selected');}getSelectedItem(){const selected = this.container.querySelector('.slider-list__item--selected');return selected}getSelectedItemIndex(){return Array.from(this.items).indexOf(this.getSelectedItem());}slideTo(idx){const selected = this.getSelectedItem();if(selected){ selected.className = 'slider-list__item';}const item = this.items[idx];if(item){item.className = 'slider-list__item--selected';}}slideNext(){const currentIdx = this.getSelectedItemIndex();const nextIdx = (currentIdx + 1) % this.items.length;this.slideTo(nextIdx);}slidePrevious(){const currentIdx = this.getSelectedItemIndex();const previousIdx = (this.items.length + currentIdx - 1)% this.items.length;this.slideTo(previousIdx);  }
}const slider = new Slider('my-slider');

链接:JS Bin - Collaborative JavaScript Debugging

行为:控制流

使用自定义事件来解耦。

总结:基本方法

  • 结构设计

  • 展现效果

  • 行为设计

    • API(功能)
    • Event(控制流)

JS Bin - Collaborative JavaScript Debugging

重构:插件化

code.h5jun/weru

解耦

  • 将控制元素抽取成插件
  • 插件与组件之间通过依赖注入方式建立联系

重构:模板化

code.h5jun/zuve

解耦

  • 将HTML模板化,更易于扩展

重构:组件框架

code.h5jun/vata

抽象

  • 将通用的组件模型抽象出来

总结

组件设计的原则:封装性,正确性,扩展性,复用性

实现组件的步骤:结构设计,展现效果,行为设计

三次重构:插件化,模板化,抽象化(组件框架)

高阶函数

  • 以函数作为参数
  • 以函数作为返回值
  • 常用于作为函数装饰器
function H0F0(fn){return function(..args){return fn.apply(this, args);}
}

常用高阶函数

  • Once——code.h5jun/zoqop
  • Throttle——code.h5jun/gale
  • Debounce——code.h5jun/wik
  • Consumer / 2——code.h5jun/roka,code.h5jun/kapef
  • Iterative——code.h5jun/bucu

为什么使用高阶函数

code.h5jun/zuvoqe

纯函数适合用于单元测试,与外部环境和执行顺序无关,系统稳定性和可靠性得到提高

编程范式

命令式

let list = [1, 2, 3, 4];
let map1 = [];
for(let i = 0; i < list.length; i++){map1.push(list[i] * 2);
}

声明式

let list = [1, 2, 3, 4];
const double = x = > x * 2;
list.map(double);

例子

Toggle——命令式——code.h5jun/tuda

Toggle——声明式——code.h5jun/nal

Toggle——三态门——code.h5jun/foqo

1.防抖动函数

假设delay为1秒

在单位时间 (> 1)内 事件触发的间隔时间小于 1 秒的都不执行

function doubounce (func,delay){let timer = nullreturn function(...args){if(timer)  clearTimeout(timer)timer = setTimeout(()=>{func.apply(this,args)},delay)}
}

2.节流函数

在单位时间 (>1)内 不论事件触发多少次都只会在1秒后执行一次

function throttle(func,delay){let timer return function(...args){if(!timer){timer = setTimeout(() => {timer = nullfunc.call(this,args)}, delay);}}}

更多推荐

js相关笔记

本文发布于:2024-02-14 15:49:49,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1764130.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:笔记   js

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!