JavaScript实现旋转轮播图


Posted in Javascript onAugust 18, 2020

最近一直在学习JavaScript,然后看到旋转轮播图的案例,就尝试着用js做了一个简单的轮播图,因为无法显示动态效果,所以就放个截图:

JavaScript实现旋转轮播图

这个效果是这样的:一共有7张图片,它们会自动地向左滑动,然后左右箭头也可以控制轮播图的左滑和右滑,同时,如果鼠标停在图片上,那么轮播图会停止自动滑动,当鼠标移开时,将会继续向左轮播。
首先,我这里封装了两个函数(因为暂且还没有学jQuery,所以用了封装函数的方法来实现),第一个函数是$函数,调用可以获取html中的元素,代码如下:

`function $(select){
 if (typeof select != 'string') {
  console.log('传入的参数有误');  
  return null;
 }
 var firstChar = select.charAt(0);
 switch(firstChar){
  case '#':
  return document.getElementById(select.substr(1));
  break;
  case '.':
  if (document.getElementsByClassName){
   return document.getElementsByClassName(select.substr(1));
  } else {
   var result = [];
   var allElemnts = document.getElementsByTagName('*');
   console.log(allElemnts);
   for (var i = 0; i < allElemnts.length; i++){
   var e = allElemnts[i];
   var className = e.className;
   var classArr = className.split(' ');
   for (var j = 0; j < classArr.length; j++){
    var c = classArr[j];
    if (c == select.substr(1)) {
    result.push(e);
    break;
    }
   }
   }
   return result;
  }
  break;
  default :
  return document.getElementsByTagName(select);
 }
 }`

第二个函数是一个动画函数,用json实现多条样式的动态改变,从而达到一个动画效果,代码如下: `

function animate(element, json, fun) {
 clearInterval(element.timer);
 function getStyle(element, styleName){
 if(element.currentStyle){
  //ie浏览器下 直接通过currentstyle来获取
  //return element.currentStyle.heigh;
  return element.currentStyle[styleName];
 }else{
  var computedStyle = window.getComputedStyle(element,null);
  return computedStyle[styleName];
 }
 }
 var isStop = false;
 element.timer = setInterval(function () {
 isStop = true;
 for (var key in json){
  var target = json[key];
  var current;
  if (key == 'opacity') {
  //当动画的类型为透明度时 获取的值应该是浮点类型
  current = parseFloat(getStyle(element, key)) || 1;
  } else {
  //其他情况 用整数类型
  current = parseInt(getStyle(element, key)) || 0;
  }  
  var step = (target - current) / 10;
  if (key != 'opacity') {
  step = step > 0 ? Math.ceil(step) : Math.floor(step);
  }
  current += step;
  if (key == 'opacity') {
  if (Math.abs(target - current) > 0.01) {
   isStop = false;
  } else {
   current = target;
  }
  element.style.opacity = current + '';
  } else {
  if (Math.abs(target-current) > Math.abs(step)) {
   isStop = false;
  } else {
   current = target;
  }
  if (key == 'zIndex'){
   element.style.zIndex = Math.round(current);
  } else {
   element.style[key] = current + 'px';
  }  
  }  
 }
 if (isStop) {
  clearInterval(element.timer);
  console.log('动画完成');
  if (typeof fun == 'function') {
  fun();
  }
 }
 }, 30);
}`

接下来就要写html的部分了,因为只有几张图片,所以html的部分很简单:

<body>
 <div class="box">
 <div class="content">
  <ul>
  <li><a href="#"><img src="./images/1.jpg"></a></li>
  <li><a href="#"><img src="./images/2.jpg"></a></li>
  <li><a href="#"><img src="./images/3.jpg"></a></li>
  <li><a href="#"><img src="./images/4.jpg" class="current"></a></li>
  <li><a href="#"><img src="./images/5.jpg"></a></li>
  <li><a href="#"><img src="./images/6.jpg"></a></li>
  <li><a href="#"><img src="./images/7.jpg"></a></li>
  </ul>
 </div>
 <div class="control">
  <a href="javascript:;" id="prev"></a>
  <a href="javascript:;" id="next"></a>
 </div>
 </div>
</body>

css样式的部分也不多做叙述。

下面就是JS是部分啦,代码也很简单,理清楚就好

window.onload = function(){
 //定位,并给图片设置大小透明度
 var json = [{
 width: 630,
 top: 23,
 left: 0,
 zIndex: 2,
 opacity: 0
 },{
 width: 630,
 top: 23,
 left: 0,
 zIndex: 3,
 opacity: 0
 },{
 width: 630,
 top: 23,
 left: 0,
 zIndex: 4,
 opacity: 0.6
 },{
 width: 730,
 top: 0,
 left: 125,
 zIndex: 5,
 opacity: 1
 },{
 width: 630,
 top: 23,
 left: 350,
 zIndex: 4,
 opacity: 0.6
 },{
 width: 630,
 top: 23,
 left: 350,
 zIndex: 3,
 opacity: 0
 },{
 width: 630,
 top: 23,
 left: 350,
 zIndex: 2,
 opacity: 0
 }];
function refreshImageLocatin(index){
 //默认情况下 第i张图对应第i个位置
 //index=1时 第i个图对应i-1个位置
 //也就是第i个图对应i-index的位置
 var liArr = $('li');
 for(var i = 0; i < liArr.length; i++){
  var li = liArr[i];
  var locationIndex = i - index;
  console.log('i='+i);
  console.log('index='+index);
  console.log('locationIndex='+locationIndex);
  if(locationIndex < 0){
  locationIndex += 7;
  }
  var locationData = json[locationIndex];
  animate(li, locationData, null);
 }
 }

 refreshImageLocatin(0);

 var index = 0;
 $('#next').onclick = function(){
 index++;
 if(index == 7){
  index = 0;
 }
 refreshImageLocatin(index);
 }
 $('#prev').onclick = function(){
 index--;
 if(index < 0){
  index = 6;
 }
 refreshImageLocatin(index);
 }

 var nextImage = $('#next').onclick;
 var contentBox = $('.content')[0];
 //自动播放
 var timer = setInterval(nextImage, 3000);
 //当鼠标移动到图片上,停止播放
 contentBox.onmouseover = function(){
 clearInterval(timer);
 }
 contentBox.onmouseout = function(){
 timer = setInterval(nextImage ,3000)
 }
}

以上就是旋转轮播图的全部内容了,给自己的学习过程做个简单的记录,也顺便巩固一下。

Javascript 相关文章推荐
[对联广告] JS脚本类
Aug 27 Javascript
在IE中调用javascript打开Excel的代码(downmoon原作)
Apr 02 Javascript
基于MVC3方式实现下拉列表联动(JQuery)
Sep 02 Javascript
Java/JS获取flash高宽的具体方法
Dec 27 Javascript
js/jquery判断浏览器类型的方法小结
May 12 Javascript
基于Node.js的JavaScript项目构建工具gulp的使用教程
May 20 Javascript
JS传值出现中文参数乱码的解决方法
Jun 30 Javascript
js实现上传文件添加和删除文件选择框
Oct 24 Javascript
微信小程序进行微信支付的步骤昂述
Dec 01 Javascript
JavaScript实现水平进度条拖拽效果
Jan 18 Javascript
vue+element-ui实现表格编辑的三种实现方式
Oct 31 Javascript
如何用Node.js编写内存效率高的应用程序
Apr 30 Javascript
JavaScript定时器setTimeout()和setInterval()详解
Aug 18 #Javascript
ECMAscript 变量作用域总结概括
Aug 18 #Javascript
微信小程序之前台循环数据绑定
Aug 18 #Javascript
Vue Cli与BootStrap结合实现表格分页功能
Aug 18 #Javascript
解决微信二次分享不显示摘要和图片的问题
Aug 18 #Javascript
详谈innerHTML innerText的使用和区别
Aug 18 #Javascript
史上最全JavaScript常用的简写技巧(推荐)
Aug 17 #Javascript
You might like
探讨php中header的用法详解
2013/06/07 PHP
php实现zip压缩文件解压缩代码分享(简单易懂)
2014/05/10 PHP
php数组使用规则分析
2015/02/27 PHP
Laravel 框架返回状态拦截代码
2019/10/18 PHP
在你的网页中嵌入外部网页的方法
2007/04/02 Javascript
jquery 跳到顶部和底部动画2句代码简单实现
2013/07/18 Javascript
javascript中interval与setTimeOut的区别示例介绍
2014/03/14 Javascript
JS表的模拟方法
2015/02/05 Javascript
js检测iframe是否加载完成的方法
2015/11/26 Javascript
JavaScript数据结构与算法之链表
2016/01/29 Javascript
Bootstrap如何激活导航状态
2017/03/22 Javascript
vue项目打包后怎样优雅的解决跨域
2019/05/26 Javascript
浅谈微信小程序列表埋点曝光指南
2019/10/15 Javascript
借助云开发实现小程序短信验证码的发送
2020/01/06 Javascript
微信小程序 接入腾讯地图的两种写法
2021/01/12 Javascript
python监控网卡流量并使用graphite绘图的示例
2014/04/27 Python
Python中的zipfile模块使用详解
2015/06/25 Python
python安装numpy&amp;安装matplotlib&amp; scipy的教程
2017/11/02 Python
Python 中字符串拼接的多种方法
2018/07/30 Python
Python pickle模块实现对象序列化
2019/11/22 Python
python实现udp聊天窗口
2020/03/31 Python
Django实现随机图形验证码的示例
2020/10/15 Python
python 用Matplotlib作图中有多个Y轴
2020/11/28 Python
python3字符串输出常见面试题总结
2020/12/01 Python
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
html5仿支付宝密码框的实现代码
2017/09/06 HTML / CSS
美国最大的香水连锁店官网:Perfumania
2016/08/15 全球购物
DJI大疆无人机官方商城:全球领先的无人飞行器研发和生产商
2016/12/21 全球购物
GUESS西班牙官方网上商城:美国服饰品牌
2017/03/15 全球购物
2014县政府领导班子三严三实对照检查材料思想汇报
2014/09/26 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
劳模事迹材料范文
2014/12/24 职场文书
先进事迹材料范文
2014/12/29 职场文书
西柏坡导游词
2015/02/05 职场文书
python基础详解之if循环语句
2021/04/24 Python
Python答题卡识别并给出分数的实现代码
2021/06/22 Python