JavaScript实现旋转轮播图

发布时间 - 2026-01-11 02:51:07    点击率:

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

这个效果是这样的:一共有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)
 }
}

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


# js  # 轮播图  # js轮播图之旋转木马效果  # JavaScript实现旋转木马轮播图  # js实现旋转木马轮播图效果  # JS实现旋转木马轮播图  # 原生JS实现旋转轮播图+文字内容切换效果【附源码】  # 原生js实现旋转木马轮播图效果  # JS实现旋转木马式图片轮播效果  # 原生JS实现旋转木马式图片轮播插件  # JS实现旋转木马轮播案例  # 自己的  # 是一个  # 当鼠标  # 也不  # 还没有  # 第一个  # 鼠标  # 将会  # 浮点  # 是这样  # 就好  # 也很  # 用了  # 第二个  # 很简单  # 做个  # 停在  # 几张  # 来实现  # 装了 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 北京网站制作公司哪家好一点,北京租房网站有哪些?  如何挑选优质建站一级代理提升网站排名?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  如何快速选择适合个人网站的云服务器配置?  中山网站制作网页,中山新生登记系统登记流程?  非常酷的网站设计制作软件,酷培ai教育官方网站?  JavaScript Ajax实现异步通信  浅述节点的创建及常见功能的实现  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  如何快速搭建高效可靠的建站解决方案?  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  如何在宝塔面板中修改默认建站目录?  如何在Windows服务器上快速搭建网站?  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  西安专业网站制作公司有哪些,陕西省建行官方网站?  Linux后台任务运行方法_nohup与&使用技巧【技巧】  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  大型企业网站制作流程,做网站需要注册公司吗?  如何用VPS主机快速搭建个人网站?  如何用已有域名快速搭建网站?  如何用美橙互联一键搭建多站合一网站?  三星网站视频制作教程下载,三星w23网页如何全屏?  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  如何续费美橙建站之星域名及服务?  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  如何基于云服务器快速搭建网站及云盘系统?  如何利用DOS批处理实现定时关机操作详解  Laravel如何实现一对一模型关联?(Eloquent示例)  Android滚轮选择时间控件使用详解  如何在阿里云香港服务器快速搭建网站?  个人摄影网站制作流程,摄影爱好者都去什么网站?  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  JavaScript如何实现音频处理_Web Audio API如何工作?  高端建站三要素:定制模板、企业官网与响应式设计优化  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  Laravel如何创建自定义Facades?(详细步骤)  Laravel如何使用Gate和Policy进行授权?(权限控制)  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  Laravel PHP版本要求一览_Laravel各版本环境要求对照  用yum安装MySQLdb模块的步骤方法  Android okhttputils现在进度显示实例代码  JS去除重复并统计数量的实现方法  如何快速搭建自助建站会员专属系统?  Python高阶函数应用_函数作为参数说明【指导】  智能起名网站制作软件有哪些,制作logo的软件?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)