首页 > 其他分享 >前端JS-Day22

前端JS-Day22

时间:2022-09-07 13:46:26浏览次数:62  
标签:前端 JS flag num let imgs li Day22 children

箭头函数不创建this对象!

图片无缝衔接:保证轮播图到最后直接跳转到第一位。

 

进行轮播图自动播放的时候,可以采取手动调用点击事件的方式操作。

window.addEventListener('load', () => {
    let lefts = document.querySelector('.arrow-l');
    let rights = document.querySelector('.arrow-r');
    let focus_p = document.querySelector('.focus');
    let imgs = document.querySelector('.imgs')
    let circle = document.querySelector('.circle');
    let imgWidth = focus_p.clientWidth;
    focus_p.addEventListener('mousemove', () => {
        lefts.style.display = 'block';
        rights.style.display = 'block';
        clearInterval(timer);
        timer = null;
        // 清除定时器
    });

    focus_p.addEventListener('mouseout', () => {
        lefts.style.display = 'none';
        rights.style.display = 'none';
        timer = setInterval(() => {
            rights.click();
        }, 1500)
    });

    let num = 0;
    let flag = 0;
    // num为图片号,flag为底部li值

    for (let i = 0; i < imgs.children.length; i++) {
        let li = document.createElement('li');
        li.setAttribute('index', i);
        circle.appendChild(li);
        // 动态生成底部li
        li.addEventListener('click', function () {
            for (let j = 0; j < circle.children.length; j++) {
                circle.children[j].className = '';
            }
            this.className = 'current';
            animations(imgs, -imgWidth * this.getAttribute('index'));
            // 图片切换
            num = this.getAttribute('index');
            flag = this.getAttribute('index');
            // 给当前点击的li设置num和flag防止转换bug
        });
    }
    circle.children[0].className = 'current';
    // 初始化完成

    let first = imgs.children[0].cloneNode(true);
    // 克隆第一个元素放在最后保证无缝转换的功能
    imgs.appendChild(first);

    let switchs = true;
    // 节流阀

    rights.addEventListener('click', () => {
        if (switchs) {
            switchs = false;
            if (num === imgs.children.length - 1) {
                imgs.style.left = 0;
                num = 0;
                // 当前达到最后一位时,清空num值,并使图片复原第一张
            }
            num++;
            animations(imgs, -num * imgWidth, () => {
                switchs = true;
            });
            // 回调函数开启节流阀,保证在动画执行完毕后才能进行下一步操作。
            flag++;
            if (flag === imgs.children.length - 1) flag = 0;
            change();
            // 底部li达到最后时同样也复原并定位到第一点    
        }
    })


    lefts.addEventListener('click', () => {
        if (switchs) {
            switchs = false;
            if (num === 0) {
                num = imgs.children.length - 1;
                imgs.style.right = -num * imgWidth + 'px';
            }
            num--;
            // 目前达到第一位时转换到最后
            animations(imgs, -num * imgWidth, () => {
                switchs = true;
            });
            flag--;
            if (flag < 0) flag = imgs.children.length - 2;
            change();
        }
    })

    function change() {
        for (let i = 0; i < circle.children.length; i++) {
            circle.children[i].className = '';
        }
        circle.children[flag].className = 'current';
    }
    // 底部li的转换

    let timer = setInterval(() => {
        rights.click();
        // 手动调用点击事件
    }, 1500);
});

 

节流阀:防止事件触发过快,使事件无法连续触发。

 

 

标签:前端,JS,flag,num,let,imgs,li,Day22,children
From: https://www.cnblogs.com/LWHCoding/p/16665101.html

相关文章

  • JS版数据结构-链表
    链表代码随笔(JS)/**链表节点*/classNode{el=null;next=null;constructor(el=null,next=null){this.el=el;this.next=next;}}......
  • array.js 说明
    文件说明:数组操作集合引入代码:import$arrayfrom'@/common/js/array.js'varlists=['桌子','椅子','电视','空调','冰箱']//从数组中随机抽取二个元素varg......
  • vue前端项目组件实现自动注册并且全局可引用
     1、首先创建一个组件的目录,例如图中components2、创建一个js主文件和一个存放组件的目录如global3、在js中加入图中代码,实现自动识别组件功能4、在文件入口main.js......
  • js实现当前时间年-月-日 时-分-秒
    1.对Date的扩展,将Date转化为指定格式的String1.(newDate()).Format("yyyy-MM-ddhh:mm:ss.S")==>2006-07-0208:09:04.4232.(newDate()).Format("yyyy-M-dh:m:s.S......
  • 【面试题】JS实现数组扁平化处理,妙不可言啊!
    JS实现数组扁平化处理点击打开视频讲解更加详细期望结果:将数组扁平化并去重最终得到一个升序且不重复的数组步骤:1、数组扁平化2、去重......
  • 2022-09-07 wx.getLocation暂未配置在app.json且没有权限
    前言:昨晚提交了小程序审核,当即就被驳回了,原因是:wx.getLocation接口无权限,且没有在app.json中配置注:我的是wepy小程序解决方案:找到app.wpy,在里面添加代码如下:required......
  • feign 发送form mata数据类型 调用不通问题,JSON parse error Illegal character ((C
    调用方式@FeignClient(name="remoteUserManagerService",url="${base.url}")publicinterfaceRemoteUserManagerService{/***验证token是否正确......
  • js桶排序
    **桶排序**核心思想:对数据进行分桶(分组),分桶后对桶中数据进行排序(可以使用自己喜欢的方式),然后再将所有桶合并(数组合并)。公式:划分桶的数量(数组中最大值-最小......
  • 阿里前端一面必会面试题(附答案)
    浏览器的主要组成部分⽤户界⾯包括地址栏、前进/后退按钮、书签菜单等。除了浏览器主窗⼝显示的您请求的⻚⾯外,其他显示的各个部分都属于⽤户界⾯。浏览器引擎在⽤户......
  • qt中json字符串的读写
    1、json字符串: 2、写json:  3读json:  ......