用JS怎样实现旋转轮播图,过程及代码是什么
Admin 2022-12-01 群英技术资讯 304 次浏览
最近一直在学习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
第二个函数是一个动画函数,用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)
}
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了React自定义视频全屏按钮实现全屏功能,通过绘制全屏按钮,并绑定点击事件,编写点击事件,通过实例代码给大家详细讲解,需要的朋友可以参考下
网格在网页布局中是一个重点和难点,布局是网页设计的起点和基础,本文主要介绍了Bootstrap网格垂直和水平对齐方式,感兴趣的可以了解一下
这篇文章主要介绍了 vue3 自定义指令详情,自定义指令分为全局和局部两种类型,大家并不陌生。今天我们就讲讲在 vue3 中,自定义指令定义、使用以及钩子函数都有哪些变化?,需要的朋友可以参考一下
JavaScript可以对各种网页元素进行操控,下面这篇文章主要给大家介绍了关于JavaScript操作元素的相关资料,文中通过多个实例详细介绍了操作元素的方法,需要的朋友可以参考下
在ES6(ES2015)出现之前,JavaScript中声明变量就只有通过var关键字,函数声明是通过function关键字,而在ES6之后,声明的方式有var、let、const、function、class,本文主要讨论var、let和const之间的区别
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008