Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效_Javascript教程-查字典教程网
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
发布时间:2016-12-30 来源:查字典编辑
摘要:一个仿腾讯娱乐频道焦点图轮播的插件ui3g.js复制代码代码如下:/*顶部大图滚动*/varslide=(function(){varqua...

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

ui3g.js

复制代码 代码如下:

/*

顶部大图滚动

*/

var slide = (function() {

var quadEaseOut;

var doc = document;

var $ = function(s){

return document.getElementById(s);

}

/**

获取索引值,工具类

@param {Element} current 当前元素

@param {Object} obj 元素集合

**/

var getIndex = function(current, obj) {

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

if (obj[i] == current) {

return i;

}

}

};

/**

@param {Element} el 目标元素

**/

var siblings = function(el) {

var r = [],

n = el.parentNode.firstChild;

for ( ; n; n = n.nextSibling ) {

if ( n.nodeType === 1 && n !== el ) {

r.push( n );

}

}

return r;

};

/**

设置 Slide 宽高

@param {Element} el Slide 元素

@param {Number} width Slide 宽度

@param {Number} height Slide 高度

**/

var setSlideWH = function(el, width, height) {

var styleW,

styleH;

if (width == '100%') { // 自适应宽度

styleW = '100%';

} else { // 定宽

styleW = width + 'px';

}

if (height == '100%') { // 自适应高度

styleH = '100%';

} else { // 定高

styleH = height + 'px';

}

el.style.width = styleW;

el.style.height = styleH;

};

var readStyle = function(obj, name){

if(obj.style[name]){

return obj.style[name];

}else if(obj.currentStyle){

return obj.currentStyle[name]

}else if(document.defaultView && document.defaultView.getComputedStyle){

var d=document.defaultView.getComputedStyle(obj,null);

return d.getPropertyValue(name)

}else{

return null

}

};

var style = {

setOpacity : function(obj,opacity){

if(typeof(obj.style.opacity) != 'undefined'){

obj.style.opacity = opacity;

}else{

obj.style.filter = 'Alpha(Opacity=' + (opacity*100) + ')';

};

}

};

/* 动画 */

var extend = {

/**

渐显元素

@param {Element} target 目标元素

**/

fadeIn : function(obj,time){

if(readStyle(obj, 'display') == 'none'){

obj.style.display = 'block';

};

style.setOpacity(obj,0);

time = time || 200;

var opacity = 0,step = time / 20;

clearTimeout(obj.showT);

obj.showT = setTimeout(function(){

if(opacity >= 1) { style.setOpacity(obj,1); return; }

opacity +=1/step;

style.setOpacity(obj,opacity);

obj.showT = setTimeout(arguments.callee,20);

},20);

},

/**

渐隐元素

@param {Element} target 目标元素

**/

fadeOut : function(obj,time){

time = time || 200;

style.setOpacity(obj,1);

var opacity = 1,step = time / 20;

clearTimeout(obj.showT);

obj.showT = setTimeout(function(){

if(opacity <= 0){

obj.style.display = 'none';

style.setOpacity(obj,0);

return;

};

opacity -= 1/step;

obj.showT = setTimeout(arguments.callee,20);

},20);

},

/**

动画元素

@param {Element} target 目标元素

@param {String} key target样式

@param {Number} start key初始值

@param {Number} end key结束值

@param {Number} speed 速度

@param {Function} endFn 结束时的回调

@param {String} u 样式单位

**/

actPX : function(obj,key,start,end,speed,endFn,u){

if(typeof(u) == 'undefined'){u = 'px'};

clearTimeout(obj['_extend_actPX' + key.replace(/-.=/,'_') + '_timeOut']);

if(start > end){

speed = - Math.abs(speed);

}else{

speed = Math.abs(speed);

};

var now = start;

var length = end - start;

obj['_extend_actPX' + key.replace(/-.=/,'_') + '_timeOut'] = setTimeout(function(){

now += speed;

var space = end - now;

if(start < end){

if(space < length/3){

speed = Math.ceil(space/3);

};

if(space <= 0){

obj[key] = end + u;

if(endFn){endFn()};

return;

};

}else{

if(space > length/3){

speed = Math.floor(space/3);

};

if(space >= 0){

obj[key] = end + u;

if(endFn){endFn()};

return;

};

};

obj[key] = now + u;

obj['_extend_actPX' + key.replace(/-.=/,'_') + '_timeOut'] = setTimeout(arguments.callee,20);

},20);

}

}

/**

配置

**/

var config = {

imgData: [], // 初使化图片信息

imgTargetId: '', // 初使化 Slide 目标 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<config.imgData*2; i++){

slideList[i].className = '';

slideList[i].getElementsByTagName("p")[0].style.display = 'none';

}

for(var i=0; i<config.imgData; 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<config.imgDataLen; 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){ return document.querySelector(o)}, $$ = function(o){ return document.querySelectorAll(o)}, touchInfo = {startX:0, endX:0}, slide = $('#slide'), btnL = $('#sliderL'), btnR = $('#sliderR');

slide.addEventListener('touchstart', function(evt) {

evt.preventDefault();

if(evt.changedTouches.length == 0) return;

touchInfo.startX = evt.changedTouches[0].pageX;

}, false);

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(offset < 0) {

run(++config.index, !1)

} else if(offset > 0) {

run(--config.index, !0)

}else{

if(evt.target.parentNode.parentNode.className == 'cur'){

window.open(evt.target.parentNode.getAttribute('href'), '_blank');

}else{

return;

}

}

},false);

btnL.addEventListener('touchend', function() {run(++config.index, !1)}, false)

btnR.addEventListener('touchend', function() {run(--config.index, !0)}, false)

};

return {

init: function(obj, e) {

// 获取配置信息

config.imgData = obj.data; // 设置图片信息

config.imgTargetId = obj.targetId; // 设置 Slide 目标 ID

config.imgWidth = obj.width || config.imgWidth; // 设置图片宽度

config.imgHeight = obj.height || config.imgHeight; // 设置图片高度

config.imgAuto = obj.auto || config.imgAuto; // 设置自动播放

config.imgInterval = obj.interval || config.imgInterval;// 设置间隔时间

//config.imgDataLen = config.imgData.length; // 设置图片数量

// 生成 Slide 结构

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(){

clearInterval(timerA);

config.index += 1;

run(config.index, !1)

}

btnL.onclick = function(){

clearInterval(timerA);

config.index -= 1;

run(config.index, !0)

}

$('slide').onmouseover = function(event){

config.index = Math.ceil(Math.abs(parseInt($('_slide').getElementsByTagName('ul')[0].style.left)/slideList[0].offsetWidth));

clearInterval(timerA);

timerA = null;

event.stopPropagation();

}

$('slide').onmouseout = function(event){

if (config.imgAuto) {

autoSwitch();

}

config.index = config.curImg;

event.stopPropagation();

}

if(/ipad;/i.test(navigator.userAgent.toLowerCase())){

touchFun(e);

}

// 自动切换

if (config.imgAuto) {

autoSwitch();

}

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){

run(this.index-1, !1);

}else{

run(this.index-1, !0)

}

config.curImg = this.index;

}

}

}

}

})();

html

复制代码 代码如下:

<div id="slide">

<div id="_slide">

<ul id="slide_list">

<li bosszone="Jdt">

<a href="#"> <img src="images/demo1.jpg" width="830" height="350" border="0">

<p>《北爱》陈思诚激吻佟丽娅 公主抱不慎走光</p>

</a>

<div></div>

</li>

<li bosszone="Jdt">

<a href="#"> <img src="images/demo2.jpg" width="830" height="350" border="0">

<p>林志玲捞金鱼尾纹再现 遭男子摸背熊抱尴尬挤笑</p>

</a>

<div></div>

</li>

<li bosszone="Jdt">

<a href="#"> <img src="images/demo3.jpg" width="830" height="350" border="0">

<p>芙蓉姐姐大摆S型秀瘦腰长腿 调戏记者:想追求我?</p>

</a>

<div></div>

</li>

<li bosszone="Jdt">

<a href="#" title=""> <img src="images/demo4.jpg" width="830" height="350" border="0">

<p>柳岩:消费我 你们在我胸前也看不出一朵花来</p>

</a>

<div></div>

</li>

<li>

<dl>

<dd id="ad1" bosszone="jdtAd1">

<a href="#"> <img src="images/89854294.jpg" width="363" height="350" border="0">

<p>萌妹教你白全身</p>

</a> </dd>

<dd id="ad2" bosszone="jdtAd2">

<a href="#"> <img src="images/90233983.jpg" width="156" height="350" border="0">

<p>学我按3穴位变大胸</p>

</a> </dd>

<dd id="ad3" bosszone="jdtAd3">

<a href="#"> <img src="images/89854500.jpg" width="156" height="350" border="0">

<p>男人更爱“坏”女人</p>

</a> </dd>

<dd id="ad4" bosszone="jdtAd4">

<a href="#"> <img src="images/89858252.jpg" width="156" height="350" border="0">

<p>女神自曝美胸手法</p>

</a> </dd>

</dl>

<div></div>

</li>

</ul>

</div>

<a href="javascript:void(0);" id="sliderL" bosszone="photoPre"></a>

<a href="javascript:void(0);" id="sliderR" bosszone="photoNext"></a>

<ul id="focus_dot">

<li>1</li>

<li>2</li>

<li>3</li>

<li>4</li>

<li>5</li>

</ul>

</div>

<script>

var $ = function(s){

return document.getElementById(s);

}

//参数配置

slide.init({

//width: 100%,// 焦点图宽度(非必须,默认值自适应)

height: 390,// 焦点图高度(非必须,默认值自适应)

auto: true,// 是否自动切换(非必须,默认值 false)

interval: 5000,// 切换间隔时间(非必须,默认值 3000,当 auto 为 true 时有效)

targetId: 'slide',// html 对应的焦点图 ID(必须)

data: $('_slide').getElementsByTagName('li').length// 焦点图数据(必须)

});

</script>

<script>window.onerror=function(){return true;};</script>

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

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Javascript教程学习
    热门Javascript教程学习
    编程开发子分类