Skip to content

marquee幻灯片播放插件--余玉玲 #42

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions css/index.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#marquee {
position: relative;
height: 100%;
overflow: hidden;
}

.marquee-container {
position: absolute;
top: 0;
height: 100%;
font-size: 0;
}

.marquee-container img {
display: inline-block;
}

.nav>.next-nav, .nav>.prev-nav {
position: absolute;
width: 24px;
height: 36px;
color: #ccc;
font-size: 36px;
transform: translateY(-18px);
}

.nav>.prev-nav {
left: 12px;
top: 50%;
}

.nav>.next-nav {
right: 12px;
top: 50%;
}

32 changes: 26 additions & 6 deletions index.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,26 @@
<div id="marquee">
<img>
<img>
<img>
</div>
<script src="./libs/jquery.js"></script>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>轮播图</title>
<link rel="stylesheet" href="./css/index.css">
<link rel="stylesheet" href="https://cdn.staticfile.org/fancybox/3.5.7/jquery.fancybox.min.css" />
</head>
<body>
<div id="marquee">
<div class="marquee-container">
<img src="https://farm8.staticflickr.com/7496/15959236842_6dbcb5b4c8_b.jpg">
<img src="https://farm8.staticflickr.com/7489/15241066224_8864806ffd_b.jpg">
<img src="https://farm4.staticflickr.com/3864/14420515212_9999c800b4_b.jpg">
</div>
<div class="nav">
<div class="prev-nav">&lt;</div>
<div class="next-nav">&gt;</div>
</div>
</div>
<script src="./libs/jquery.js"></script>
<script src="https://cdn.staticfile.org/fancybox/3.5.7/jquery.fancybox.min.js"></script>
<script src="./libs/marquee.js"></script>
<script src="./js/main.js"></script>
</body>
</html>
7 changes: 6 additions & 1 deletion js/main.js
Original file line number Diff line number Diff line change
@@ -1 +1,6 @@
$('#marquee').marquee()
$('#marquee').marquee({
width: 800,
height: 512,
duration: 500,
interval: 2000,
})
117 changes: 116 additions & 1 deletion libs/marquee.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,120 @@
$.fn.marquee = function() {
$.fn.marquee = function(setting) {
// 可翻页
// popup when click
// 可以用 fancybox
let marquee = $(this);
let container = marquee.find('.marquee-container');
let imgList = marquee.find('img');
let len = imgList.length;
let curIndex = 0;
let width = setting && setting.width ? setting.width : 400;
let height = setting && setting.height ? setting.height : 256;
let duration = setting && setting.duration ? setting.duration : 500;
let interval = setting && setting.interval ? setting.interval : 2000;
const CONTAINER_WIDTH = width * len;
let stopped = false;
let timer = null;
let transitionEnd = true;

init();
startPlay();

// 初始化
function init() {
let containerHtml = container.html();
// 在container前后各复制一份以实现平滑过渡
container.append(containerHtml);
container.prepend(containerHtml) ;
// 初始化container宽度
$('img').css({'width': `${width}px`});
marquee.css({'width': `${width}px`});
marquee.css({'height': `${height}px`});
container.css({'width': `${CONTAINER_WIDTH*3}px`});
container.css({'left': `${-CONTAINER_WIDTH}px`});
// hover时停止自动播放
$('img').hover(function() {
stopPlay();
}, function() {
startPlay();
});

$('.prev-nav').click(function() {
stopPlay();
throttle(onPrev, 300);
});

$('.next-nav').click(function() {
stopPlay();
throttle(onNext, 300);
});

$('img').fancybox({
showCloseButton: true,
openEffect: 'none',
closeEffect: 'none',
});
}

function onPrev() {
if (transitionEnd) showImg('prev');
}

function onNext() {
if (transitionEnd) showImg('next');
}

function showImg(flag) {
switch (flag) {
case 'prev':
curIndex--;
break;
case 'next':
curIndex++;
break;
case 'auto':
curIndex++;
break;
default:
break;
}
transitionEnd = false;
container.animate({left: `${-CONTAINER_WIDTH-width*curIndex}px`}, duration, function() {
transitionEnd = true;
if (curIndex === len) {
curIndex = 0;
container.css({'left': `${-CONTAINER_WIDTH}px`});
} else if (curIndex === -1) {
curIndex = len - 1;
container.css({'left': `${-CONTAINER_WIDTH-width*(len-1)}px`});
}
});
}

function autoPlay() {
if (stopped) {
clearInterval(timer);
return;
}
timer = setInterval(function() {
showImg('auto');
}, interval);
}

function startPlay() {
stopped = false;
autoPlay();
}

function stopPlay() {
stopped = true;
clearInterval(timer);
}

// 节流
function throttle(fn, t) {
clearTimeout(fn.tId);
fn.tId = setTimeout(function() {
fn();
}, t);
}
}