原生JS实现旋转轮播图+文字内容切换
废话不多说,直接上图看效果:
需求:点击左右按钮实现切换用户图片与信息;
原理:点击右侧左侧按钮,把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:;padding:}
- 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:;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:;
- }
- .feedbackslide li img{
- width:100%;
- box-shadow:#d6d4d3 0px 0px 20px;
- }
- .feedbackarrow{
- opacity:;
- }
- .feedbackprev,.feedbacknext{
- width:27px;
- height:50px;
- position: absolute;
- top:50%;
- margin-top:-25px;
- background: url(../images/leftblue.png) no-repeat;
- z-index:;
- }
- .feedbacknext{
- right:;
- 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 = [
- { //
- width:120,
- top:11,
- left:87,
- opacity:20,
- zIndex:2
- },
- { //
- width:120,
- top:11,
- left:237,
- opacity:40,
- zIndex:3
- },
- { //
- width:144,
- top:0,
- left:387,
- opacity:100,
- zIndex:4
- },
- { //
- width:120,
- top:11,
- left:561,
- opacity:40,
- zIndex:3
- },
- { //
- width: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;
- //兼容IE678
- ele.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; //Firefox
- var 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出现什么问题或者你书写过程中遇到什么麻烦,欢迎在博文下面留言,博主将一一解答,转载请注明出处,谢谢,请珍惜别人的劳动成果!!!
原生JS实现旋转轮播图+文字内容切换的更多相关文章
- 原生js实现轮播图
原生js实现轮播图 很多网站上都有轮播图,但找到一个系统讲解的却很难,因此这里做一个简单的介绍,希望大家都能有所收获,如果有哪些不正确的地方,希望大家可以指出. 原理: 将一些图片在一行中平铺,然后计 ...
- 原生js焦点轮播图
原生js焦点轮播图主要注意这几点: 1.前后按钮实现切换,同时注意辅助图2.中间的button随着前后按钮对应切换,同时按button也能跳转到相应的index3.间隔调用与无限轮播.4.注意在动画时 ...
- 原生js手动轮播图
手动轮播图,为轮播图中的一种,轮播图主要有无缝轮播,手动轮播,延迟轮播,切换轮播等等... 轮播图主要用于展现图片,新出商品,词条,又能美观网页.給网页中增加动态效果. 手动轮播,是小编认为最简单的一 ...
- 封装一个简单的原生js焦点轮播图插件
轮播图实现的效果为,鼠标移入左右箭头会出现,可以点击切换图片,下面的小圆点会跟随,可以循环播放(为了方便理解,没有补2张图做无缝轮播).本篇文章的主要目的是分享封装插件的思路. 轮播图我一开始是写成非 ...
- 原生JS实现轮播图的效果
原生JS实现轮播图的效果: 只要缕清了全局变量index的作用,这个轮播图也就比较容易实现了:另外,为了实现轮这个效果,有几处clearInterval()必须写上.废话不多说,直接上代码,修复了几个 ...
- 使用原生js将轮播图组件化
代码地址如下:http://www.demodashi.com/demo/11316.html 这是一个轮播图组件,这里是代码地址,需要传入容器的id和图片地址,支持Internet Explor ...
- 用原生js封装轮播图
原生js封装轮播图 对于初学js的同学来说,轮播图还是一个难点,尤其是原生js封装轮播图代码,下面是我之前做的一个轮播图项目中封装好的一些代码,有需要的同学可以看一下,有什么不懂的可以看注释,注释看不 ...
- 原生js焦点轮播图的实现
继续学习打卡,武汉加油,逆战必胜!今日咱们主要探讨一下原生js写轮播图的问题, 简单解析一下思路: 1,首先写好css样式问题 2,考虑全局变量:自动播放的定时器,以及记录图片位置的角标Index 2 ...
- 前端基础功能,原生js实现轮播图实例教程
轮播图是前端最基本.最常见的功能,不论web端还是移动端,大平台还是小网站,大多在首页都会放一个轮播图效果.本教程讲解怎么实现一个简单的轮播图效果.学习本教程之前,读者需要具备html和css技能,同 ...
随机推荐
- 自己从0开始学习Unity的笔记 VII (C#中类继承练习)
好久都没有写了.今天做了类继承的练习,做了一个小队,进行简单的判定. namespace 兵团建立练习 { class ServantBasics { public string name; //pr ...
- .Net Core Runtime安装说明
在开发阶段,都是直接安装.Net Core的SDK,但是在部署的时候你还是直接装SDK吗?当然直接装SDK也没什么问题,也可以少一些麻烦.但是如果你像我一样不喜欢在产线上装SDK,只想装Runtime ...
- [uwp]数据绑定再学习
在开始上代码前,先来假设这样一种情形: 出于某些原因,创建一个自定义控件(UserControl),然后为它定义一个依赖属性,这个属性有两个作用,一是调用控件方通过数据绑定技术为它赋值,二是控件内部的 ...
- epoll好文章
https://www.cnblogs.com/apprentice89/p/3234677.html https://www.jianshu.com/p/aa486512e989 https://c ...
- RabbitMq初探——消息持久化
消息持久化 前言 通过上一节,我们知道,有消息确认机制,保证了当消费者进程挂掉后,消息的不丢失. 但是如果rabbitmq挂掉呢?它的队列和消息都会丢失的.为了保证消息在rabbitmq挂掉重启后不丢 ...
- Java_IO流输入输出
第三章 输入输出 一.I/O Input/Output 二.File 用途:对文件和目录进行常规操作(除文件读写操作外). 方法:exists():判断文件或目录是否存在 isFile():判断是否是 ...
- python 快速幂求斐波那契数列
先占坑 后面再写详细的 import numpy as np def pow(n): a = np.array([[1,0],[0,1]]) b = np.array([[1,1],[1,0]]) n ...
- Linux下的压缩及归档
Linux下常用的压缩格式有: gz,bz2,xz,zip,Z //只能压缩文件不能压缩目录,如果传递一个目录,他会把目录中的文件逐个压缩 ..压缩算法:算法不同,压缩比也不同 gz:gzip,压缩后 ...
- Cannot sending data from mongodb into elasticsearch using logstash
Question: Hi all, i have an issue when i try to get data from mongodb to elasticsearch using logstas ...
- linux centos 7 下安装ElasticSearch5.4
一. 把elasticsearch-5.4.0.rpm和kibana-5.4.0-x86_64.rpm上传到centos下/root目录中,如下图:二.进入centos目录/root,并用命令rpm ...