本文实例为大家分享了JavaScript实现PC端横向轮播图的具体代码,供大家参考,具体内容如下
步骤:
第一步:先实现右侧按钮点击图片动起来;
1.每次点击图片走的距离;
2.起始位置已知,计算定时器每走一小步的距离;
第二步:判断点击按钮一次图片移动的距离,停止定时器;
第三步:左边按钮逻辑和右侧按钮几乎一致;
1.因此封装函数move(flag),函数传参是Boolean则是左右按钮方向
第四步:无缝轮播:html结构修改,在当前结构分别加第一张图和最后一张图;
1.判断图片位置,设置相应位置;
第五步:小圆点逻辑:排他思想;
1.关键在于小圆点变色,用最终位置计算小圆点下标,设置样式;
第六步:点击小圆点,图片切换和小圆点位置对应,move函数中传参数根据类型判断,boolean 是左右按钮,数值室小圆点下标相关;flag参数代表左右按钮和小圆点;
第七步:自动轮播:根据图片下标进行;
第八步:自动轮播和鼠标行为同步时:鼠标移入清楚自动轮播;鼠标移出自动轮播
第九步:鼠标移入后,点击按钮和小圆点有需要把自动轮播的小标值更新,否则没法同步;
html代码:
<div id="swiper"> <ul class="list"> <li><img src="/UploadFiles/2021-04-02/9.jpg">css代码:
<style type="text/css"> * { margin: 0; padding: 0; } ul, li { list-style: none; } a { text-decoration: none; } img { display: block; } input { outline: none; } .clearFix:after { content: ''; display: block; clear: both; } /*禁止系统滚动条*/ html, body { height: 100%; overflow: hidden; } #swiper { position: relative; width: 1000px; height: 500px; background: green; margin: 50px auto 0; overflow: hidden; } #swiper .list { position: absolute; left: -1000px; top: 0; width: 7000px; overflow: hidden; } #swiper .list>li { float: left; width: 1000px; height: 500px; } #swiper .list>li img { width: 100%; height: 100%; } #swiper span { position: absolute; /* left: 0; */ top: 40%; transform: translateY(-50%); width: 80px; height: 100px; background: rgba(0, 0, 0, 0.5); font-size: 50px; color: white; font-weight: bold; padding-top: 30px; text-align: center; opacity: 0; transition: opacity 1s; cursor: pointer; } #swiper:hover span { opacity: 1; } #swiper .btn-left { left: 0; } #swiper .btn-right { right: 0; } #swiper .points { position: absolute; left: 40%; transform: translateX(-50%); bottom: 20px; /* width: 300px; */ } #swiper .points>li { width: 30px; height: 30px; background: rgba(0, 0, 0, 0.5); border-radius: 50%; float: left; margin: 0 5px; } #swiper .points .current { background: red; } </style>javascript代码:
<script> window.onload = function() { // 获取变量 var swiper = document.querySelector('#swiper'); var list = document.querySelector('#swiper .list'); var liNodes = document.querySelectorAll('#swiper .list>li'); var btnNodes = document.querySelectorAll('#swiper span'); // 切换一张需要的总时长 var timeAll = 1000; // 每走一步需要的时长 var timeStep = 20; var timer = null; // 小圆点 var icons = document.querySelectorAll('#swiper>.points li'); var isMove = false; var autoTimer = null; // 鼠标进入banner swiper.onmouseenter = function() { // 清除定时器 clearInterval(autoTimer); } // 鼠标离开banner swiper.onmouseleave = function() { // 打开自动轮播定时器 autoRun(); } // 点击按钮切换图片 // 右按钮 btnNodes[1].onclick = function() { // 图片且切换函数 move(true); } // 左按钮 btnNodes[0].onclick = function() { // 图片切换函数 move(false); } // 图片切换函数 function move(flag) { // 保证定时器只开一个,不会堆砌 if (isMove) { return; } isMove = true; // 区分flag参数,boolean是左右图片切换 if (typeof flag == 'boolean') { if (flag) { var elementDistance = -1000; } else { var elementDistance = 1000; } } else { var elementDistance = flag - list.offsetLeft; } // 每次点击后,ul所走的距离 var elementLast = list.offsetLeft + elementDistance; // 每走一小步的距离 var step = elementDistance / (timeAll / timeStep); timer = setInterval(function() { var left = list.offsetLeft + step; if (left == elementLast) { // 走的的距离等于最终的位置 clearInterval(timer); if (left == -6000) { left = -1000; } else if (left == 0) { left = -5000; } isMove = false; } // 设置样式 list.style.left = left + 'px'; }, timeStep); // 小圆点切换逻辑 for (var i = 0; i < icons.length; i++) { icons[i].className = ''; } // 小圆点切换 var index = elementLast / -1000 - 1; if (index > 4) { index = 0; } else if (index < 0) { index = 4; } icons[index].className = 'current'; console.log(icons); //让自动轮播和点击后下标保持统一 autoIndex = index + 1; } // 点击小圆点逻辑 for (var i = 0; i < icons.length; i++) { icons[i].index = i; icons[i].onclick = function() { // 拿小圆点下标,求显示图片的下标,再求显示图片位置 move((this.index + 1) * -1000); } } // 自动轮播逻辑 var autoIndex = 1; autoRun(); function autoRun() { autoTimer = setInterval(function() { autoIndex++; move(autoIndex * -1000); if (autoIndex == 6) { autoIndex = 1; } }, 2000); } } </script>以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]