完美兼容各大浏览器的jQuery插件实现图片切换特效


Posted in Javascript onDecember 12, 2014

文件里面的功能注释也写得非常详细(详见zoeDylan.ImgChange-1.0.1.js文件),对网友们的学习是很有帮助的,虽然样式不太好看,大家可以自己写,好好利用哦。。。

JS代码部分:

(function ($) {

    var//申明全局变量

        _eleTemp,//缓存变量

        _eleThis = $(this),//当前元素

        _eleImg = $('.zd-imgChange-img'),//图片组元素

        _eleControll = $('.zd-imgChange-controll'),//控制器组元素

        _eleChange = $('.zd-imgChange-change'),//切换元素

            _icon = '●○',//动态图标

            _imgTemplate = $(document.createElement('img')),//图片模版'

            _setting = {

                height: 100,//高

                width: 200,//宽

                imgs: new Array(),//图片地址

                links: null,//点击地址

                tips: null,//图片说明

                timers: 3000//自动切换时间

            },//配置

            _timers = null//自动切换保存变量

    $.fn.zoeDylan_ImageChange = function (op) {

        _eleThis = $(this);

        _setting = $.extend(_setting, op);//设置属性

        //处理数据(查看是否为合法范围)

        _setting.timers = _setting.timers != null && _setting.timers != undefined && _setting.timers > 1000 ? _setting.timers : 1000;

        _setting.height = parseFloat(_setting.height) < 100 ? 100 : parseFloat(_setting.height);

        _setting.width = parseFloat(_setting.width) < 200 ? 200 : parseFloat(_setting.width);

        return this.each(function () {//初始化

            AddTemplate();

            AddImg();

            DisSize();

            DisControll();

        })

    }

    //添加模版

    function AddTemplate() {

        _eleThis.removeClass();

        _eleThis.addClass('zd-imgChange');

        _eleTemp = '<button class="zd-imgChange-change zd-imgChange-change-left"><</button>';

        _eleThis.append(_eleTemp);

        _eleTemp = '     <div class="zd-imgChange-img">   </div>';

        _eleThis.append(_eleTemp);

        _eleTemp = '       <div class="zd-imgChange-controll"></div>';

        _eleThis.append(_eleTemp);

        _eleTemp = ' <button class="zd-imgChange-change zd-imgChange-change-right">></button>';

        _eleThis.append(_eleTemp);

        //给全局变量赋值

        _eleImg = $('.zd-imgChange-img');

        _eleControll = $('.zd-imgChange-controll');

        _eleChange = $('.zd-imgChange-change');

    }

    //添加图片

    function AddImg() {

        for (var i = 0; i < _setting.imgs.length; i++) {

            //图片

            _eleTemp = $(document.createElement('img'));

            _eleTemp.addClass('zd-imgChange-img-item');

            _eleTemp.attr('src', _setting.imgs[i]);

            _eleImg.append(_eleTemp);

            //图标

            _eleControll.append('<span>' + _icon[1] + '</span>');

            //提示

            $(_eleImg.children('img')[i]).attr({ 'title': _setting.tips[i] + '|' + _setting.links[i] });

            $(_eleControll.children('span')[i]).attr('title', _setting.tips[i]);

        }

        Dispose(0, 'TtoB');

    }

    //处理尺寸

    function DisSize() {

        _eleThis.css({ 'height': _setting.height, 'width': _setting.width, 'font-size': _setting.height * 0.2 - 2 });

        _eleThis.children('button').css('font-size', _setting.height * 0.2 - 2);

        _eleChange.css({ 'line-height': _setting.height + 'px' });

    }

    //处理操作事件

    function DisControll() {

        _eleImg.children('img').bind('click', function () {//点击图片跳转

            document.location = 'http://' + $(this).attr('title').split('|')[$(this).attr('title').split('|').length - 1];

        });

        _eleChange.bind('click', function () {//顺序切换图片

            var nowImg = $('.zd-imgChange-img-item-sel');

            _eleTemp = _eleImg.children('img');

            if ($(this).hasClass('zd-imgChange-change-left')) {//向左切换

                for (var i = 0; i < _eleTemp.length; i++) {

                    if (nowImg.attr('title') == $(_eleTemp[i]).attr('title')) {

                        if ((i - 1) < 0) {

                            Dispose(_eleTemp.length - 1, 'RtoL');

                        } else {

                            Dispose(i - 1, 'RtoL');

                        }

                        break;

                    }

                }

            } else if ($(this).hasClass('zd-imgChange-change-right')) {//向右切换

                for (var i = 0; i < _eleTemp.length; i++) {

                    if (nowImg.attr('title') == $(_eleTemp[i]).attr('title')) {

                        if ((i + 1) > _eleTemp.length - 1) {

                            Dispose(0, 'LtoR');

                        } else {

                            Dispose(i + 1, 'LtoR');

                        }

                        break;

                    }

                }

            } else {

                return false;

            }

        });

        _eleControll.children('span').bind('click', function () {

            for (var i = 0; i < _eleControll.children('span').length; i++) {

                if ($(_eleControll.children('span')[i]).attr('title') == $(this).attr('title')) {

                    if ($(_eleImg.children('img')[i]).attr('src') != $('.zd-imgChange-img-item-sel').attr('src')) {//判断是否点击的同一个标签

                        Dispose(i, 'TtoB');

                    }

                    break;

                }

            }

        });

    }

    //切换器

    function Dispose(eNum, dir) {//切换图片  

        clearTimeout(_timers);

        DisposeAnm();

        $(_eleControll.children('span')).html(_icon[1]);

        $(_eleControll.children('span')[eNum]).html(_icon[0]);

        $('.zd-imgChange-change-left').attr('title', eNum - 1 >= 0 ? $(_eleControll.children('span')[eNum - 1]).attr('title') : $(_eleControll.children('span')[_eleControll.children('span').length - 1]).attr('title'));

        $('.zd-imgChange-change-right').attr('title', eNum + 1 <= _eleControll.children('span').length - 1 ? $(_eleControll.children('span')[eNum + 1]).attr('title') : $(_eleControll.children('span')[0]).attr('title'));

        _timers = setTimeout(Timers, _setting.timers);

        //切换动画--根据z-index实现视觉效果

        function DisposeAnm() {

            $('.zd-imgChange-img-item').removeClass('zd-imgChange-img-item-temp');

            $('.zd-imgChange-img-item-sel').removeClass('zd-imgChange-img-item-sel').addClass('zd-imgChange-img-item-temp');

            _eleTemp = $(_eleImg.children('img')[eNum]).addClass('zd-imgChange-img-item-sel');

            if (dir == 'TtoB') {

                _eleTemp.css('top', -_setting.height);

                _eleTemp.animate({ top: 0 }, 300);

            } else if (dir == 'RtoL') {

                _eleTemp.css('left', _setting.width);

                _eleTemp.animate({ left: 0 }, 300);

            } else if (dir == 'LtoR') {

                _eleTemp.css('left', -_setting.width);

                _eleTemp.animate({ left: 0 }, 300);

            }

        }

    }

    //自动切换时钟

    function Timers() {

        _timers = setTimeout(Timers, _setting.timers);

        var nowImg = $('.zd-imgChange-img-item-sel');

        _eleTemp = _eleImg.children('img');

        for (var i = 0; i < _eleTemp.length; i++) {

            if (nowImg.attr('title') == $(_eleTemp[i]).attr('title')) {

                if ((i - 1) < 0) {

                    Dispose(_eleTemp.length - 1, 'TtoB');

                } else {

                    Dispose(i - 1, 'TtoB');

                }

                break;

            }

        }

    }

})($)

CSS代码部分:

.zd-imgChange {

    position: relative;

    margin: auto;

    padding: 0px;

    min-width: 200px;

    min-height: 100px;

    background: rgba(0,0,0,0.5);

    color: #fff;

    cursor: pointer;

    overflow: hidden;

}

.zd-imgChange-change {

    cursor:pointer;

    color:#fff;

    margin: 0px;

    padding: 0px;

    position: relative;

    background: rgba(0,0,0,0.5);

    width: 10%;

    height: 100%;

    text-align: center;

    opacity: 0.1;

    z-index: 1;

    -moz-transition: opacity 0.4s;

    -o-transition: opacity 0.4s;

    -webkit-transition: opacity 0.4s;

    transition: opacity 0.4s;

    border:none;

}

    .zd-imgChange-change:hover {

        opacity: 1;

    }

.zd-imgChange-change-left {

    float: left;

}

.zd-imgChange-change-right {

    float: right;

}

.zd-imgChange-img {

    z-index: 0;

    padding: 0px;

    position: absolute;

    top: 0px;

    left: 0px;

    background: rgba(100,0,0,0.1);

    width: 100%;

    height: 100%;

}

.zd-imgChange-img-item {

    position: absolute;

    top: 0px;

    left: 0px;

    width: 100%;

    height: 100%;

    border: none;

    -moz-background-size: cover;

    -o-background-size: cover;

    background-size: cover;

    -moz-transition: opacity 0.5s;

    -o-transition: opacity 0.5s;

    -webkit-transition: opacity 0.5s;

    transition: opacity 0.5s;

    opacity: 1;

    z-index: -1;

}

.zd-imgChange-img-item-temp{

    z-index:0;

}

.zd-imgChange-img-item-sel {

    z-index: 1;

}

.zd-imgChange-controll {

    z-index: 2;

    padding: 0px;

    position: absolute;

    bottom: 0px;

    width: 100%;

    height: 20%;

    background: rgba(0,0,0,0);

    text-align: center;

    -moz-transition: background 0.4s;

    -o-transition: background 0.4s;

    -webkit-transition: background 0.4s;

    transition: background 0.4s;

    text-shadow: 0px 0px 5px #000;

    opacity: 0.7;

}

    .zd-imgChange-controll:hover {

        background: rgba(0,0,0,0.5);

        opacity: 1;

    }

    .zd-imgChange-controll span {

        -moz-transition: color 0.4s;

        -o-transition: color 0.4s;

        -webkit-transition: color 0.4s;

        transition: color 0.4s;

    }

        .zd-imgChange-controll span:hover {

            color: rgba(0,0,0,0.6);

        }

HTML代码部分:

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

    <meta name="viewport" content="width=device-width">

    <title>图片切换</title>

    <script src="jquery-1.10.2.min.js"></script>

    <link href="zoeDylan.ImgChange.css" rel="stylesheet" />

    <script src="zoeDylan.ImgChange.js"></script>

    <script>

            var a_imgs = new Array(//插入图片地址

                './1 (1).jpg',

                './1 (2).jpg',

                './1 (3).jpg',

                './1 (4).jpg'

                ),

                a_links = new Array(//点击图片跳转的网址

                'www.baidu.com',

                'www.qq.com',

                'www.google.com',

                'www.zol.com'

                ),

                a_tips = new Array(//鼠标停靠的提示

                '百度',

                '腾讯',

                '谷歌',

                '中关村'

                );

            $(function () {

            $('#imgc').zoeDylan_ImageChange({//设置

                width: 500,

                height: 300,

                imgs: a_imgs,

                links: a_links,

                tips: a_tips,

                timers:2000

            });

            }); 

    </script>

</head>

<body>

    <div id="imgc">

<!--        <span class="zd-imgChange-change zd-imgChange-change-left"><</span>

        <div class="zd-imgChange-img">

            <img class="zd-imgChange-img-item" src="http://subject.9ria.com/html5game/images/t1f.jpg" alt="图片加载错误!" title="提示" />

        </div>

        <div class="zd-imgChange-controll"><span>d</></div>

        <span class="zd-imgChange-change zd-imgChange-change-right">></span>-->

    </div>

</body>

</html>

ps:尽量使用高版本浏览器,目测测试浏览器:IE11 IE10 IE6 google 猎豹 欧鹏 可以完美运行,IE6透明效果有损失

代码下载:http://xiazai.3water.com/201412/yuanma/zeodylanimgchange(3water.com).rar

Javascript 相关文章推荐
Javascript 调试利器 Firebug使用详解六
Jul 05 Javascript
判断js对象是否拥有某一个属性的js代码
Aug 16 Javascript
js实现同一页面多个不同运动效果的方法
Apr 10 Javascript
基于JavaScript实现仿京东图片轮播效果
Nov 06 Javascript
JS实现的仿QQ空间图片弹出效果代码
Feb 23 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
Nov 25 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
Dec 20 jQuery
JS实现读取xml内容并输出到div中的方法示例
Apr 19 Javascript
Vue.js数字输入框组件使用方法详解
Oct 19 Javascript
Vue 解决多级动态面包屑导航的问题
Nov 04 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
Jan 06 Javascript
js实现QQ邮箱邮件拖拽删除功能
Aug 27 Javascript
windows8.1+iis8.5下安装node.js开发环境
Dec 12 #Javascript
jQuery 和 CSS 的文本特效插件集锦
Dec 12 #Javascript
js使用递归解析xml
Dec 12 #Javascript
做web开发 先学JavaScript
Dec 12 #Javascript
兼容主流浏览器的JS复制内容到剪贴板
Dec 12 #Javascript
Javascript模拟加速运动与减速运动代码分享
Dec 11 #Javascript
javascript中HTMLDOM操作详解
Dec 11 #Javascript
You might like
PHP中空字符串介绍0、null、empty和false之间的关系
2012/09/25 PHP
非常精妙的PHP递归调用与静态变量使用
2012/12/16 PHP
wordpress安装过程中遇到中文乱码的处理方法
2015/04/21 PHP
PHP CURL 多线程操作代码实例
2015/05/13 PHP
PHP实现简易blog的制作
2016/10/24 PHP
PHP中的Iterator迭代对象属性详解
2019/04/12 PHP
php模拟post提交请求调用接口示例解析
2020/08/07 PHP
Yii实现微信公众号场景二维码的方法实例
2020/08/30 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
Jquery validation remote 验证的缓存问题解决方法
2014/03/25 Javascript
jQuery实现的Div窗口震动特效
2014/06/09 Javascript
原生js仿jq判断当前浏览器是否为ie,精确到ie6~8
2014/08/30 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
2015/11/29 Javascript
jquery 获取select数组与name数组长度的实现代码
2016/06/20 Javascript
JavaScript严格模式详解
2017/01/16 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
2017/02/26 Javascript
使用命令行工具npm新创建一个vue项目的方法
2017/12/27 Javascript
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
NestJs 静态目录配置详解
2019/03/12 Javascript
JavaScript中跨域问题的深入理解
2021/03/04 Javascript
使用Python的Twisted框架编写简单的网络客户端
2015/04/16 Python
python 多线程实现检测服务器在线情况
2015/11/25 Python
Python编程实现及时获取新邮件的方法示例
2017/08/10 Python
利用python将json数据转换为csv格式的方法
2018/03/22 Python
Python创建一个空的dataframe,并循环赋值的方法
2018/11/08 Python
django一对多模型以及如何在前端实现详解
2019/07/24 Python
Python内置数据类型list各方法的性能测试过程解析
2020/01/07 Python
python用tkinter实现一个简易能进行随机点名的界面
2020/09/27 Python
澳洲国民品牌乡村路折扣店:Country Road & Trenery Outlet
2018/04/19 全球购物
美国二手复古奢侈品包包购物网站:LXRandCo
2019/06/18 全球购物
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
JNI的定义
2012/11/25 面试题
新闻专业个人求职信
2013/12/19 职场文书
经典演讲稿开场白
2014/08/25 职场文书
罗马假日观后感
2015/06/08 职场文书
彻底理解golang中什么是nil
2021/04/29 Golang