博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jQuery_渐隐式轮播效果插件封装
阅读量:7019 次
发布时间:2019-06-28

本文共 6661 字,大约阅读时间需要 22 分钟。

使用 jQuery 封装一个渐隐式轮播效果插件。

效果图:

在线预览:

兼容性:

插件参数说明:

  • autoPlay:自动切换的时间间隔(单位ms),不设定该参数slide不会自动切换。
  • speed:切换速度(单位ms)。
  • initialItem:初始化轮播元素索引,类型:number。
  • pagination:分页位置,类型:HTML 标签。
  • paginationNum:是否显示数字分页,类型:boolean,true 显示数字分页。
  • paginationClickable:点击分页是否切换,类型:boolean,true 可以切换。
  • arrow_left:切换到上一个轮播元素,类型:HTML 标签。
  • arrow_right:切换到下一个轮播元素,类型:HTML 标签。

HTML

item1
item2
item3
left
right
复制代码

CSS

.slide_container { position: relative; width: 600px; margin: 20px auto; }.slide_item { font-size: 24px; line-height: 250px; position: absolute; top: 0; left: 0; overflow: hidden; width: 100%; text-align: center; }.pagination { position: absolute; z-index: 1; bottom: 20px; width: 100%; text-align: center; }.pagination span { display: inline-block; width: 20px; height: 20px; margin: 0 10px; cursor: pointer; border-radius: 50%; background-color: #fff; }.pagination .active { background-color: #adadad; }.arrow i { position: absolute; z-index: 1; top: 50%; display: inline-block; cursor: pointer; }.arrow .arrow_left { left: 20px; }.arrow .arrow_right { right: 20px; }复制代码

JS调用

复制代码

JS封装插件

LKFadeSlideshow.js

/** * Title: LKFadeSlideshow * Version: 1.1.1 * Description: plugin * Author: LiuZhenghe * Date: 2019-01-03 */(function($) {    // What does the LKSlideshow plugin do?    $.fn.LKSlideshow = function(options) {        if (!this.length) {            return this;        };        var opts = $.extend(true, {}, $.fn.LKSlideshow.defaults, options);        this.each(function() {            var $this = $(this);            var slide_container = $(this).find('.slide_container');            var slide_wrapper = $(this).find('.slide_wrapper');            var slide_item = $(this).find('.slide_item');            var pagination = $(opts.pagination);            var paginationNum = opts.paginationNum;            var paginationClickable = opts.paginationClickable;            var page_text = "";            var item_length = slide_item.length;            var arrow_left = $(opts.arrow_left);            var arrow_right = $(opts.arrow_right);            var autoPlay;            var speed = opts.speed; // 切换速度            var initialItem = opts.initialItem; // 初始化索引            // 不设置初始化索引值,或设置的值超过轮播元素的个数,默认为0。            if (initialItem == null || initialItem > item_length - 1) {                initialItem = 0;            };            // 设置初始化显示与隐藏的元素。            slide_item.eq(initialItem).animate({                opacity: "1"            }, 0);            slide_item.eq(initialItem).siblings().animate({                opacity: "0"            }, 0);            // 动态设置轮播区域高度            var slide_height = slide_item[0].clientHeight;            slide_wrapper.css('height', slide_height);            // 分页相关设置            // 当不设置 paginationNum 的值或设置为 true 时,分页中添加数字。            if (paginationNum != true) {                for (var i = 1; i <= item_length; i++) {                    page_text += "";                };            } else {                for (var i = 1; i <= item_length; i++) {                    page_text += "" + i + "";                };            };            // 动态添加分页            pagination.html(page_text);            // 给分页加当前样式            var pagination_list = pagination.children('span');            for (var i = 0; i < pagination_list.length; i++) {};            $(pagination_list[initialItem]).addClass('active');            // 切换主方法:            // 传入两个参数:tag,page_index。            // tag:"0"表示点击左箭头,"1"表示点击右箭头,"2"表示点击分页。            // page_index:在主方法中无法获取被点击元素的索引值,永远是-1,所以需要传入一个参数来获得。            function slideMove(tag, page_index) {                // 清除定时器                // 不清除定时器,就会创建出多个定时器,切换速度会越来越快。                clearInterval(autoPlay);                slide_item.stop(true, true); // 清除多次点击事件                // 点击左箭头执行事件                if (tag == 0) {                    initialItem--;                    if (initialItem < 0) {                        initialItem = item_length - 1;                    };                };                // 点击右箭头执行事件                if (tag == 1) {                    initialItem++;                    if (initialItem > item_length - 1) {                        initialItem = 0;                    };                };                // 点击分页执行事件                if (tag == 2) {                    initialItem = page_index;                };                // 切换效果                slide_item.eq(initialItem).animate({                    opacity: "1"                }, speed);                slide_item.eq(initialItem).siblings().animate({                    opacity: "0"                }, speed);                pagination_list.eq(initialItem).siblings().removeClass('active');                pagination_list.eq(initialItem).addClass('active');                // 自动轮播2                // 当前位置改变后再次触发右箭头点击事件,此时就可以一直循环点击事件。                if (typeof(opts.autoPlay) != "number") {                    clearInterval(autoPlay);                } else {                    autoPlay = setTimeout(function() {                        slideMove(1);                    }, opts.autoPlay);                };            };            // 自动轮播1            // 触发第一次右箭头点击事件。            // 此处做了一个判断,当调用该插件时,如果不设置 autoPlay 的值或设置为 fales 等其他值时,不执行自动轮播事件。            if (typeof(opts.autoPlay) != "number") {                clearInterval(autoPlay);            } else {                autoPlay = setTimeout(function() {                    slideMove(1);                }, opts.autoPlay);            };            // 点击左箭头            arrow_left.click(function(event) {                event.preventDefault();                slideMove(0);                return false;            });            // 点击右箭头            arrow_right.click(function(event) {                event.preventDefault();                slideMove(1);                return false;            });            // 点击分页            // 加一个判断条件:当 paginationClickable 为 true 是,触发分页点击事件,默认无点击事件。            if (paginationClickable == true) {                pagination.on('click', 'span', function(event) {                    event.preventDefault();                    slideMove(2, $(this).index());                });            };        });        return this;    };    // default options    $.fn.LKSlideshow.defaults = {        autoPlay: null, // 自动轮播        speed: null, // 速度        initialItem: null, // 初始化索引        pagination: null, //  分页        paginationNum: null, // 数字分页        paginationClickable: null, // 点击分页切换        arrow_left: null, // 点击左箭头        arrow_right: null // 点击右箭头    };})(jQuery);复制代码

期待您的关注!

转载地址:http://axzxl.baihongyu.com/

你可能感兴趣的文章
青云QingCloud推出HBase集群服务 支持SQL等高级功能
查看>>
Windows远程桌面漏洞Esteemaudit(CVE-2017-9073)补丁简要分析
查看>>
Arbor Networks凭借业界全面的 DDoS 防御组合为各类客户提供可用性保护
查看>>
达沃时代帮助VSAN提供NAS方案
查看>>
买服务器网络设备时该考虑哪些因素?
查看>>
悲催的CISO:数据泄露事故的替罪羊
查看>>
2015年十大安全故事回顾
查看>>
数据挖掘与预测分析术语总结
查看>>
寻找“高级威胁”防御的答案
查看>>
“有本事就来抓我呀!”企业发现APT攻击平均需要205天
查看>>
女兒,今天是你的生日
查看>>
机器学习零基础?手把手教你用TensorFlow搭建图像识别系统(二)
查看>>
韩国美女黑客是怎样的一种存在?
查看>>
利用无人机或吸尘器黑掉企业无线打印机
查看>>
Linux基础命令介绍九:进程与内存
查看>>
实现翻转卡片的动画效果
查看>>
即时通信增长持续放缓,差异化与多元化成为趋势
查看>>
《Linux内核精髓:精通Linux内核必会的75个绝技》一第2章 资源管理
查看>>
《认知设计:提升学习体验的艺术》——与学习者进行交流
查看>>
Facebook、亚马逊等巨头是如何建造自己的数据库的?| 全球聚焦
查看>>