<!DOCTYPE html>
<html><head lang="en"><meta charset="UTF-8"><title>原生JS实现韩雪冬轮播图</title><link rel="stylesheet" href="css/index.css" />
</head><body><div class="wrap" id="wrap"><div class="slide" id="slide"><ul><li><a href="#"><img src="data:images/0.jpg" alt="" /></a></li><li><a href="#"><img src="data:images/1.jpg" alt="" /></a></li><li><a href="#"><img src="data:images/2.jpg" alt="" /></a></li><li><a href="#"><img src="data:images/3.jpg" alt="" /></a></li><li><a href="#"><img src="data:images/4.jpg" alt="" /></a></li></ul><div class="arrow" id="arrow"><a href="javascript:;" class="prev" id="arrLeft"></a><a href="javascript:;" class="next" id="arrRight"></a></div></div></div><script src="js/index.js"></script><script>// 标注了每个图片要运动到的位置// config其实就是一个配置单 规定了每张图片的大小位置层级透明度var config = [{width: 400,top: 20,left: 50,opacity: 0.2,zIndex: 2},{width: 600,top: 70,left: 0,opacity: 0.8,zIndex: 3},{width: 800,top: 100,left: 200,opacity: 1,zIndex: 4},{width: 600,top: 70,left: 600,opacity: 0.8,zIndex: 3},{width: 400,top: 20,left: 750,opacity: 0.2,zIndex: 2},];// 1.获取元素var wrap = document.getElementById("wrap");var slide = wrap.children[0];var list = slide.children[0];// 所有要进行运动的livar lis = list.children;var arrow = slide.children[1];// 箭头的父容器var arrLeft = arrow.children[0];var arrRight = arrow.children[1];// 2.让每一个li运动到指定位置(根据config的内容)changePic();// 3.移入移出box的时候,设置箭头的渐变效果wrap.onmouseover = function () {animate(arrow, { opacity: 1 });};wrap.onmouseout = function () {animate(arrow, { opacity: 0 });};var flag = true;arrRight.onclick = function () {// 如果flag 值为true,这时可以执行代码if (flag) {// 设置flag为false,这时无法再次点击flag = false;// 修改config中对象的位置,将第一个对象添加到最后config.push(config.shift());// 让每个li运动到对应的位置上changePic();}};arrLeft.onclick = function () {if (flag) {flag = false;// 将config中的最后一个对象移动到最前面config.unshift(config.pop());// 让每个li运动到对应的位置上changePic();}};function changePic() {for (var i = 0; i < config.length; i++) {animate(lis[i], config[i], function () {// 这个位置的代码会在运动完毕后执行// 这个位置书写的代码无法保证所有的图片均运动完毕// 只要有一个图片运动完,设置flag为trueflag = true;});}};function animate(tag, obj, fn) {clearInterval(tag.timer);tag.timer = setInterval(function () {// 假设当前这一次定时器代码执行可以设置清除(每个样式都到达了指定位置)var flag = true;// 先遍历objfor (var k in obj) {// 由于obj中有一些属性可能是zIndex或者opacity,这时需要单独处理if (k == "opacity") {// 将透明度当前值和目标值都设置为扩大后的倍数,设置时除以相应倍数即可var target = obj[k] * 100;var leader = getStyle(tag, k) * 100 || 0;var step = (target - leader) / 10;// 给step设置取整step = step > 0 ? Math.ceil(step) : Math.floor(step);leader = leader + step;// 透明度的设置需要去掉单位tag.style[k] = leader / 100;} else if (k == "zIndex") {// zIndex不需要渐变,直接设置即可tag.style.zIndex = obj[k];} else {var target = obj[k];var leader = parseInt(getStyle(tag, k)) || 0;var step = (target - leader) / 10;// 给step设置取整step = step > 0 ? Math.ceil(step) : Math.floor(step);leader = leader + step;tag.style[k] = leader + "px";}// 提取出每种条件都需要的代码if (leader != target) {flag = false;}}if (flag) {clearInterval(tag.timer);fn && fn();}}, 20);};function getStyle(tag, attr) {if (tag.currentStyle) {return tag.currentStyle[attr];} else {return getComputedStyle(tag, null)[attr];}}</script>
</body></html>

2021年原生JS实现韩雪冬轮播图相关推荐

  1. 原生JS实现韩雪冬轮播图

    分享一个用原生JS实现的韩雪冬轮播图,效果如下: 实现代码如下: <!DOCTYPE html> <html><head lang="en">& ...

  2. vue如何使用原生js写动画效果_原生js写一个无缝轮播图插件(支持vue)

    轮播图插件(Broadcast.js) 前言:写这个插件的原因 前段时间准备用vue加上网易云的nodejs接口,模拟网易云音乐移动端.因为想自己写一遍所有的代码以及加固自己的flex布局,所以没有使 ...

  3. html怎么引轮播图插件,原生js写一个无缝轮播图插件(支持vue)

    轮播图插件(Broadcast.js) 前言:写这个插件的原因 前段时间准备用vue加上网易云的nodejs接口,模拟网易云音乐移动端.因为想自己写一遍所有的代码以及加固自己的flex布局,所以没有使 ...

  4. 【原生js】详解轮播图之无缝滚动

    前言:轮播图,是网站首页中最常见的一种图片切换特效,作为前端开发者,我相信很多开发者都直接调用了JQuery中的封装好的方法实现图片轮播,省事简单.所以我今天想介绍一下原生js代码实现的图片轮播. 结 ...

  5. 原生js实现触摸滚动轮播图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. html5图片无限循环播放,原生js实现无限循环轮播图效果

    知识要点 1.实现无限循环的原理: 以偏移的距离来判断是否跳回第一张和最后一张 也可以利用循环判断图片的当前索引值 var newLeft=parseInt(list.style.left)+offs ...

  7. 基于原生JS写的异形轮播图--效果如网易云、QQ音乐播放器中轮播图

    css部分 <style>#box{height:500px;width:1000px;position: relative;margin:100px auto;overflow: hid ...

  8. 原生JS制作最简单轮播图(超清晰思路)

    使用html+css将页面制作完毕后,完成页面自动轮播,左右箭头点击图片改变,下方小按钮悬浮更改图片. 制作思路: CSS: 1.鼠标进入banner后左右箭头出现. .banner:hover #l ...

  9. 原生JS制作自动+手动轮播图,附带二级分类菜单

    原生JS制作自动+手动轮播图,附带二级分类菜单 包含以下功能: 1.鼠标移开自动轮播 2.鼠标移入停止自动轮播 3.点击左右按钮可手动切换图片 4.点击索引小圆点可手动切换图片 5.鼠标移入一级菜单展 ...

最新文章

  1. windows linux rac,跨平台表空间传输(windows到linux RAC)
  2. 项目协作和团队管理难的问题,智办事都帮你解决
  3. java opencv bp网_基于Opencv自带BP网络的车标简易识别
  4. 清华校长送给毕业生的五句话,值得一看!
  5. Java通过Executors提供四种线程池
  6. 计算机网络面试知识点
  7. cdr添加节点快捷键_cdr x6快捷键大全 cdr x6(coreldraw x6)快捷键汇总
  8. 回归分析什么时候取对数_线性回归模型,哪些变量取对数形式?
  9. latex参考文献编译不成功
  10. 关于二进制与十进制互转的方法(简单好学!)
  11. 最新SEO寄生虫排名
  12. 蓝牙协议之配对和绑定学习笔记
  13. Qt开源作品16-通用无边框拖动拉伸
  14. 可视化开发平台的内容介绍
  15. Renesas_based_intro
  16. 什么是短链接,免费好用的短链接平台有哪些?
  17. Java数据结构与算法(二)
  18. 怎么在Ubuntu手机上发送短信及拨打电话
  19. 远程桌面看不到任务栏怎么办?
  20. 国产香氛品牌别样的生意经

热门文章

  1. 今天给大家介绍一篇基于javaWeb的汽车订票系统的设计与实现
  2. 畅销图书排行榜TOP10(2009上半年)
  3. 基于人体骨架检测的安全警戒线
  4. 实体知识+字典树辅助jieba的分词(并对三国演义进行简单分析)
  5. Spring(https://www.zhihu.com/question/38597960)
  6. matlab解比例导引法方程,[转载]比例导引法在三维制导中应用的程序详解与过程图解...
  7. (计算机视觉笔记)1、初入计算机视觉
  8. 计算思维导论-为什么要学习计算思维
  9. 前端开发:使用HTML5简单实现嫦娥奔月动画
  10. cesium开发加载shapefile制作的白膜