JS 面向对象封装 无限轮播 插件。
2024-10-09 03:36:47
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<title></title>
<style type="text/css">
html{ background-color: #00b0e4;}
body,ul,li{ margin: 0; padding: 0;}
ul li{ list-style: none;}
.container{ height: 300px; margin: 100px auto; padding: 60px 0; overflow: hidden;}
.container ul{ display: -webkit-flex; display: flex; height: 100%;}
.container ul li{ -webkit-flex-shrink: 0; width: 400px; height: 100%;
padding: 5px; box-sizing: border-box; -webkit-transition: all .6s; transition: all .6s;}
.container ul li:hover{ z-index: 1; -webkit-transform: scale(1.2); transform: scale(1.2); }
.container ul li img{ width: 100%; height: 100%; object-fit: cover; box-sizing: border-box;
border: 10px solid #fff; box-shadow: 0 0 5px #333;} </style>
<script charset="utf-8" src="http://map.qq.com/api/js?v=2.exp&libraries=convertor"></script>
<script>
function FreeSlider(selector,speed) { /* 变量改为属性 */
this.oContainer = document.querySelector(selector);
this.oWrapper = this.oContainer.querySelector('ul');
this.oSlide = this.oWrapper.querySelectorAll('li'); /* 当不传入轮播速度时,速度默认为100 */
this.speed = speed || 100; this.containerW = this.oContainer.offsetWidth;
this.wrapperW = this.oSlide[0].offsetWidth * this.oSlide.length;
this.x = 0;
this.timer = null; this.init(); } /* 构造函数的原型对象 */
FreeSlider.prototype = { constructor: FreeSlider, /* 功能抽离,此处实现初始化 */
init: function(){
// this.oWrapper.style.width = this.wrapperW * 2 + 'px';
this.oWrapper.innerHTML += this.oWrapper.innerHTML; if(this.wrapperW < this.containerW){
this.oContainer.style.width = this.wrapperW + 'px';
} // this.slideMove();
}, /* 图片自动无限轮播 */
slideMove: function(){
/* 此处需要注意this的指向,
在setInterval回调函数中的this指向为window */
var that = this;
this.timer = setInterval(function () {
that.x++;
if(that.x > that.wrapperW){
that.x = 0;
}
that.oWrapper.style.transform = 'translate('+ (-that.x) +'px)';
},this.containerW / this.speed); // 将速度转化成定时器时间
}, /* 图片停止轮播 */
stopSlideMove: function () {
clearInterval(this.timer);
}
}; window.onload = function(){ var oContainer = document.querySelector('.container'); // 新建图片轮播对象
var mySlider = new FreeSlider('.container',300); // 鼠标移入时清除定时器,图片停止轮播
oContainer.addEventListener('mouseover',function () {
mySlider.stopSlideMove();
}); // 鼠标移出时图片继续轮播
oContainer.addEventListener('mouseout',function () {
mySlider.slideMove();
}); } </script> </head>
<body >
<div class="container">
<ul class="wrapper">
<li class="slide"><img src="./1.jpg" alt=""></li>
<li class="slide"><img src="./2.jpg" alt=""></li>
<li class="slide"><img src="./3.jpg" alt=""></li>
</ul>
</div> </body>
</html>
最新文章
- Linux下MySQL的备份与还原
- 如何在ecshop订单中显示客户给商家的留言
- 1701. Ostap and Partners(并查集-关系)
- URI--http://zh.wikipedia.org/wiki/%E7%BB%9F%E4%B8%80%E8%B5%84%E6%BA%90%E6%A0%87%E5%BF%97%E7%AC%A6
- python函数any()与all()
- Problem E: 可变长数组
- poj 1741 树的点分治(入门)
- Laravel 1071 Specified key was too long
- EasyPR源码剖析(2):车牌定位
- curl模拟post json或post xml文件
- jvm.option是什么,它是如何加载的
- spring-session-data-redis解决session共享的问题
- java导出excel时合并同一列中相同内容的行
- .NetCore实践篇:成功解决分布式监控ZipKin聚合依赖问题(三)
- 10.4-uC/OS-III内部任务(空闲任务OS_IdleTask())
- python全栈开发-面向对象-进阶2
- Cocos2d-x3.0 载入Cocostudio的UI后,button无法点击的解决方法
- HTML5拓扑3D机房,电力工控Web SCADA
- Educational Codeforces Round 58 (Rated for Div. 2) 题解
- iOS 数组的去重(普通的无序的去重和排序好的去重)
热门文章
- Codeforces 1340B 	 Nastya and Scoreboard(dp,贪心)
- 还学的动吗? 盘点下Vue.js 3.0.0 那些让人激动的功能
- 设计数据库 ER 图太麻烦?不妨试试这两款工具,自动生成数据库 ER 图!!!
- Net core项目实战篇01---EFCore CodeFirs For Mysql 数据库初始化
- Linux安装jdk(详细教程)
- 【ejabberd】安装XMPP服务器ejabberd(Ubuntu 12.04)
- 自动安装带nginx_upstream_check_module模块的Nginx脚本
- 图论--最短路--dijkstra(含路径输出)模板
- session与cookie的浅谈
- MODIS系列之NDVI(MOD13Q1)七:时间序列S-G滤波之Python