完美兼容各大浏览器的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 相关文章推荐
用tip解决Ext列宽度不够的问题
Dec 13 Javascript
Javascript 日期对象Date扩展方法
May 30 Javascript
Extjs中常用表单介绍与应用
Jun 07 Javascript
JavaScript的类型转换(字符转数字 数字转字符)
Aug 30 Javascript
JS小功能(列表页面隔行变色)简单实现
Nov 28 Javascript
使用js Math.random()函数生成n到m间的随机数字
Oct 09 Javascript
前端学习笔记style,currentStyle,getComputedStyle的用法与区别
May 28 Javascript
jQuery向父辈遍历的简单方法
Sep 18 Javascript
浅谈在fetch方法中添加header后遇到的预检请求问题
Aug 31 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
Jul 13 jQuery
React中阻止事件冒泡的问题详析
Apr 12 Javascript
使用webpack搭建pixi.js开发环境
Feb 12 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实现读取和编写XML DOM代码
2010/04/07 PHP
PHP学习之数组值的操作
2011/04/17 PHP
PHP三元运算符的结合性介绍
2012/01/10 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
php如何解决无法上传大于8M的文件问题
2014/03/10 PHP
PHP字符串word末字符实现大小写互换的方法
2014/11/10 PHP
php短址转换实现方法
2015/02/25 PHP
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
2007/02/05 Javascript
JavaScript表单常用验证集合
2008/01/16 Javascript
与jquery serializeArray()一起使用的函数,主要来方便提交表单
2011/01/31 Javascript
jQuery遍历Form示例代码
2013/09/03 Javascript
jQuery中bind与live的用法及区别小结
2014/01/27 Javascript
js简单的点击返回顶部效果实现方法
2015/04/10 Javascript
JS实现的倒计时效果实例(2则实例)
2015/12/23 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
2016/06/17 Javascript
jQuery Layer弹出层传值到父页面的实现代码
2017/08/17 jQuery
Vue组件为什么data必须是一个函数
2020/06/11 Javascript
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
Python新手在作用域方面经常容易碰到的问题
2015/04/03 Python
Python中的XML库4Suite Server的介绍
2015/04/14 Python
在Python中使用zlib模块进行数据压缩的教程
2015/06/26 Python
Python微信库:itchat的用法详解
2017/08/14 Python
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
django和vue实现数据交互的方法
2019/08/21 Python
Python 实现训练集、测试集随机划分
2020/01/08 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
2020/10/16 Python
视图的作用
2014/12/19 面试题
公司市场部岗位职责
2013/12/02 职场文书
生物技术专业毕业生求职信范文
2013/12/14 职场文书
学雷锋志愿服务月活动总结
2014/03/09 职场文书
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
领导班子民主生活会整改措施(工商局)
2014/09/21 职场文书
三严三实民主生活会发言稿
2014/10/13 职场文书
体育教师教学随笔
2015/08/15 职场文书
创业计划书之酒吧
2019/12/02 职场文书
python manim实现排序算法动画示例
2022/08/14 Python