jQuery焦点图插件SaySlide


Posted in Javascript onDecember 21, 2015

先来介绍SaySlide 2.0支持自定义如下功能:

  • 1、上下左右方向播放以及jQuery的fadeOut、slideUp、hide效果;
  • 2、自动播放时间间隔和动画播放的的速度;
  • 3、是否显示标题;
  • 4、是否在新窗口打开链接;
  • 5、是否显示底部半透明背景;
  • 6、按钮在底部显示的位置(左中右);
  • 7、按钮默认背景色;
  • 8、按钮激活状态颜色;
  • 9、设置标题文字的样式;
  • 10、触发按钮的事件;

下面就是重点的代码,分享给大家供大家参考,具体代码如下

(function($){
  $.fn.saySlide=function(options){
    var defaults={
      autoTime:3000,//自动播放时间间隔
      speed:500,//切换速度
      autodir:'RL',//自动播放方向,LR左到右,RL右到左,TB上到下,BT下到上, jQuery自带的动画:jq.fadeOut , jq.slideUp , jq.hide
      isTitle:false,//是否显示标题
      isBlank:true,//是否在新窗口打开链接
      isBottombg:true,//是否显示底部半透明背景,该设置只有在isTitle为false生效
      defaultBg:"#999999",//定义底部按钮默认颜色
      currentBg:"#ffffff",//定义底部按钮激活状态颜色
      btnAlign:"center",//按钮左中右位置,left,center,right
      fontSize:"14px"
    };
    var _this=$(this), len=_this.children().length, _thisChildren;
    options.Width=_this.width() || 0;
    options.Height=_this.height() || 0;
    options.Imgs=options.ImgsO=_this.children();
    options.nowImg=0;
    options.isLink = $(options.Imgs[0]).attr("href") === undefined ? false : true; //根据第一张图片是否有href属性来判断是否给图片加上链接
    var options=$.extend(defaults,options);
    switch(options.autodir){
      case "LR":options.pos="right";break;
      case "RL":options.pos="left";break;
      case "BT":options.pos="top";break;
      case "TB":options.pos="bottom";break;
      default:
        if(/jq\\./.test(options.autodir)){
          options.jq=options.autodir.slice(3);
          options.autodir="jq";
        }else{
          alert("autodir参数不正确");
        }
    }
    var SaySlide=function(opt){
      this.opt=opt;
    }
    SaySlide.prototype={
      _init:function(){
        this.BulkImgs();
        this.AutoPlay();
        this.PausePlay();
        this.BtnClick();
      },
      BoxBtn:function(){
        var me=this.opt, boxHtml='';
        for(var i=0;i<len;i++){
          var bg=i==0?me.currentBg:me.defaultBg;
          boxHtml+='<i style="background-color:'+ bg +'" index="'+ i +'"></i>';
        }
        var textAlign=me.isTitle==true ? "right" : me.btnAlign;
        boxHtml='<div class="saySlide-bottom-btn" style="text-align:'+ textAlign +'"><span>'+ boxHtml +'</span></div>';
        return boxHtml;
      },
      BulkImgs:function(){
        var me=this.opt, ImgsArr=new Array;
        for(var i=0;i<len;i++){
          if(me.isLink===true){
            var link=$(me.Imgs[i]).attr({"width":me.Width,"height":me.Height}).attr("href");
            $(me.Imgs[i]).removeAttr("href");
            ImgsArr[i]="<a href='"+ link +"' index='"+ i +"'>"+me.Imgs[i].outerHTML+'</a>';
          }else{
            $(me.Imgs[i]).attr({"width":me.Width,"height":me.Height});
            ImgsArr[i]="<a index='"+ i +"'>"+me.Imgs[i].outerHTML+'</a>';
          }
        }        
        if(me.autodir=="LR" || me.autodir=="TB" || me.autodir=="jq"){
          var ImgsStr=ImgsArr.reverse().join('');
        }else{
          var ImgsStr=ImgsArr.join('');
        }
        _this.html(ImgsStr);
        me.Imgs=_this.children();
        if(me.autodir!="jq"){
          _this.wrapInner("<div class='saySlide-box' />");
          _thisChildren=_this.children("div.saySlide-box");
          var divWidth=me.autodir=="LR" || me.autodir=="RL" ? me.Width*len :me.Width;
          _thisChildren.width(divWidth).css(me.pos,"0");
        }else{
          _this.addClass("saySlide-fade");
        }
        var opacityBg=me.isBottombg===true || me.isTitle===true ? '<div class="saySlide-opacity-bg"></div>' : '';//如果有标题,则透明背景强制显示
        _this.append(this.BoxBtn() + opacityBg);
        me.BtnArr=_this.find("i");
        if(me.isTitle===true){
          this.BuildTitle();
        }
      },
      /* 构造标题 */
      BuildTitle:function(){
        var _w=14*len, me=this.opt;
        _w=me.Width - _w - 20 - 40;
        _this.append('<div class="saySlide-title" />');
        me.titleBox=_this.children("div.saySlide-title").css({"font-size":me.fontSize,width:_w});
        me.titleBox.text($(me.ImgsO[0]).attr("alt"));
      },
      /* 自动播放 */
      AutoPlay:function(){
        var self=this, me=this.opt;
        self.t=setInterval(function(){
          self.PicPlay();
        },me.autoTime);
      },
      /* 鼠标经过时清除定时 */
      PausePlay:function(){
        var self=this;
        _this.hover(function(){
          clearInterval(self.t);
        },function(){
          self.AutoPlay();
        });
      },
      PicPlay:function(){
        var me=this.opt;
        if(me.autodir=="RL" || me.autodir=="BT"){
          this.MoveV(me.autodir);
        }else if(me.autodir=="LR" || me.autodir=="TB"){
          this.MoveH(me.autodir);
        }else if(me.autodir=="jq"){
          this.MovejQ();
        }
        var current=me.nowImg > len-1 ? 0 : me.nowImg;
        $(me.BtnArr[current]).css("background-color",me.currentBg).siblings().css("background-color",me.defaultBg);
        if(me.isTitle===true){
          me.titleBox.text($(me.ImgsO[current]).attr("alt"));
        }
      },
      /* 点击标签按钮 */
      BtnClick:function(){
        var self=this, me=this.opt;
        _this.delegate("i","click",function(){
          var clicked=parseInt($(this).attr("index"));
          me.nowImg=clicked;
          if(me.autodir=="RL" || me.autodir=="BT"){
            var prevImgs=_thisChildren.find("a[index='"+ clicked +"']").prevAll();
            prevImgs=$.makeArray(prevImgs).reverse();
            _thisChildren.css(me.pos,"0");
            $(prevImgs).appendTo(_thisChildren);
          }else if(me.autodir=="LR" || me.autodir=="TB"){
            var prevImgs=_thisChildren.find("a[index='"+ clicked +"']").nextAll();
            _thisChildren.css(me.pos,"0");
            $(prevImgs).prependTo(_thisChildren);            
          }else if(me.autodir=="jq"){
            var prevImgs=_this.find("a[index='"+ clicked +"']").nextAll("a");
            prevImgs.prependTo(_this);
          }
          $(this).css("background-color",me.currentBg).siblings().css("background-color",me.defaultBg);
        });       
      },
      /* 从右到左播放 、 从下到上播放 */
      MoveV:function(type){
        var me=this.opt, current;
        me.nowImg = me.nowImg+1 > len ? 1 : me.nowImg+1;
        current = me.nowImg - 1;
        if(type=="RL"){
          _thisChildren.animate({"left":"-"+me.Width},me.speed,function(){
            $(me.Imgs[current]).appendTo($(this));
            $(this).css("left","0");
          });
        }else if(type=="BT"){
          _thisChildren.animate({"top":"-"+me.Height},me.speed,function(){
            $(me.Imgs[current]).appendTo($(this));
            $(this).css("top","0");
          });
        }
      },
      /* 淡入淡出 */
      MovejQ:function(){
        var me=this.opt, current;
        me.nowImg = me.nowImg+1 > len-1 ? 0 : me.nowImg+1;
        current = len - me.nowImg == len ? 0 : len-me.nowImg;
        var arg1=me.speed;
        var arg2=function(){$(this).prependTo(_this).show();};
        if(me.jq=="fadeOut"){
          $(me.Imgs[current]).fadeOut(arg1,arg2);
        }else if(me.jq=="hide"){
          $(me.Imgs[current]).hide(arg1,arg2);
        }else if(me.jq=="slideUp"){
          $(me.Imgs[current]).slideUp(arg1,arg2);
        }else{
          return ;
        }

      },
      /* 从左到右播放 、 从上到下播放 */
      MoveH:function(type){
        var me=this.opt, current;
        me.nowImg = me.nowImg+1 > len-1 ? 0 : me.nowImg+1;
        current = len - me.nowImg == len ? 0 : len-me.nowImg;
        if(type=="LR"){
          _thisChildren.animate({"right":"-"+me.Width},me.speed,function(){
            $(me.Imgs[current]).prependTo($(this));
            $(this).css("right","0");
          });
        }else if(type=="TB"){
          _thisChildren.animate({"bottom":"-"+me.Height},me.speed,function(){
            $(me.Imgs[current]).prependTo($(this));
            $(this).css("bottom","0");
          });
        }
      }
    }
    var _SaySlide=new SaySlide(options);
    _SaySlide._init();
  }
})(jQuery);

以上就是焦点图插件SaySlide的代码,对关键代码进行注释,希望对大家的学习有所帮助。

Javascript 相关文章推荐
javascript框架设计读书笔记之种子模块
Dec 02 Javascript
javascript中的遍历for in 以及with的用法
Dec 22 Javascript
PHPExcel中的一些常用方法汇总
Jan 23 Javascript
浅谈JavaScript Math和Number对象
Jan 26 Javascript
详解创建自定义的Angular Schematics
Jun 06 Javascript
JavaScript实现新年倒计时效果
Nov 17 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
Jan 15 Javascript
详解vue路由篇(动态路由、路由嵌套)
Jan 27 Javascript
Vue项目总结之webpack常规打包优化方案
Jun 06 Javascript
Vue是怎么渲染template内的标签内容的
Jun 05 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
Aug 07 Javascript
基于openlayers实现角度测量功能
Sep 28 Javascript
Flow之一个新的Javascript静态类型检查器
Dec 21 #Javascript
jquery实现删除一个元素后面的所有元素功能
Dec 21 #Javascript
浅析JavaScript声明变量
Dec 21 #Javascript
jQuery实现图片文字淡入淡出效果
Dec 21 #Javascript
深入浅析Node.js 事件循环
Dec 20 #Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
Dec 20 #Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
Dec 20 #Javascript
You might like
PHP添加MySQL数据记录代码
2008/06/07 PHP
JpGraph php柱状图使用介绍
2011/08/23 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
PHP简单字符串过滤方法示例
2016/09/04 PHP
PHP程序守护进程化实现方法详解
2020/07/16 PHP
javascript 多级checkbox选择效果
2009/08/20 Javascript
Javascript将string类型转换int类型
2010/12/09 Javascript
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
jquery中插件实现自动添加用户的具体代码
2013/11/15 Javascript
jquery为页面增加快捷键示例
2014/01/31 Javascript
jQuery菜单插件superfish使用指南
2015/04/21 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
2018/09/28 Javascript
vue组件从开发到发布的实现步骤
2018/11/11 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
JQuery事件冒泡和默认行为代码实例
2020/05/13 jQuery
Python中对列表排序实例
2015/01/04 Python
使用Python神器对付12306变态验证码
2016/01/05 Python
Django为窗体加上防机器人的验证码功能过程解析
2019/08/14 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
2020/03/18 Python
零基础小白多久能学会python
2020/06/22 Python
python基于selenium爬取斗鱼弹幕
2021/02/20 Python
日本最大级玩偶手办购物:あみあみ Amiami
2018/04/23 全球购物
Keds加拿大官网:购买帆布运动鞋和皮鞋
2019/09/26 全球购物
一道输出判断型Java面试题
2014/10/01 面试题
医学生求职自荐信
2013/10/25 职场文书
电子商务毕业生求职信
2013/11/10 职场文书
生物技术研究生自荐信
2013/11/12 职场文书
生日派对邀请函
2014/01/13 职场文书
渔夫的故事教学反思
2014/02/14 职场文书
交通志愿者活动总结
2014/06/27 职场文书
学生党员一帮一活动总结
2014/07/08 职场文书
2014年班级工作总结
2014/11/14 职场文书
python3 删除所有自定义变量的操作
2021/04/08 Python
深入理解go slice结构
2021/09/15 Golang