首页  >  文章  >  web前端  >  Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效_jquery

Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效_jquery

WBOY
WBOY原创
2016-05-16 16:10:501237浏览

一个仿腾讯娱乐频道焦点图轮播的插件

ui3g.js

复制代码 代码如下:

/*
顶部大图滚动
*/
var Slide = (function() {
    varquadEaseOut;
    var doc = 文档;
    var $ = 函数{
        return document.getElementById(s);
    }
    /**
     获取索引值,工具类
     @param {Element} current 当前元素
     @param {Object} obj 元素集合
    **/
    var getIndex = function(current, obj) {
        for (var i=0; i             if (obj[i] == 当前) {
                返回我;
            }
        }
    };
    /**
     @param {Element} el 目标元素
    **/
    var 兄弟姐妹 = function(el) {
        var r = [],
            n = el.parentNode.firstChild;
        for ( ; n; n = n.nextSibling ) {
            if ( n.nodeType === 1 && n !== el ) {
                r.push( n );
            }
        }
        返回 r;
    };
    /**
     设置 Slide 宽高
     @param {Element} el Slide 元素
     @param {Number} width Slide 宽度
     @param {Number} height Slide 高度
    **/
    var setSlideWH = 函数(el, 宽度, 高度) {
        var styleW,
            风格H;
        if (width == '100%') {      // 自适应宽度
            styleW = '100%';
        } else {                    // 定宽
            styleW = 宽度 'px';
        }
        if (height == '100%') {     // 自适应高度
            styleH = '100%';
        } else {                    // 定高
            styleH = 高度 'px';
        }
        el.style.width = styleW;
        el.style.height = styleH;
    };
    var readStyle = function(obj, name){
        if(obj.style[名称]){
            return obj.style[名称];
        }else if(obj.currentStyle){
            返回 obj.currentStyle[名称]
        }else if(document.defaultView && document.defaultView.getCompulatedStyle){
            var d=document.defaultView.getComputedStyle(obj,null);
            return d.getPropertyValue(name)
        }其他{
            返回 null
        }
    };
    var 样式 = {
        setOpacity : 函数(obj,不透明度){
            if(typeof(obj.style.opacity) != '未定义'){
                obj.style.opacity = 不透明度;
            }其他{
                obj.style.filter = 'Alpha(Opacity=' (opacity*100) ')';
            };
        }
    };
    /* 动画 */
    var 扩展 = {
        /**
         渐显元素
         @param {Element} target 目标元素
        **/
        fadeIn : 函数(obj,时间){
            if(readStyle(obj, 'display') == 'none'){
                obj.style.display = '块';
            };
            style.setOpacity(obj,0);
            时间=时间|| 200;
            var 不透明度 = 0,步长 = 时间 / 20;
            clearTimeout(obj.showT);
            obj.showT = setTimeout(function(){
                if(不透明度 >= 1) { style.setOpacity(obj,1);返回; }
                不透明度=1/步;
                style.setOpacity(obj,不透明度);
                obj.showT = setTimeout(arguments.callee,20);
            },20);
        },
        /**
         渐隐元素
         @param {Element} target 目标元素
        **/
        fadeOut : 函数(obj,时间){
            时间=时间|| 200;
            style.setOpacity(obj,1);
            var 不透明度 = 1,步长 = 时间 / 20;
            clearTimeout(obj.showT);
            obj.showT = setTimeout(function(){
                if(不透明度                     obj.style.display = '无';
                    style.setOpacity(obj,0);
                    返回;
                };
                不透明度 -= 1/步;
                obj.showT = setTimeout(arguments.callee,20);
            },20);
        },
        /**
         动画元素
         @param {Element} target 目标元素
         @param {String} 关键目标样式
         @param {Number} start key初始值
         @param {Number} end key结束值
         @param {Number} 速度
         @param {Function} endFn 结束时的回调
         @param {String} u 样式单位
        **/
        actPX : 函数(obj,key,开始,结束,速度,endFn,u){
          if(typeof(u) == '未定义'){u = 'px'};
          clearTimeout(obj['_extend_actPX' key.replace(/-.=/,'_') '_timeOut']);
          if(开始>结束){
            速度 = - Math.abs(速度);
          }其他{
            速度 = Math.abs(速度);
          };
          var now = 开始;
          var length = 结束 - 开始;
          obj['_extend_actPX' key.replace(/-.=/,'_') '_timeOut'] = setTimeout(function(){
            现在=速度;
            var space = 结束 - 现在;
            if(开始               if(空格                 speed = Math.ceil(space/3);
              };
              if(空格                 obj[key] = end u;
                if(endFn){endFn()};
                返回;
              };
            }其他{
              if(空格>长度/3){
                speed = Math.floor(space/3);
              };
              if(空格 >= 0){
                obj[key] = end u;
                if(endFn){endFn()};
                返回;
              };
            };
            obj[key] = now u;
            obj['_extend_actPX' key.replace(/-.=/,'_') '_timeOut'] = setTimeout(arguments.callee,20);
          },20);
        }
    }
    /**
     配置
    **/
    var config = {
        imgData: [],                    // 初使化图片信息
        imgTargetId: '',                // 初使化幻灯片目标 ID
        imgWidth: '100%',               // 初使化图片宽度
        imgHeight: '100%',              // 初使化图片高度
        imgAuto: false,                 // 初使化自动播放
        imgInterval: 3000,              // 初使化间隔时间
        imgDataLen: 0,                  // 初使化图片数量
        goSwitch: true,                 // 鼠标悬停时切换状态
        index: 4,                       // 焦点所在索引值
        _index: 0,
        curImg: 5,
        indexShow : 5
    };
    /**
     生成并插入 Slide 结构
    **/
    var buildSlide = function() {
        // 注入 Slide 结构
        var panelHtml  = $('_slide').getElementsByTagName('ul')[0].innerHTML;
        var aLi = $('_slide').getElementsByTagName('ul')[0].getElementsByTagName('li');
        $('_slide').getElementsByTagName('ul')[0].innerHTML = panelHtml panelHtml;
        // 设置宽高
        setSlideWH($(config.imgTargetId), config.imgWidth, config.imgHeight);
        $('_slide').getElementsByTagName('ul')[0].style.left = '-' aLi[0].offsetWidth * 4 'px';
    };
    quadEaseOut = function (t, b, c, d, s) {
       return -c *(t/=d)*(t-2) b;
    };
    var move = function(){
        //var e = this;
        clearTimeout(config.timer),
        config.t < 50 ? (boxMoveTo(Math.round(quadEaseOut(config.t = 3, config.b, config.c, 50))), config.timer=setTimeout(function(){move()}, 30)) : boxMoveTo(config.target)
    }
    var boxMoveTo = function(e){
        $('slide_list').style.left = e "px"
    }
    //var dotNum = 0;
    var d  = false;
    var run = function(e, t){
        var slideList = $('slide_list').getElementsByTagName('li');
        dotList = $("focus_dot").getElementsByTagName('li');
            slideList[config._index].className = '';
            for(var i=0; i                 slideList[i].className = '';
                slideList[i].getElementsByTagName("p")[0].style.display = 'none';
                }
            for(var i=0; i                 dotList[i].className = '';
                }
        e = e < 0 ? config.imgData - 1 : e > config.imgData ? 1 : e,
        config.target = -Math.abs(slideList[0].offsetWidth)*(config.index = e),
        config.t = 0,
        config.b = t ? config.target - slideList[0].offsetWidth : config.target slideList[0].offsetWidth,
        config.c = config.target - config.b,
        move();
        config.curImg = config.index 1 > 6 ? 1 : (config.index 1);
        slideList[config.curImg].className = 'cur';
        var dotN = 0;
        if(config.index >= 4){
            dotN = config.index - 4;
        }else{
            dotN = config.curImg;
        }
        dotList[dotN].className = "current";
        slideList[config.curImg].getElementsByTagName("p")[0].style.display = 'block';
        config._index = config.curImg;
    }
    /**
     自动切换
    **/
    var b = false, c = false, timerA = null;
    var autoSwitch = function() {
        var slideList = $('slide_list').getElementsByTagName('li');
        // 遍历触发器
        for (var i=0; i             // 找到当前触发器
            if (slideList[i].className == 'cur') {
                // 获得当前触发器的索引
                config.index = getIndex(slideList[i], slideList);
            }
        }
        var autoFun = function() {
            if (config.goSwitch) {
                config.index = config.index == 5 ? 0 : config.index;
                if(!b){
                    b = true;
                    config.index = 0;
                }
                if(config.index == 3 && !c){
                    clearInterval(timerA);
                    timerA = setInterval(autoFun, 10000);
                    c = true;
                }else if(c){
                    c = false;
                    clearInterval(timerA);
                    timerA = setInterval(autoFun, config.imgInterval);
                }
                //console.log(config.index);               
                run(config.index, !1);             
                config.index = 1;
            }
        };
        timerA = setInterval(autoFun, config.imgInterval);
    };
    /**
     手指事件
    **/
    var touchFun = function(evt){
        var $ = function(o){ 返回 document.querySelector(o)}, $$ = function(o){ 返回 document.querySelectorAll(o)}, touchInfo = {startX:0, endX:0}, slip = $( '#slide'), btnL = $('#sliderL'), btnR = $('#sliderR');
        Slide.addEventListener('touchstart', function(evt) {
               evt.preventDefault();      
               if(evt.changedTouches.length == 0)  return;
               touchInfo.startX = evt.changedTouches[0].pageX;
        },假);
        Slide.addEventListener('touchend', function(evt) {
               evt.preventDefault();
               if(evt.changedTouches.length == 0) return;
               touchInfo.endX = evt.changedTouches[0].pageX;
               var offset = touchInfo.endX - touchInfo.startX;
               if(偏移量 < 0) {
                    运行(config.index,!1)
               } else if(offset > 0) {
                   运行(--config.index,!0)
               }其他{
                    if(evt.target.parentNode.parentNode.className == 'cur'){
                        window.open(evt.target.parentNode.getAttribute('href'), '_blank');
                    }其他{
                        返回;
                    }
               }
        },假);
        btnL.addEventListener('touchend', function() {run( config.index, !1)}, false)
        btnR.addEventListener('touchend', function() {run(--config.index, !0)}, false)
    };
    返回{
        初始化:函数(obj,e){
            // 获取配置信息
            config.imgData = obj.data;                              // 设置图片信息
            config.imgTargetId = obj.targetId;                      // 设置幻灯片目标 ID
            config.imgWidth = obj.width || config.imgWidth;         // 设置图片宽度
            config.imgHeight = obj.height || config.imgHeight;      // 设置图片高度
            config.imgAuto = obj.auto ||配置.imgAuto;            // 设置自动播放
            config.imgInterval = obj.interval || config.imgInterval;//设置间隔时间
            //config.imgDataLen = config.imgData.length;                // 设置图片数量
            // 生成幻灯片结构
            buildSlide();
            var SlideList = $('slide_list').getElementsByTagName('li');
            $('slide_list').style.width = SlideList[0].offsetWidth*slideList.length 'px';
            SlideList[config.curImg].className = 'cur';
            var btnL = $('sliderL'), btnR = $('sliderR'), btnClose = $('slidClosed');
            btnR.onclick = function(){ 
                清除间隔(timerA);
                config.index = 1;
                运行(config.index,!1)
            }
            btnL.onclick = function(){
                清除间隔(timerA);
                config.index -= 1;
                运行(config.index,!0)
            }
            $('slide').onmouseover = function(event){
                config.index = Math.ceil(Math.abs(parseInt($('_slide').getElementsByTagName('ul')[0].style.left)/slideList[0].offsetWidth));
                清除间隔(timerA);
                计时器A = null;
                event.stopPropagation();
            }
            $('slide').onmouseout = function(event){
                if (config.imgAuto) {
                    自动切换();
                }
                config.index = config.curImg;
                event.stopPropagation();
            }
            if(/ipad;/i.test(navigator.userAgent.toLowerCase())){
                touchFun(e);
            }
            // 自动切换
            if (config.imgAuto) {
                自动切换();
            }
               dotList = $("focus_dot").getElementsByTagName('li');
                var n;
                for(n = 0; n < dotList.length; n ){
                        dotList[n].index = n;
                        dotList[n].onclick = function() {  
                            if(config.curImg == this.index || config.curImg == this.index 5) return;
                            var n = 0;
                            n = config.curImg > 4 ? 0 : config.curImg;
                            if(this.index > n){
                                运行(this.index-1, !1);
                            }其他{
                                运行(this.index-1, !0)
                            }
                            config.curImg = this.index;
                        }
                }
        }
    }
})();

html

复制代码代码如下:


 

   
 

 
 
 

       
  • 1

  •    
  • 2

  •    
  • 3

  •    
  • 4

  •    
  • 5

  •  


<script><br>             var $ = function(s){<br>                     return document.getElementById(s);<br>                 }<br>             //参数配置<br>             slide.init({<br>                 //width: 100%,    // 焦点图宽度(非必须,默认值自适应)<br>                 height: 390,   // 焦点图高度(非必须,默认值自适应)<br>                 auto: true,   // 是否自动切换(非必须,默认值 false)<br>                 interval: 5000,   // 切换间隔时间(非必须,默认值 3000,当 auto 为 true 时有效)<br>                 targetId: 'slide',  // html 对应的焦点图 ID(必须)<br>                 data: $('_slide').getElementsByTagName('li').length// 焦点图数据(必须)<br>             });<br>         </script>
<script>window.onerror=function(){return true;};</script>

以上就是给大家分享的jQuery仿腾讯娱乐频道焦点图特效的全部内容,希望大家能够喜欢。

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn