js实现轮播图
2016-08-16 14:54
246 查看
/** * Created by plter on 8/16/16. */ (function () { /** * 容纳轮播图片Div的容器 * @type {Element} */ var carouselContent = document.querySelector("#carousel .carousel-content"); /** * 图片在数组中的位置 * @type {number} */ var imageIndex = 0; /** * 用于切换图片的计时器 * @type {number} */ var switchImageTimerId = -1; /** * 该变量用于指示当前是否正在切换图片 * @type {boolean} */ var switchImageAnimationPlaying = false; /** * 把一个对象从某位置移动到目标位置 * @param target 被移动的对象 * @param fromX 开始left位置 * @param toX 结束点的left位置 * @param fromY 开始点的top位置 * @param toY 结束点的top位置 * @param duration 动画效果共花费的时间,单位是毫秒 * @param completeHandler 动画完成后的回调函数 */ function moveTo(target, fromX, toX, fromY, toY, duration, completeHandler) { var fps = 50;//frames per second var frameDuration = Math.round(1000 / fps); var frames = Math.round(duration / 1000 * fps); var frameIndex = 0; var x = fromX, y = fromY; var speedX = (toX - fromX) / frames; var speedY = (toY - fromY) / frames; var id = setInterval(function () { x += speedX; y += speedY; frameIndex++; if (frameIndex >= frames) { clearInterval(id); x = toX; y = toY; if (completeHandler) { completeHandler(target); } } target.style.left = x + "px"; target.style.top = y + "px"; }, frameDuration); } /** * 根据一个图片的url创建一个包括img的div * @param imgSrc {String} 图片的url * @param linkUrl {String} 轮播图链接地址 * @returns {HTMLDivElement} 被创建的div */ function createImageContainer(imgSrc, linkUrl) { var div = document.createElement("div"); div.className = "image-container"; var a = document.createElement("a"); a.href = linkUrl || "#"; a.target="_blank"; div.appendChild(a); var img = document.createElement("img"); img.src = imgSrc; a.appendChild(img); return div; } /** * 轮播图div数组 * @type {*[]} */ var carouselImagesArray = [ createImageContainer("images/1.jpg", "http://ucai.cn"), createImageContainer("images/2.jpg", "http://baidu.com"), createImageContainer("images/3.jpg") ]; var currentVisibleImage; /** * 呈现下一张图片 */ function showNextCarouselImage() { if (!switchImageAnimationPlaying) { switchImageAnimationPlaying = true; imageIndex++; if (imageIndex >= carouselImagesArray.length) { imageIndex = 0; } if (currentVisibleImage) { moveTo(currentVisibleImage, 0, -800, 0, 0, 500, function (target) { carouselContent.removeChild(target); }); } currentVisibleImage = carouselImagesArray[imageIndex]; carouselContent.appendChild(currentVisibleImage); currentVisibleImage.style.left = "800px"; moveTo(currentVisibleImage, 800, 0, 0, 0, 500, function () { switchImageAnimationPlaying = false; }); } } /** * 呈现上一张图片 */ function showPreCarouselImage() { if (!switchImageAnimationPlaying) { switchImageAnimationPlaying = true; imageIndex--; if (imageIndex < 0) { imageIndex = carouselImagesArray.length - 1; } if (currentVisibleImage) { moveTo(currentVisibleImage, 0, 800, 0, 0, 500, function (target) { carouselContent.removeChild(target); }); } currentVisibleImage = carouselImagesArray[imageIndex]; carouselContent.appendChild(currentVisibleImage); currentVisibleImage.style.left = "-800px"; moveTo(currentVisibleImage, -800, 0, 0, 0, 500, function () { switchImageAnimationPlaying = false; }); } } function addInitCarouselImage() { imageIndex = 0; currentVisibleImage = carouselImagesArray[imageIndex]; carouselContent.appendChild(currentVisibleImage); } /** * 为左右按钮添加事件侦听器 */ function addListeners() { document.querySelector("#carousel .btn-pre").onclick = function () { showPreCarouselImage(); restartSwitchImageTimer(); }; document.querySelector("#carousel .btn-next").onclick = function () { showNextCarouselImage(); restartSwitchImageTimer(); }; } /** * 重新开始用于切换图片的计时器 */ function restartSwitchImageTimer() { if (switchImageTimerId != -1) { clearInterval(switchImageTimerId); } switchImageTimerId = setInterval(function () { showNextCarouselImage(); // showPreCarouselImage(); }, 5000); } function init() { addListeners(); addInitCarouselImage(); restartSwitchImageTimer(); } init(); })();
js
相关文章推荐
- 做一个JS实现带渐变可停顿功能的图片轮播
- js实现图片轮播(根据同事代码整理而得)
- 图片轮播(淡入淡出)--JS原生和jQuery实现
- js实现图片轮播
- JS实现焦点图轮播效果
- js实现图片轮播效果
- js实现相册翻页,滚动,切换,轮播功能
- js实现点击左右按钮轮播图片效果实例
- js实现点击左右按钮轮播图片效果实例
- js实现支持手机滑动切换的轮播图片效果实例
- [精彩视频分享]JS+CSS实现的轮播效果图
- js实现幻灯片轮播原理
- JS轮播图效果实现
- JS实现简易图片轮播效果的方法
- js实现图片轮播
- js实现幻灯片轮播原理
- js实现图片轮播
- 问题:关于坛友的一个js轮播效果的实现
- 原生js和jquery实现图片轮播特效
- js实现相册翻页,滚动,切换,轮播功能