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 相关文章推荐
jquery刷新页面的实现代码(局部及全页面刷新)
Jul 11 Javascript
Three.js源码阅读笔记(Object3D类)
Dec 27 Javascript
网站基于flash实现的Banner图切换效果代码
Oct 14 Javascript
jQuery中filter()方法用法实例
Jan 06 Javascript
JavaScript判断用户是否对表单进行了修改的方法
Mar 18 Javascript
JavaScript编程中布尔对象的基本使用
Oct 25 Javascript
老生常谈遮罩层 滚动条的问题
Apr 29 Javascript
微信小程序 获取相册照片实例详解
Nov 16 Javascript
原生JS实现简单放大镜效果
Feb 08 Javascript
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
Apr 27 jQuery
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
Feb 01 Javascript
js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期
Feb 01 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/07/16 PHP
php获取远程文件大小
2015/10/20 PHP
PHP面向对象程序设计实例分析
2016/01/26 PHP
Symfony核心类概述
2016/03/17 PHP
jQuery代码优化 选择符篇
2011/11/01 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
JS实现alert中显示换行的方法
2015/12/17 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
js学习阶段总结(必看篇)
2016/06/16 Javascript
JS中sort函数排序用法实例分析
2016/06/16 Javascript
Angular2  NgModule 模块详解
2016/10/19 Javascript
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
微信小程序 如何保持登录状态
2019/08/16 Javascript
javascript json对象小技巧之键名作为变量用法分析
2019/11/11 Javascript
[01:38:19]夜魇凡尔赛茶话会 第五期
2021/03/11 DOTA
盘点提高 Python 代码效率的方法
2014/07/03 Python
Python中的默认参数详解
2015/06/24 Python
Python安装Numpy和matplotlib的方法(推荐)
2017/11/02 Python
python函数式编程学习之yield表达式形式详解
2018/03/25 Python
python读取文本绘制动态速度曲线
2018/06/21 Python
利用python numpy+matplotlib绘制股票k线图的方法
2019/06/26 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
2019/07/23 Python
Python使用import导入本地脚本及导入模块的技巧总结
2019/08/07 Python
Python实现字符串中某个字母的替代功能
2019/10/21 Python
python+opencv3生成一个自定义纯色图教程
2020/02/19 Python
Python通过Pillow实现图片对比
2020/04/29 Python
Python小白学习爬虫常用请求报头
2020/06/03 Python
Mixbook加拿大:照片书,照片卡,剪贴簿,年历和日历
2017/02/21 全球购物
英国安全产品购物网站:The Safe Shop
2017/03/20 全球购物
REISS美国官网:伦敦最受欢迎的时尚品牌
2019/08/16 全球购物
《记承天寺夜游》教学反思
2014/02/16 职场文书
音乐教育感言
2014/03/05 职场文书
企业诚信承诺书
2014/05/23 职场文书
安全伴我行主题班会
2015/08/13 职场文书
Python机器学习实战之k-近邻算法的实现
2021/11/27 Python
解决vue自定义组件@click点击失效问题
2022/04/30 Vue.js