jQuery自适应-3D旋转轮播图
2018-10-19 06:13:02来源:博客园 阅读 ()
3D旋转轮播图
本例源于(站长之家实例http://sc.chinaz.com/jiaoben/170215391070.htm)
其他相似示例(https://www.cnblogs.com/incredible-x/p/9688333.html)
自己研究重写了一遍。
一、先写静态的初始样式的css和html。我用的是 550x300的大小一致的 5张图片,代码可拓展为三张、四张、甚至大于五张。如图是静态效果:
图后的代码是静态时的样式html和css。
<!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>Document</title> <!-- jquery CDN --> <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script> <style> * { margin: 0; padding: 0;word-break: break-all; } a { color:#fff;text-decoration: none;} a:hover { text-decoration: none;} ul,li { list-style: none;} html,body{width: 100%;height: 100%;} .main {max-width: 800px; margin: 0 auto;} #slide {width: 100%;height: 420px;position: relative;overflow: hidden;} #slide .pic { position: absolute; } #slide .pic img {width: calc(100% - 14px);height: calc(100% - 14px);} #slide .p1 { z-index: 3;width: 40%;height: 40%;left: -50%;top: 30%;} #slide .p2 { z-index: 4;width: 60%;height: 60%;left: -20%;top: 20%;} #slide .p3 {z-index: 5; width: 80%;height: 80%; left: 10%;top: 10%;} #slide .p4 { z-index: 4; width: 60%; height: 60%; left: 60%; top: 20%;} #slide .p5 { z-index: 3; width: 40%;height: 40%; left: 110%; top: 30%;} #slide .btn { position: absolute; z-index: 6; bottom: 20%; width: 180px; /* 计算得出 5*30+5*6=180 */ margin-left: -90px; left: 50%; } #slide .btn span { width: 24px; height: 8px; border-radius: 3px; float: left; background-color: #dedede; margin: 0 3px; } #slide .btn .on {background-color: #ffd200; } </style> </head> <body> <div class="main"> <div id="slide" class="slide"> <div class="pic"><img src="./images/1.png"></div> <div class="pic"><img src="./images/2.png"></div> <div class="pic"><img src="./images/3.png"></div> <div class="pic"><img src="./images/4.png"></div> <div class="pic"><img src="./images/5.png"></div> <div class="btn"> <!-- <span data-minibtn-id='1'></span><span></span><span></span><span></span><span></span> --> </div> </div> <button class="btn-prev">向左</button> <button class="btn-next">向右</button> </div> </body> </html>
二、然后,js编写动态交互效果。这段是js代码(要引入jQuery库)
备注还比较详细,一和二的代码直接复制就可以运行。
<script> var slideNumber; //轮播图片的数量 var miniSlideBtn = true; //miniSlideBtn=true为开启滚动按钮 var isableTouch = true; //是否可以触摸滑动切换 var isAutoPlay = true; //是否可以自动轮播 //窗口大小改变时改变轮播图宽高 $(window).resize(function () { $(".slide").height($(".slide").width() * 0.56); }); $(function () { $("#slide").height($("#slide").width() * 0.56); //调整轮播图的高度 slideNumber = $("#slide img").length; //轮播图数量 for (let i = 0; i < slideNumber; i++) { //给每个div,而不是img,添加自定义属性编号 $("#slide .pic").eq(i).attr('data-img-id', i); } // 根据轮播图片数量添加图片位置对应的样式 // 还有 if(slideNumber=1,=2,=3,=4,>5) if (slideNumber = 5) { for (let i = 0; i < slideNumber; i++) { $("#slide .pic").eq(i).addClass('p' + (i + 1)); } } //根据图片数量设置轮播图按钮 if (miniSlideBtn) { for (let i = 0; i < slideNumber; i++) { $("#slide .btn").append("<span data-minibtn-id=" + i + "></span>"); } $("#slide .btn").width(slideNumber * 34); $("#slide .btn").css('margin-left', '-' + slideNumber * 17 + 'px'); //调整margin-left 负值使按钮居中 } //自动切换 if (isAutoPlay) { setInterval(() => { right(); }, 3000) } //触摸切换 if (isableTouch) { slideTouch(); } imgClickChange();//点击图片左右切换图片 currentBtn();//当前轮播按钮的选中状态 }); $(".btn-prev").click(function () { //点击按钮翻上一页 left(); }) $(".btn-next").click(function () { //点击按钮翻下一页 right(); }) /*下一张图片,右边的图向左走,注意:第一个变成最后一个,最后一个变成倒数第二个*/ function right() { let temp = new Array(); for (let i = 0; i < slideNumber; i++) { temp[i] = $("#slide .pic[data-img-id=" + i + "]").attr('class'); //临时数组获取class是pic p1,pic p2,pic p3... } for (let i = 0; i < slideNumber; i++) { if (i == 0) { //如果编号为第一张图片,它将变成最后一个 $("#slide .pic[data-img-id=" + i + "]").attr('class', temp[slideNumber - 1]); } else { $("#slide .pic[data-img-id=" + i + "]").attr('class', temp[i - 1]); } } imgClickChange();//点击图片左右切换图片 currentBtn();//当前轮播按钮的选中状态 } /*上一张图片, 左边的图向右走,注意:最后一张会变成第一张,第一个图变成第二个*/ function left() { let temp = new Array(); for (let i = 0; i < slideNumber; i++) { temp[i] = $("#slide .pic[data-img-id=" + i + "]").attr('class'); //临时数组获取class pic p1,pic p2... } for (let i = 0; i < slideNumber; i++) { if (i == slideNumber - 1) { //如果编号为最后一张图片,它将变成 $("#slide .pic[data-img-id=" + i + "]").attr('class', temp[0]); } else { $("#slide .pic[data-img-id=" + i + "]").attr('class', temp[i + 1]); } } imgClickChange();//点击图片本身切换图片 currentBtn();//当前轮播按钮的选中状态 } /*点击图片左右切换图片*/ function imgClickChange() { // $("#slide .p2").click(function(){ prevImg();});//为什么这种写法无效 // $("#slide .p4").click(function(){ nextImg();});//为什么这种写法无效 $('#slide .pic').removeAttr('onclick'); $("#slide .p2").attr('onclick', 'left()'); $("#slide .p4").attr('onclick', 'right()'); } /*当前轮播按钮的选中状态*/ function currentBtn() { var cur = parseInt($("#slide .p3").attr('data-img-id'));//取.p3的当前img-id $("#slide .btn span").removeClass('on'); $("#slide .btn span[data-minibtn-id=" + cur + "]").addClass('on'); } /* jquery写法 slideTouch(),触摸滑动切换 */ /* function slideTouch() { let _start = 0, _end = 0; $("#slide").on('touchstart', (e) => { _start = e.originalEvent.targetTouches[0].pageX; }); $('#slidd').on('touchmove', (e) => { // _end = (_start - e.originalEvent.targetTouches[0].pageX); _end = e.originalEvent.targetTouches[0].pageX; }); $('#slide').on('touchend', (e) => { if ((_start - _end) < -100) { //【起点-终点】的绝对值 >100,故 x<-100 & x>100 left(); _end = 0; } else if ((_start - _end) > 100) { right(); _end = 0; } }); }*/ /* js原生写法 slideTouch(),作用完全同上,触摸滑动切换 */ function slideTouch() { let _start = 0, _end = 0, _ele = document.getElementById('slide'); _ele.addEventListener('touchstart', touchStart, false); _ele.addEventListener('touchmove', touchMove, false); _ele.addEventListener('touchend', touchEnd, false); function touchStart(e) { _start = e.targetTouches[0].pageX; } function touchMove(e) { _end = e.targetTouches[0].pageX; } function touchEnd(e) { if ((_start - _end) < -100) { //【起点-终点】的绝对值 >100,故 x<-100 & x>100 left(); _end = 0; } else if ((_start - _end) > 100) { right(); _end = 0; } } } </script>
效果如下图:只显示三张,太多图的话,手机移动端显示不下
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 两个div并排,右边div固定宽度,左边宽度自适应 2020-06-03
- 两个div并排,左边div固定宽度,右边宽度自适应 2020-06-03
- [原创]jquery更换头像 2020-04-05
- HTML连载78-3D播放器下、背景尺寸属性 2020-03-28
- HTML连载77-3D播放器 2020-03-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash