15-js运动函数和轮播图
admin
2024-01-29 08:02:10
0

文章目录

    • 运动函数
      • 一、运动函数封装
        • 1. 基础单属性运动函数封装
        • 2. 多属性运动函数封装
      • 二、左右切换轮播图
      • 三、Swiper

运动函数

一、运动函数封装

运动函数4步骤:

  1. 获取当前属性,使用parseInt去除单位
  2. 速度(speed)
  3. 下一个位置(next)
  4. 定位(拼接px)

1. 基础单属性运动函数封装

使用定时器前,需要先清除一下定时器,避免用户频繁点击导致生成过多定时器的bug;

传入属性是opacity时,需要特殊处理,将其*100进行运算,避免小数取整的情况造成bug。

传入的值:
dom 目标元素,attr 目标元素的属性名,target 目标元素该属性的目标值,fn 运动到达目标之后需要执行的函数(可以为空)

// 如果运动的属性是opacity,target要乘以100传入
function move(dom,attr,target,fn){clearInterval(dom.timer);dom.timer = setInterval(()=>{// 1. 获取当前位置,清除单位let current;if(attr=='opacity'){current = parseInt(window.getComputedStyle(dom)[attr]*100);}else{current = parseInt(window.getComputedStyle(dom)[attr])}// 2. 速度let speed = (target - current)/10;// 正数向上取整,负数向下取整speed = speed>0?Math.ceil(speed):Math.floor(speed);// 3. 下一个位置let next = current + speed;// 4. 定位if(attr == 'opacity'){dom.style.opacity = next / 100;}else{dom.style[attr] = next+'px';}// 判断是否达到目标if(target==next){clearInterval(dom.timer);if(fn){fn();}}})
}

函数调用举例:

topBtn.onclick = function(){move(div,'top',200);
}
hideBtn.onclick = function(){move(div,'opacity',0*100,function(){// 透明度为0后,将元素隐藏div.style.display='none';})
}

2. 多属性运动函数封装

要点:

  1. 使用对象target,用键值对的形式记录所有需要变化的属性;

  2. for in方法,遍历对象,再通过运动函数4步骤进行处理;

  3. 使用变量flag,每次运动结束判断是否达到目标值,没有就置为false,最后判断flag的值即可判断是否全部属性都达到了目标值。

// 目标元素获取
const div = document.querySelector('div');
// 目标值
const target = {width:200,height:200,left:500,opacity:50
};
// 函数调用
animate(div,target,function(){div.style.display = 'none';
})
// 每隔30ms,所有属性都变动一点
function animate(dom,target,fn){dom.timer = setInterval(()=>{// 记录本次能否到达let flag = true;for(let attr in target){// 1. 当前值let current;if(attr=='opacity'){current = parseInt(window.getComputedStyle(dom)[sttr]*100)}else{current = parseInt(window.getComputedStyle(dom)[attr])}// 2. 获取速度let speed = (target[attr] - current)/10;speed = speed>0?Math.ceil(speed):Math.floor(speed);// 3. 下一个值let next = current + speed;// 4. 定位if(attr=='opacity'){dom.style[attr] = next/100;}else{dom.style[attr] = next + 'px';}if(next != target[attr]){flag = false;}}// 判断是否都到达了目标值if(flag){clearInterval(dom.timer);if(fn){fn();}}},30)
}

二、左右切换轮播图

思路:(单张图片的width=500px)

通过设置ul的left,来展示li的图片内容。ul[left=-500px]时,显示第二张图,图片index=1。

需要用到一.1.中的move函数(基础单属性运动函数封装)

const leftBtn = document.querySelector('.left');
const rightBtn = document.querySelector('.right');
const ul = document.querySelector('ul');
const liS = ul.children;
let index = 0;
leftBtn.onclick = function(){// 第一张图片,无法左移if(index==0)return;index--;move(ul,'left',-index*500);
}
rightBtn.onclick = function(){// 最后一张,无法右移if(index==liS.length-1)return;index++;move(ul,'left',-index*500);
}

三、Swiper

Swiper官网:https://www.swiper.com.cn/

创建一个基础的Swiper:

  1. 引入css和js

    
    
    
  2. 书写轮播图的结构

    Swiper7的默认容器是’.swiper’,Swiper6之前是’.swiper-container’

  3. 如有样式需要改变,不要改固定需要的样式,可以自己添加类型写样式

    .box{width: 500px;height: 200px;margin:100px auto;border:1px solid #ccc;
    }
    .box-next{color:red;
    }
    .box-prev{color:purple;
    }
    
  4. 初始化轮播图

    new Swiper('.box' ,{navigation: {nextEl: '.box-next',prevEl: '.box-prev',},pagination: {el: '.swiper-pagination',dynamicBullets: true,},
    })
    

相关内容

热门资讯

原创 不... 老百姓家里的钱,说来说去也就放在三个地方。一套自住的房,一辆代步的车,再加上银行卡里那点积蓄。这三样...
原创 战... 黑姓蕃王披着貂鼠裘,葡萄宫锦醉缠头,宛如古老画卷里跃然纸上的豪杰。关西的老将依旧能够在战场上苦战,纵...
新网银行取得基于震动信号的活体... 国家知识产权局信息显示,四川新网银行股份有限公司取得一项名为“一种基于震动信号的活体检测方法、设备及...
奕斯伟计算,获中国证监会备案通... 问AI· 奕斯伟计算上市将如何推动RISC-V芯片普及? 2026年6月18日,中国证监会国 际合...
原创 节... 三天假期,全球市场没闲着。SpaceX正式上市、美股半导体暴涨、达沃斯开幕在即。 花5分钟,把假期大...
存储荒蔓延!库克暗示苹果产品将... 下半年的 iPhone,可能真的要变贵了。 根据华尔街日报报道,库克最近确认,由于内存和闪存等存储芯...
避险之后是重估?上银基金解析“... 2026年6月18日,根据新华社报道,“美国和伊朗近日已签署谅解备忘录”。 这不是一次普通的地缘摩擦...
德方纳米拟定增募资不超29亿元... 德方纳米(300769)6月18日晚间公告,公司拟定增募资不超过29亿元,投向锂电新材料一体化(一期...
企业AI谜题:打卡工具谁都能做... 一个特别经典的鸡汤故事 福特公司请专家来修理一台机器,专家检修一周后,在一个部件上画了一个圈,更换该...
金价会重现2011年暴跌及熊市... 2025年至2026年初,国际金价迎来一波规模空前的上行走势,国际金价自每盎司2500美元/盎司附近...
中国何时做出最强大模型?马斯克... (文/陈济深 编辑/张广凯) 今日,有网友在社交媒体提问称:“中国大模型预计何时能够达到Anthro...
落马市委书记留下33个烂尾工程... 6月18日,最高人民法院发布依法惩治渎职犯罪典型案例,其中提到曹某受贿、滥用职权一案。 据披露,2...
攻击217款银行应用:安卓木马... IT之家 6 月 19 日消息,安全公司 Zimperium 于 6 月 17 日发布博文,报告称其...
原创 免... 编辑 | 虞尔湖 出品 | 于见专栏 微短剧行业在2025年迈过了千亿规模门槛,全年3.3万部新剧...
奥克股份:独立董事任建纲辞任 奥克股份:独立董事任建纲辞任 每经AI快讯,6月18日,奥克股份公告,公司董事会近日收到独立董事任建...
2万亿存款“大迁徙”:当利率“... 一场由低利率和资产比价驱动的财富迁移正在发生,2万亿居民存款在两个月内“搬家”,寻找新的“避风港”。...
马化腾身家暴涨千亿,稳居大湾区... 6月17日,新财富杂志发布2026年中国创富榜500强榜单。榜单显示,以持股市值计算的上榜者总财富达...
大搜车冲刺纳斯达克:拟6月25... 雷递网 雷建平 6月18日 大搜车(DSC Holding,股票代码为:“DSC”)日前开启招股,准...
原创 美... 如果把全球能源市场比作一张大牌桌,那么这一轮中东风暴里最让西方分析师抓狂的,不是哪家产油国突然减产,...
董事长不能兼任集体委主任 股份合作公司在深圳城市发展过程中起到了重要作用,烟火气息浓厚。 南都记者 霍健斌 摄 股份合作公司...