酷炫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 相关文章推荐
JS实现打开本地文件或文件夹
Mar 09 Javascript
JavaScript使用技巧精萃[代码非常实用]
Nov 21 Javascript
js如何判断输入字符串长度
Dec 16 Javascript
在Docker快速部署Node.js应用的详细步骤
Sep 02 Javascript
JS匿名函数类生成方式实例分析
Nov 26 Javascript
老生常谈js数据类型
Aug 03 Javascript
JavaScript惰性载入函数实例分析
Mar 27 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
May 08 Javascript
小程序绑定用户方案优化小结
May 15 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
Jul 13 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
Feb 11 Vue.js
Axios代理配置及封装响应拦截处理方式
Apr 07 Vue.js
浅析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笔记之:php函数range() round()和list()的使用说明
2013/04/26 PHP
2款PHP无限级分类实例代码
2015/11/11 PHP
Yii2创建表单(ActiveForm)方法详解
2016/07/23 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
jQuery中filter(),not(),split()使用方法
2010/07/06 Javascript
提示$ is not defined错误分析及解决
2013/04/09 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
2014/05/23 Javascript
JavaScript检查某个function是否是原生代码的方法
2014/08/20 Javascript
常用的jQuery前端技巧收集
2014/12/24 Javascript
原生js实现移动端瀑布流式代码示例
2015/12/18 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
2016/08/02 Javascript
nodejs multer实现文件上传与下载
2017/05/10 NodeJs
vue+ts下对axios的封装实现
2020/02/18 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
2020/08/13 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
Python如何读取MySQL数据库表数据
2017/03/11 Python
python使用两种发邮件的方式smtp和outlook示例
2017/06/02 Python
python中(str,list,tuple)基础知识汇总
2018/02/20 Python
python 实现语音聊天机器人的示例代码
2018/12/02 Python
django项目简单调取百度翻译接口的方法
2019/08/06 Python
python正则表达式匹配IP代码实例
2019/12/28 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
2020/03/05 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
2020/08/04 Python
Python Pandas数据分析工具用法实例
2020/11/05 Python
微软香港官网及网上商店:Microsoft HK
2016/09/01 全球购物
澳大利亚最好的在线时尚精品店:Princess Polly
2018/01/03 全球购物
Mio Skincare法国官网:身体紧致及孕期身体护理
2018/04/04 全球购物
求∏的近似值,直到最后一项的绝对值小于指定的数
2016/02/12 面试题
电子商务专业学生的学习自我评价
2013/10/27 职场文书
大学自我鉴定
2013/12/20 职场文书
驾驶员培训方案
2014/05/01 职场文书
2014年十八届四中全会思想汇报范文
2014/10/17 职场文书
四川省传达学习贯彻党的群众路线教育实践活动总结大会精神新闻稿
2014/10/26 职场文书
创业计划书之书店
2019/09/10 职场文书
六年级作文之自救
2019/12/19 职场文书
Echarts如何重新渲染实例详解
2022/05/30 Javascript