废话不多说,直接上图看效果:

需求:点击左右按钮实现切换用户图片与信息;

原理:点击右侧左侧按钮,把3号的样式给2号,2号的给1号,1号的给5号,5号的给4号,4号的样式给3号,然后根据现在是第几张图片切换成对应的文字;

步骤:

1.让页面加载出所有盒子的样式;

2.把两侧按钮绑定事件(调用同一个方法,只有一个参数,true为正向旋转,false为反向旋转);

3.书写函数:操作函数:左按钮:删除第一个,添加到最后一个;右按钮:删除最后一个,添加到第一个;

4.定义变量,根据对应变量切换对应的文字内容;

代码事例如下:


HTML代码:

写法思路:

1.定义好5张图片,进行图片信息切换;

2.书写好你需要切换的文字内容,定义一个ID;

<!DOCTYPE html>
<html>
<head lang="en"><meta charset="UTF-8"><title>学员信息轮播图</title><link rel="stylesheet" href="css/css.css"/><script src="js/jquery1.0.0.1.js"></script><script src="js/js.js"></script>
</head>
<body><div class="feedbackwrap" id="feedbackwrap"><div class="feedbackslide" id="feedbackslide"><ul><!--五张图片--><li><a href="#"><img src="data:images/1.png" alt=""/></a></li><li><a href="#"><img src="data:images/2.png" alt=""/></a></li><li><a href="#"><img src="data:images/3.png" alt=""/></a></li><li><a href="#"><img src="data:images/4.png" alt=""/></a></li><li><a href="#"><img src="data:images/5.png" alt=""/></a></li></ul><!--左右切换按钮--><div class="feedbackarrow" id="feedbackarrow"><a href="javascript:;" class="feedbackprev"></a><a href="javascript:;" class="feedbacknext"></a></div></div><div class="feedbackname"><p class="p1">学员</p><p class="p2" id="feedstudent">欧阳常斌3</p></div></div></body>
</html>

css代码:

写法思路:

1.定义好左右切换按钮的背景图片;

2.清除默认样式;

3.写好绝对定位,相对定位;

@charset "UTF-8";
/*初始化  reset*/
blockquote,body,button,dd,dl,dt,fieldset,form,h1,h2,h3,h4,h5,h6,hr,input,legend,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0}
body,button,input,select,textarea{font:12px/1.5 "Microsoft YaHei", "微软雅黑", SimSun, "宋体", sans-serif;color: #666;}
ol,ul{list-style:none}
a{text-decoration:none}
fieldset,img{border:0;vertical-align:top;}
a,input,button,select,textarea{outline:none;}
a,button{cursor:pointer;}.feedbackwrap{width:924px;margin:auto;margin-top: 300px;
}.feedbackslide {height:144px;position: relative;
}.feedbackslide li{position: absolute;left:30px;top:0;
}.feedbackslide li img{width:100%;box-shadow:#d6d4d3 0px 0px 20px;
}.feedbackarrow{opacity: 1;
}.feedbackprev,.feedbacknext{width:27px;height:50px;position: absolute;top:50%;margin-top:-25px;background: url(../images/leftblue.png) no-repeat;z-index: 99;
}.feedbacknext{right:0;background-image: url(../images/rightblue.png);
}.feedbackname{width: 100%;margin-top: 26px;display: flex;flex-direction: column;align-items: center;justify-content: center;
}.feedbackname .p1{font-size: 22px;color: #333;margin-bottom: 10px;
}.feedbackname .p2{font-size: 18px;color: #666;
}

js代码:

写法思路:

1.定义一个数组,方便切换图片的样式,进行动画效果;

2.获取元素,定义名称,方便用取;

3.把两侧按钮绑定事件。(调用同一个方法,只有一个参数,true为正向旋转,false为反向旋转);

4.在次为页面上的所有li赋值属性,利用缓动框架;

window.onload = function () {var arr = [{   //  1width:120,top:11,left:87,opacity:20,zIndex:2},{  // 2width:120,top:11,left:237,opacity:40,zIndex:3},{   // 3width:144,top:0,left:387,opacity:100,zIndex:4},{  // 4width:120,top:11,left:561,opacity:40,zIndex:3},{   //5width:120,top:11,left:711,opacity:20,zIndex:2}];//0.获取元素var feedbackslide = document.getElementById("feedbackslide");var feedbackliArr = feedbackslide.getElementsByTagName("li");var feedbackarrow = feedbackslide.children[1];var arrowChildren = feedbackarrow.children;var arrowleft=5;//设置一个开闭原则变量,点击以后修改这个值。var flag = true;move();//3.把两侧按钮绑定事件。(调用同一个方法,只有一个参数,true为正向旋转,false为反向旋转)
arrowChildren[0].onclick = function () {if(flag){flag = false;move(false);}arrowleft++;console.log("left+++",arrowleft)if(arrowleft==1){document.getElementById("feedstudent").innerText="小岳岳2";}else if(arrowleft==2){document.getElementById("feedstudent").innerText="张三峰1";}else if(arrowleft==3){document.getElementById("feedstudent").innerText="林动5";}else if(arrowleft==4){document.getElementById("feedstudent").innerText="令狐冲4";}else if(arrowleft==5){document.getElementById("feedstudent").innerText="欧阳常斌3";arrowleft=0;}else{document.getElementById("feedstudent").innerText="小岳岳2";arrowleft=1;}}arrowChildren[1].onclick = function () {if(flag){flag = false;move(true);}arrowleft--;console.log("right---",arrowleft)if(arrowleft==1){document.getElementById("feedstudent").innerText="小岳岳2";}else if(arrowleft==2){document.getElementById("feedstudent").innerText="张三峰1";}else if(arrowleft==3){document.getElementById("feedstudent").innerText="林动5";}else if(arrowleft==4){document.getElementById("feedstudent").innerText="令狐冲4";}else{document.getElementById("feedstudent").innerText="欧阳常斌3";arrowleft=5;}}//4.书写函数。function move(bool){//判断:如果等于undefined,那么就不执行这两个if语句if(bool === true || bool === false){if(bool){arr.unshift(arr.pop());}else{arr.push(arr.shift());}}//在次为页面上的所有li赋值属性,利用缓动框架for(var i=0;i<feedbackliArr.length;i++){animate(feedbackliArr[i],arr[i], function () {flag = true;});}}}

动画效果js代码如下:

function show(ele){ele.style.display = "block";
}/*** 获取元素样式兼容写法* @param ele* @param attr* @returns {*}*/
function getStyle(ele,attr){if(window.getComputedStyle){return window.getComputedStyle(ele,null)[attr];}return ele.currentStyle[attr];
}//参数变为3个
//参数变为3个
function animate(ele,json,fn){//先清定时器
    clearInterval(ele.timer);ele.timer = setInterval(function () {//开闭原则var bool = true;//遍历属性和值,分别单独处理json//attr == k(键)    target == json[k](值)for(var k in json){//四部var leader;//判断如果属性为opacity的时候特殊获取值if(k === "opacity"){leader = getStyle(ele,k)*100 || 1;}else{leader = parseInt(getStyle(ele,k)) || 0;}//1.获取步长var step = (json[k] - leader)/10;//2.二次加工步长step = step>0?Math.ceil(step):Math.floor(step);leader = leader + step;//3.赋值//特殊情况特殊赋值if(k === "opacity"){ele.style[k] = leader/100;//兼容IE678ele.style.filter = "alpha(opacity="+leader+")";//如果是层级,一次行赋值成功,不需要缓动赋值//为什么?需求!}else if(k === "zIndex"){ele.style.zIndex = json[k];}else{ele.style[k] = leader + "px";}//4.清除定时器//判断: 目标值和当前值的差大于步长,就不能跳出循环//不考虑小数的情况:目标位置和当前位置不相等,就不能清除清除定时器。if(json[k] !== leader){bool = false;}}//只有所有的属性都到了指定位置,bool值才不会变成false;if(bool){clearInterval(ele.timer);//所有程序执行完毕了,现在可以执行回调函数了//只有传递了回调函数,才能执行if(fn){fn();}}},5);
}//获取屏幕可视区域的宽高
function client(){if(window.innerHeight !== undefined){return {"width": window.innerWidth,"height": window.innerHeight}}else if(document.compatMode === "CSS1Compat"){return {"width": document.documentElement.clientWidth,"height": document.documentElement.clientHeight}}else{return {"width": document.body.clientWidth,"height": document.body.clientHeight}}
}

如果复制代码不方便,博主百度网盘分享链接:链接: https://pan.baidu.com/s/1CEez4PN5fh61PC-vud96_w 提取码: t6rh

附加:无间隙自动轮播图:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>图片轮播</title>
<script src="http://libs.baidu.com/jquery/1.11.3/jquery.min.js"></script>
<style>
#box {width:100%;height:80%;overflow:hidden;margin-top: 200px;
}
#box ul {white-space:nowrap;box-sizing:border-box;padding:0;margin:0;
}
#box ul>li {display:inline-block;width:auto;height:100%;padding:0 1px;box-sizing:border-box;
}
#box ul>li>img {height:100%;width:235px;margin:0;padding:0;
}
</style>
</head>
<body>
<div id="box"><ul><li><img src="http://www.jq22.com/img/cs/500x500-1.png"></li><li><img src="http://www.jq22.com/img/cs/500x500-2.png"></li><li><img src="http://www.jq22.com/img/cs/500x500-3.png"></li><li><img src="http://www.jq22.com/img/cs/500x500-4.png"></li><li><img src="http://www.jq22.com/img/cs/500x500-5.png"></li><li><img src="http://www.jq22.com/img/cs/500x500-6.png"></li><li><img src="http://www.jq22.com/img/cs/500x500-7.png"></li><li><img src="http://www.jq22.com/img/cs/500x500-8.png"></li></ul>
</div><script>window.onload = function() {var box = document.querySelector("#box");var ul = document.querySelector("#box ul");var sW = ul.scrollWidth;ul.innerHTML += ul.innerHTML;ul.style.width = ul.scrollWidth;var v = 0;setInterval(() => {v++;if (v > sW) {v = 1;}ul.style.transform = "translateX(" + -v + "px)";}, 20);}var isFirefox = /Firefox/i.test(navigator.userAgent) ? true : false;var unMouseBtn = function(e) {var e = e || window.event;if (e.wheelDelta && e.ctrlKey) { //IE/Opera/Chrome e.wheelDelta±120
         e.preventDefault ? e.preventDefault() : e.returnValue = false;} else if (e.detail && e.ctrlKey) { //Firefox e.detail±3
         e.preventDefault ? e.preventDefault() : e.returnValue = false;}};var mousewheelevt = isFirefox ? "DOMMouseScroll" : "mousewheel";if (document.attachEvent) { //IE/Opera/Chrome
     document.attachEvent("on" + mousewheelevt, unMouseBtn);} else if (document.addEventListener) { //Firefox
     document.addEventListener(mousewheelevt, unMouseBtn, false);}var unCtrl = function(e) {var e = e || window.event;var isFirefox = (/Firefox/i.test(navigator.userAgent)) ? true : false; //Firefoxvar code = isFirefox ? "109,107,173,61" : "109,107,189,187"; // +  -if (e.ctrlKey && code.indexOf(e.keyCode) != -1) {e.preventDefault ? e.preventDefault() : e.returnValue = false;}};document.onkeydown = unCtrl;
</script></body>
</html>

总结:如果demo出现什么问题或者你书写过程中遇到什么麻烦,欢迎在博文下面留言,博主将一一解答,转载请注明出处,谢谢,请珍惜别人的劳动成果!!!

转载于:https://www.cnblogs.com/hejun26/p/9717764.html

原生JS实现旋转轮播图+文字内容切换相关推荐

  1. 原生JS无缝轮播图(左右切换、导航跟随)

    原生JS无缝轮播图(左右切换.导航图标) 功能: 1.实现轮播图的左右无缝切换 2.实现导航图标的跟随显示.点击切换 3.使用定时器进行无缝轮播 css部分 <style>/* 轮播图容器 ...

  2. 用原生JS实现旋转轮播图

    html代码 <div class="wrap" id="wrap"><div class="slide" id=&quo ...

  3. 原生js实现轮播图实例教程

    原生js实现轮播图实例教程 本实例效果如下图所示: 根据实例效果,需要的元素有图片.中间圆点按钮.左右箭头按钮等.实际html代码如下所示: <div class="banner_co ...

  4. 使用原生js将轮播图组件化

    代码地址如下: http://www.demodashi.com/demo/11316.html   这是一个轮播图组件,这里是代码地址,需要传入容器的id和图片地址,支持Internet Explo ...

  5. 原生js实现轮播图——小肉包

    使用原生js实现轮播图--小肉包 今天分享一个使用原生JS实现轮播图的案例,并且配上比较详细的过程讲解,欢迎小伙伴的浏览和批评指正.静态效果图如下: 核心思想 将一些图片在一行中平铺,然后计算偏移量再 ...

  6. 史上最简单的原生JS实现轮播图效果

    原生JS实现轮播图效果 上篇文章我们说到了怎样利用原生JS实现Tab切换的效果,现在我们来说一下Tab切换的"升级版".如何利用原生JS实现轮播图效果.如图: HTML代码: &l ...

  7. 原生js横幅广告轮播图

    手把手原生js简单轮播图 原生js实现图片轮播效果 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

  8. JS实现轮播图点击切换、按钮切换功能

    JS实现轮播图点击切换.按钮切换功能 前言 轮播图案例 总结 前言 轮播图的案例非常经典,写法也非常多,我在写一个自己用的比较多的写法,帮助大家理解,在网页的设计中,可以直接拿去用(记得换图片路径哦! ...

  9. animate用法 js原生_animate动画、原生JS实现轮播图

    写在前面 最近在写项目的时候,才发现自己对css3这部分的内容已经生疏了,复习css3的时候,看到animate属性,就用其写了个焦点轮播图,当然自己也用原生JS码了个,当然css3动画无疑是锦上添花 ...

  10. js轮播图片小圆点变化_原生js实现轮播图(两种方法)

    第一种: 这个是之前写的,比较草率,没有注释,如果这个看不懂就去看第二个,比较仔细,主要是了解他,后面都会有一些插件来使用,很方便,只要几行代码就可写出各种各样的代码,所以,不懂的话,不要太在意, 第 ...

最新文章

  1. 计算机网络概述---传输层 UDP和TCP
  2. 人力资源部如何运用OKR?看三大层面最新OKR模板
  3. 作为事件属性设置而输入的表达式“打开”产生如下错误:在Microsoft Office Access 与 OLE服务器或ActiveX控件通讯时出现问题。
  4. mysql中的where,group by,having:
  5. 蓝桥练习-算法训练 审美课
  6. 关于java中nextline读取空白行的问题
  7. IOS应用开发版本控制工具之Versions使用,iosversions
  8. html基本结构(头部需加上样式表),HTML基本结构、头部、注释(示例代码)
  9. 状态模式java 在线投票_Java 状态模式
  10. 目前高产的稻麦品种的光能利用效率仅为()左右_枣树高产优质高效栽培关键技术...
  11. (转) java 通过 jdbc 链接 ms sql server 中出现 no suitable driver for ...
  12. Hugging Face Course-Diving in 抱抱脸 Tokenizers library (Introduction BPE)
  13. Spatial Transformer Networks(STN)理解
  14. VLAN访问控制列表
  15. 一个Vue+Canvas的酷炫后台管理
  16. chrome是什么?
  17. 【Solidity】5.表达式和控制结构 - 深入理解Solidity
  18. js原生后代选择器_js 后代选择器
  19. Mezzanine Markdown的问题
  20. java运行库未能修复,如何修复Microsoft Visual Studio错误:“程序包未正确加载”?...

热门文章

  1. kvm Libvirt qemu-kvm虚拟主机指定固定IP
  2. Spring Security 安全框架概述 与 快速入门
  3. LocalDateTime时间加减法
  4. java socket 客户端接收_java socket,怎么把客户端接收到的用户名和密码发送给后台?...
  5. 阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_04.mybatis概述
  6. vue实用组件——表格
  7. 51Nod 1002:数塔取数问题(DP)
  8. vue项目开发之v-for列表渲染的坑
  9. 通过sql脚本可以从数据库中查到数据,但是通过jdbc却获取不到
  10. 为什么房间的 Wi-Fi 信号这么差