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 相关文章推荐
javascript 面向对象 function类
May 13 Javascript
WEB高性能开发之疯狂的HTML压缩
Jun 19 Javascript
js导航栏单击事件背景变换示例代码
Jan 13 Javascript
JavaScript更改原始对象valueOf的方法
Mar 19 Javascript
Vue.js双向绑定实现原理详解
Dec 22 Javascript
jQuery ajax的功能实现方法详解
Jan 06 Javascript
JS实现移动端判断上拉和下滑功能
Aug 07 Javascript
Vue.js实现数据响应的方法
Aug 13 Javascript
解决vue-cli webpack打包后加载资源的路径问题
Sep 25 Javascript
JavaScript的词法结构精华篇
Oct 17 Javascript
解决vue组件props传值对象获取不到的问题
Jun 06 Javascript
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise实现基本的跨域请求封装
Oct 21 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下实现折线图效果的代码
2007/04/28 PHP
php开发工具之vs2005图解
2008/01/12 PHP
swfupload 多文件上传实现代码
2008/08/27 PHP
php chr() ord()中文截取乱码问题解决方法
2008/09/08 PHP
php版微信数据统计接口用法示例
2016/10/12 PHP
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
jQuery.extend()的实现方式详解及实例
2013/06/29 Javascript
JS实现的网页倒计时数字时钟效果
2015/03/02 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
nodejs 的 session 简单使用
2016/06/06 NodeJs
JavaScript数据类型转换的注意事项
2016/07/31 Javascript
jQuery基本选择器之标签名选择器
2016/09/03 Javascript
微信小程序 获取微信OpenId详解及实例代码
2016/10/31 Javascript
vue router demo详解
2017/10/13 Javascript
JS简单实现数组去重的方法分析
2017/10/14 Javascript
前端axios下载excel文件(二进制)的处理方法
2018/07/31 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
2018/11/05 Javascript
electron-vue开发环境内存泄漏问题汇总
2019/10/10 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
vue相关配置文件详解及多环境配置详细步骤
2020/05/19 Javascript
AngularJs的$http发送POST请求,php无法接收Post的数据问题及解决方案
2020/08/13 Javascript
PySide和PyQt加载ui文件的两种方法
2019/02/27 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
python面试题之列表声明实例分析
2019/07/08 Python
Django继承自带user表并重写的例子
2019/11/18 Python
python编写微信公众号首图思路详解
2019/12/13 Python
python语言的优势是什么
2020/06/17 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
2021/01/06 Python
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
西班牙创意礼品和小工具网上商店:Curiosite
2016/07/26 全球购物
公立医院改革实施方案
2014/03/14 职场文书
专业技术职务聘任证明
2015/03/02 职场文书
结婚十年感言
2015/07/31 职场文书
团队拓展训练心得体会
2016/01/12 职场文书
Python实现提取PDF简历信息并存入Excel
2022/04/02 Python