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 相关文章推荐
ExtJS PropertyGrid中使用Combobox选择值问题
Jun 13 Javascript
基于jquery的web页面日期格式化插件
Nov 15 Javascript
js 获取input点选按钮的值的方法
Apr 14 Javascript
基于jquery实现的可编辑下拉框实现代码
Aug 02 Javascript
JavaScript 匿名函数和闭包介绍
Apr 13 Javascript
javascript基于prototype实现类似OOP继承的方法
Dec 16 Javascript
JS输出空格的简单实现方法
Sep 08 Javascript
JQuery 封装 Ajax 常用方法(推荐)
May 21 jQuery
Async/Await替代Promise的6个理由
Jun 15 Javascript
使用原生JS实现滚轮翻页效果的示例代码
May 31 Javascript
javascript解析json格式的数据方法详解
Aug 07 Javascript
记录一次websocket封装的过程
Nov 23 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
thinkphp在模型中自动完成session赋值示例代码
2014/09/09 PHP
Symfony2开发之控制器用法实例分析
2016/02/05 PHP
解决laravel中日志权限莫名变成了root的问题
2019/10/17 PHP
解析jQuery与其它js(Prototype)库兼容共存
2013/07/04 Javascript
jquery的map与get方法详解
2013/11/04 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
JS实现清除指定cookies的方法
2014/09/20 Javascript
jQuery实现HTML5 placeholder效果实例
2014/12/09 Javascript
node.js解决获取图片真实文件类型的问题
2014/12/20 Javascript
jQuery获取标签文本内容和html内容的方法
2015/03/27 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
2015/04/16 Javascript
基于jquery实现的树形菜单效果代码
2015/09/06 Javascript
详解Bootstrap的aria-label和aria-labelledby应用
2016/01/04 Javascript
js中遍历对象的属性和值的方法
2016/07/27 Javascript
jquery遍历标签中自定义的属性方法
2016/09/17 Javascript
微信小程序页面生命周期详解
2018/01/31 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
微信小程序时间轴实现方法示例
2019/01/14 Javascript
vue单页面在微信下只能分享落地页的解决方案
2019/04/15 Javascript
JavaScript实现单点登录的示例
2020/09/23 Javascript
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
[15:56]Heroes18_暗影萨满(完美)
2014/10/31 DOTA
Python栈类实例分析
2015/06/15 Python
Python实现删除排序数组中重复项的两种方法示例
2019/01/31 Python
PyQt打开保存对话框的方法和使用详解
2019/02/27 Python
Python接口自动化判断元素原理解析
2020/02/24 Python
浅谈django不使用restframework自定义接口与使用的区别
2020/07/15 Python
python飞机大战游戏实例讲解
2020/12/04 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
两种CSS3伪类选择器详细介绍
2013/12/24 HTML / CSS
完美主义个人的自我评价
2014/02/17 职场文书
决心书标准格式
2014/03/11 职场文书
庆六一活动总结
2014/08/29 职场文书
开展党的群众路线教育实践活动工作总结
2014/11/05 职场文书
少先队中队工作总结
2015/08/14 职场文书
2016年第32个教师节致辞
2015/11/26 职场文书