酷炫jQuery全屏3D焦点图动画效果


Posted in Javascript onMarch 22, 2016

这又是一款很不错的jQuery焦点图动画,它的特点是整个焦点图基本是全屏显示的,非常大气,而且图片的倾斜也给整个焦点图3D立体的视觉效果,而且焦点图的图片切换非常流畅,相当实用。

酷炫jQuery全屏3D焦点图动画效果

HTML代码:

<div class="wrapper">

</div>

<div id="pxs_container" class="pxs_container">
 <div class="pxs_bg">
 <div class="pxs_bg1"></div>
 <div class="pxs_bg2"></div>
 <div class="pxs_bg3"></div>
 </div>
 <div class="pxs_loading">Loading images...</div>
 <div class="pxs_slider_wrapper">
 <ul class="pxs_slider">
  <li><img src="images/1.jpg" alt="First Image" /></li>
  <li><img src="images/2.jpg" alt="Second Image" /></li>
  <li><img src="images/3.jpg" alt="Third Image" /></li>
  <li><img src="images/4.jpg" alt="Forth Image" /></li>
  <li><img src="images/5.jpg" alt="Fifth Image" /></li>
  <li><img src="images/6.jpg" alt="Sixth Image" /></li>
 </ul>
 <div class="pxs_navigation">
  <span class="pxs_next"></span>
  <span class="pxs_prev"></span>
 </div>
 <ul class="pxs_thumbnails">
  <li><img src="images/thumbs/1.jpg" alt="First Image" /></li>
  <li><img src="images/thumbs/2.jpg" alt="Second Image" /></li>
  <li><img src="images/thumbs/3.jpg" alt="Third Image" /></li>
  <li><img src="images/thumbs/4.jpg" alt="Forth Image" /></li>
  <li><img src="images/thumbs/5.jpg" alt="Fifth Image" /></li>
  <li><img src="images/thumbs/6.jpg" alt="Sixth Image" /></li>
 </ul>
 </div>
</div>

JavaScript代码

(function($) {
 $.fn.parallaxSlider = function(options) {
 var opts = $.extend({}, $.fn.parallaxSlider.defaults, options);
 return this.each(function() {
  var $pxs_container = $(this),
  o   = $.meta ? $.extend({}, opts, $pxs_container.data()) : opts;

  //the main slider
  var $pxs_slider = $('.pxs_slider',$pxs_container),
  //the elements in the slider
  $elems  = $pxs_slider.children(),
  //total number of elements
  total_elems = $elems.length,
  //the navigation buttons
  $pxs_next = $('.pxs_next',$pxs_container),
  $pxs_prev = $('.pxs_prev',$pxs_container),
  //the bg images
  $pxs_bg1 = $('.pxs_bg1',$pxs_container),
  $pxs_bg2 = $('.pxs_bg2',$pxs_container),
  $pxs_bg3 = $('.pxs_bg3',$pxs_container),
  //current image
  current  = 0,
  //the thumbs container
  $pxs_thumbnails = $('.pxs_thumbnails',$pxs_container),
  //the thumbs
  $thumbs  = $pxs_thumbnails.children(),
  //the interval for the autoplay mode
  slideshow,
  //the loading image
  $pxs_loading = $('.pxs_loading',$pxs_container),
  $pxs_slider_wrapper = $('.pxs_slider_wrapper',$pxs_container);

  //first preload all the images
  var loaded = 0,
  $images = $pxs_slider_wrapper.find('img');

  $images.each(function(){
  var $img = $(this);
  $('<img/>').load(function(){
   ++loaded;
   if(loaded == total_elems*2){
   $pxs_loading.hide();
   $pxs_slider_wrapper.show();

   //one images width (assuming all images have the same sizes)
   var one_image_w = $pxs_slider.find('img:first').width();

   /*
   need to set width of the slider,
   of each one of its elements, and of the
   navigation buttons
    */
   setWidths($pxs_slider,
   $elems,
   total_elems,
   $pxs_bg1,
   $pxs_bg2,
   $pxs_bg3,
   one_image_w,
   $pxs_next,
   $pxs_prev);

   /*
    set the width of the thumbs
    and spread them evenly
    */
   $pxs_thumbnails.css({
    'width'  : one_image_w + 'px',
    'margin-left' : -one_image_w/2 + 'px'
   });
   var spaces = one_image_w/(total_elems+1);
   $thumbs.each(function(i){
    var $this = $(this);
    var left = spaces*(i+1) - $this.width()/2;
    $this.css('left',left+'px');

    if(o.thumbRotation){
    var angle = Math.floor(Math.random()*41)-20;
    $this.css({
     '-moz-transform' : 'rotate('+ angle +'deg)',
     '-webkit-transform' : 'rotate('+ angle +'deg)',
     'transform'  : 'rotate('+ angle +'deg)'
    });
    }
    //hovering the thumbs animates them up and down
    $this.bind('mouseenter',function(){
    $(this).stop().animate({top:'-10px'},100);
    }).bind('mouseleave',function(){
    $(this).stop().animate({top:'0px'},100);
    });
   });

   //make the first thumb be selected
   highlight($thumbs.eq(0));

   //slide when clicking the navigation buttons
   $pxs_next.bind('click',function(){
    ++current;
    if(current >= total_elems)
    if(o.circular)
     current = 0;
    else{
    --current;
    return false;
    }
    highlight($thumbs.eq(current));
    slide(current,
    $pxs_slider,
    $pxs_bg3,
    $pxs_bg2,
    $pxs_bg1,
    o.speed,
    o.easing,
    o.easingBg);
   });
   $pxs_prev.bind('click',function(){
    --current;
    if(current < 0)
    if(o.circular)
     current = total_elems - 1;
    else{
    ++current;
    return false;
    }
    highlight($thumbs.eq(current));
    slide(current,
    $pxs_slider,
    $pxs_bg3,
    $pxs_bg2,
    $pxs_bg1,
    o.speed,
    o.easing,
    o.easingBg);
   });

   /*
   clicking a thumb will slide to the respective image
    */
   $thumbs.bind('click',function(){
    var $thumb = $(this);
    highlight($thumb);
    //if autoplay interrupt when user clicks
    if(o.auto)
    clearInterval(slideshow);
    current = $thumb.index();
    slide(current,
    $pxs_slider,
    $pxs_bg3,
    $pxs_bg2,
    $pxs_bg1,
    o.speed,
    o.easing,
    o.easingBg);
   });

   /*
   activate the autoplay mode if
   that option was specified
    */
   if(o.auto != 0){
    o.circular = true;
    slideshow = setInterval(function(){
    $pxs_next.trigger('click');
    },o.auto);
   }

   /*
   when resizing the window,
   we need to recalculate the widths of the
   slider elements, based on the new windows width.
   we need to slide again to the current one,
   since the left of the slider is no longer correct
    */
   $(window).resize(function(){
    w_w = $(window).width();
    setWidths($pxs_slider,$elems,total_elems,$pxs_bg1,$pxs_bg2,$pxs_bg3,one_image_w,$pxs_next,$pxs_prev);
    slide(current,
    $pxs_slider,
    $pxs_bg3,
    $pxs_bg2,
    $pxs_bg1,
    1,
    o.easing,
    o.easingBg);
   });

   }
  }).error(function(){
   alert('here')
  }).attr('src',$img.attr('src'));
  });

 });
 };

 //the current windows width
 var w_w  = $(window).width();

 var slide  = function(current,
 $pxs_slider,
 $pxs_bg3,
 $pxs_bg2,
 $pxs_bg1,
 speed,
 easing,
 easingBg){
 var slide_to = parseInt(-w_w * current);
 $pxs_slider.stop().animate({
  left : slide_to + 'px'
 },speed, easing);
 $pxs_bg3.stop().animate({
  left : slide_to/2 + 'px'
 },speed, easingBg);
 $pxs_bg2.stop().animate({
  left : slide_to/4 + 'px'
 },speed, easingBg);
 $pxs_bg1.stop().animate({
  left : slide_to/8 + 'px'
 },speed, easingBg);
 }

 var highlight = function($elem){
 $elem.siblings().removeClass('selected');
 $elem.addClass('selected');
 }

 var setWidths = function($pxs_slider,
 $elems,
 total_elems,
 $pxs_bg1,
 $pxs_bg2,
 $pxs_bg3,
 one_image_w,
 $pxs_next,
 $pxs_prev){
 /*
 the width of the slider is the windows width
 times the total number of elements in the slider
  */
 var pxs_slider_w = w_w * total_elems;
 $pxs_slider.width(pxs_slider_w + 'px');
 //each element will have a width = windows width
 $elems.width(w_w + 'px');
 /*
 we also set the width of each bg image div.
 The value is the same calculated for the pxs_slider
  */
 $pxs_bg1.width(pxs_slider_w + 'px');
 $pxs_bg2.width(pxs_slider_w + 'px');
 $pxs_bg3.width(pxs_slider_w + 'px');

 /*
 both the right and left of the
 navigation next and previous buttons will be:
 windowWidth/2 - imgWidth/2 + some margin (not to touch the image borders)
  */
 var position_nav = w_w/2 - one_image_w/2 + 3;
 $pxs_next.css('right', position_nav + 'px');
 $pxs_prev.css('left', position_nav + 'px');
 }

 $.fn.parallaxSlider.defaults = {
 auto  : 0, //how many seconds to periodically slide the content.
    //If set to 0 then autoplay is turned off.
 speed  : 1000,//speed of each slide animation
 easing  : 'jswing',//easing effect for the slide animation
 easingBg : 'jswing',//easing effect for the background animation
 circular : true,//circular slider
 thumbRotation : true//the thumbs will be randomly rotated
 };
 //easeInOutExpo,easeInBack
})(jQuery);

调用插件的JavaScript代码

$(function() {
 var $pxs_container = $('#pxs_container');
 $pxs_container.parallaxSlider();
});

以上就是本文的全部内容,希望对大家学习jquery程序设计有所帮助。

Javascript 相关文章推荐
基于JQuery的访问WebService的代码(可访问Java[Xfire])
Nov 19 Javascript
Javascript模块化编程(一)AMD规范(规范使用模块)
Jan 17 Javascript
Ajax同步与异步传输的示例代码
Nov 21 Javascript
javascript 密码框防止用户粘贴和复制的实现代码
Feb 17 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
Jun 15 Javascript
JavaScript使用Prototype实现面向对象的方法
Apr 14 Javascript
JQuery页面随滚动条动态加载效果的简单实现(推荐)
Feb 08 Javascript
ES6扩展运算符的用途实例详解
Aug 20 Javascript
详解javascript常用工具类的封装
Jan 30 Javascript
vue-自定义组件传值的实例讲解
Sep 18 Javascript
生产制造追溯系统之在线打印功能
Jun 03 Javascript
如何实现echarts markline标签名显示自己想要的
Jul 20 Javascript
浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
Mar 22 #Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
Mar 22 #Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
Mar 22 #Javascript
Node.js文件操作方法汇总
Mar 22 #Javascript
浅谈Sticky组件的改进实现
Mar 22 #Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
Mar 22 #Javascript
关于JS中match() 和 exec() 返回值和属性的测试
Mar 21 #Javascript
You might like
PHP加速 eAccelerator配置和使用指南
2009/06/05 PHP
PHP 输出简单动态WAP页面
2009/06/09 PHP
fgetcvs在linux的问题
2012/01/15 PHP
用php简单实现加减乘除计算器
2014/01/06 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
2015/03/07 PHP
js 强制弹出窗口代码研究-又一款代码
2010/03/20 Javascript
js 实现菜单上下显示附效果图
2013/11/21 Javascript
node.js WEB开发中图片验证码的实现方法
2014/06/03 Javascript
在JS数组特定索引处指定位置插入元素
2014/07/27 Javascript
javascript引擎长时间独占线程造成卡顿的解决方案
2014/12/03 Javascript
浅谈Javascript 数组与字典
2015/01/29 Javascript
js实现一个链接打开两个链接地址的方法
2015/05/12 Javascript
Node.js编程中客户端Session的使用详解
2015/06/23 Javascript
jquery日历插件datepicker用法分析
2016/01/22 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
微信小程序 删除项目工程实现步骤
2016/11/10 Javascript
Angular5.1新功能分享
2017/12/21 Javascript
Vue+jquery实现表格指定列的文字收缩的示例代码
2018/01/09 jQuery
jQuery实现菜单的显示和隐藏功能示例
2018/07/24 jQuery
微信小程序左滑删除功能开发案例详解
2018/11/12 Javascript
vue滚动固定顶部及修改样式的实例代码
2019/05/30 Javascript
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
2020/10/13 Javascript
[02:28]DOTA2亚洲邀请赛 LGD战队巡礼
2015/02/03 DOTA
wxpython学习笔记(推荐查看)
2014/06/09 Python
python求解数组中两个字符串的最小距离
2018/09/27 Python
Python画图高斯分布的示例
2019/07/10 Python
Django Channels 实现点对点实时聊天和消息推送功能
2019/07/17 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
python列表删除和多重循环退出原理详解
2020/03/26 Python
Python实现动态循环输出文字功能
2020/05/07 Python
python使用smtplib模块发送邮件
2020/12/17 Python
碧欧泉美国官网:Biotherm美国
2016/08/31 全球购物
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
Bandier官网:奢侈、时尚前卫的健身服装首选目的地
2020/07/05 全球购物
SpringBoot+VUE实现数据表格的实战
2021/08/02 Java/Android
Python进程池与进程锁之语法学习
2022/04/11 Python