JS实现炫酷轮播图


Posted in Javascript onNovember 15, 2020

本文实例为大家分享了JS实现炫酷轮播图的具体代码,供大家参考,具体内容如下

效果图

<!DOCTYPE html>
<html lang="en">

<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>面试必备轮播图</title>
 <link rel="stylesheet" href="demo.css" >
</head>

<body>
 <div class="wrapper" id="wrap">
  <img src="./images/1.png" alt="">
  <img src="./images/2.png" alt="">
  <img src="./images/3.png" alt="">
  <img src="./images/4.png" alt="">
  <img src="./images/5.png" alt="">
 </div>
 <script src="jquery.min.js"></script>
 <script src="index.js"></script>

</body>

</html>

JS代码

var oImg = $('img');
// 默认中间展示索引值为0的这张图片
var curDisplay = 0;
// 将图片分散排列

// 获得图片个数
var len = oImg.length;

// 定时器
var timer;

function init() {
 initalCarousel();
 bindEvent();
}
init();

function initalCarousel() {
 // 获得中间图片
 console.log($('img'))
 var hLen = Math.floor(oImg.length / 2);
 // rNum,lNum分别是分散在中间图片左右左右两侧的图片索引
 var rNum, lNum;
 for (var i = 0; i < hLen; i++) {
  lNum = curDisplay - i - 1;
  // console.log(lNum)
  // 分别让分散在左右两侧的图片平移旋转
  oImg.eq(lNum).css({
   transform: 'translateX(' + (-150 * (i + 1)) + 'px) translateZ(' + (200 - i * 100) + 'px) rotateY(30deg)'
  });
  rNum = curDisplay + i + 1;
  // 如果运动到最后一张 循环运动
  if (rNum > oImg.length - 1) {
   rNum -= oImg.length;
  }
  oImg.eq(rNum).css({
   transform: 'translateX(' + (150 * (i + 1)) + 'px) translateZ(' + (200 - i * 100) + 'px) rotateY(-30deg)'
  });
  oImg.removeClass('active');
 }

 // 当前显示图片直接z轴向前移动 同时添加class名作为标记
 
 oImg.eq(curDisplay).css({
  transform: 'translateZ(300px)'
 }).addClass('active');

}
// 点击事件
function bindEvent() {
 // 在每一张图片上绑定上点击事件
 oImg.on('click', function (e) {
  // 判断点击图片不是第一张显示图片 
  if (!$(this).hasClass('active')) {
   // 标记图片flag切换
   // 改变当前显示图片索引
   curDisplay = $(this).index();
   initalCarousel();
  }
  // 鼠标覆盖 清除自动轮播定时器
 }).hover(function () {
  clearInterval(timer);
  // 鼠标移走 继续轮播
 }, function () {
  play();
 });
}
// 自动播放
function play() {
 timer = setInterval(function () {
  if (curDisplay == len - 1) {
   curDisplay = 0;
  } else {
   curDisplay++;
  }
  initalCarousel();
 }, 2000);
}

CSS样式

*{
 margin:0;
 padding:0;
}
.wrapper{
 position: relative;
 transform-style: preserve-3d;
 perspective: 800px;
 /* border:1px solid black; */
 height:200px;
 margin-top:200px;
}
.wrapper img{
 position: absolute;
 left: 50%;
 top: 50%;
 width: 300px;
 height: 200px;
 margin-left: -150px;
 margin-top: -100px;
 border-radius: 8px;
 transition: transform 0.5s ease-in-out;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
让焦点自动跳转
Jul 01 Javascript
070823更新的一个[消息提示框]组件 兼容ie7
Aug 29 Javascript
JavaScript 变量基础知识
Nov 07 Javascript
奉献给JavaScript初学者的编写开发的七个细节
Jan 11 Javascript
js中 关于undefined和null的区别介绍
Apr 16 Javascript
jQuery如何取id有.的值一般的方法是取不到的
Apr 18 Javascript
JS实现兼容性较好的随屏滚动效果
Nov 09 Javascript
JS中闭包的经典用法小结(2则示例)
Dec 28 Javascript
javascript解析ajax返回的xml和json格式数据实例详解
Jan 05 Javascript
vue项目中添加单元测试的方法
Jul 21 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
Aug 22 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
Nov 17 Vue.js
JS实现购物车基本功能
Nov 08 #Javascript
Vue实现购物车基本功能
Nov 08 #Javascript
vue实现顶部菜单栏
Nov 08 #Javascript
Vue实现菜单切换功能
Nov 08 #Javascript
JS使用setInterval计时器实现挑战10秒
Nov 08 #Javascript
JS实现手风琴特效
Nov 08 #Javascript
JS画布动态实现黑客帝国背景效果
Nov 08 #Javascript
You might like
收音机另类DIY - 纸巾盒做外壳
2021/03/02 无线电
一个PHP操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
2015/03/19 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
2016/11/09 PHP
细品javascript 寻址,闭包,对象模型和相关问题
2009/04/27 Javascript
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
浅谈JavaScript编程语言的编码规范
2011/10/21 Javascript
jquery select动态加载选择(兼容各种浏览器)
2013/02/01 Javascript
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
jquery将一个表单序列化为一个对象的方法
2013/12/02 Javascript
JavaScript中使用concat()方法拼接字符串的教程
2015/06/06 Javascript
谈一谈javascript闭包
2016/01/28 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
2016/11/01 Javascript
Bootstrap下拉菜单样式
2017/02/07 Javascript
详解如何用webpack打包一个网站应用项目
2017/07/12 Javascript
angularjs实现天气预报功能
2020/06/16 Javascript
JS实现验证码倒计时的注册页面
2018/01/02 Javascript
小程序实现左滑删除效果
2019/07/25 Javascript
详解mpvue开发微信小程序基础知识
2019/09/23 Javascript
javascript实现点击小图显示大图
2020/11/29 Javascript
[14:51]DOTA2 HEROS教学视频教你分分钟做大人-卓尔游侠
2014/06/13 DOTA
[52:52]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第三局
2016/02/27 DOTA
wxpython 学习笔记 第一天
2009/02/09 Python
python登录QQ邮箱发信的实现代码
2013/02/10 Python
Python的Urllib库的基本使用教程
2015/04/30 Python
在Python中操作列表之List.append()方法的使用
2015/05/20 Python
Python Pandas实现数据分组求平均值并填充nan的示例
2019/07/04 Python
Python3 无重复字符的最长子串的实现
2019/10/08 Python
Python如何实现Paramiko的二次封装
2021/01/30 Python
斯福泰克软件测试面试题
2015/02/16 面试题
经济管理专业毕业生推荐信
2013/11/11 职场文书
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
企业出纳岗位职责
2014/03/12 职场文书
文员求职信
2014/07/15 职场文书
会计做账心得体会
2016/01/22 职场文书
深入解析NumPy中的Broadcasting广播机制
2021/05/30 Python