首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

jquery兑现图片悬浮效果

2012-09-05 
jquery实现图片悬浮效果主要的想法是当鼠标悬浮后计算所有的描述容器大小和位置。主要依赖于缩略图的最大尺

jquery实现图片悬浮效果

主要的想法是当鼠标悬浮后计算所有的描述容器大小和位置。主要依赖于缩略图的最大尺寸及其居于主要wrapper中的位置。例如,当缩略图接近边缘,我们就使得描述区域显示在缩略图左边

然后我们将帮定逼近事件到图片。主要想法是根据鼠标位置来变化图片大小。一旦图片达到最大尺寸,我们设置z-index最高,因此位于最高层次,并且显示分开的描述。风之境地

// list of thumbs
var $list??????? = $('#pe-thumbs'),
??? // list's width and offset left.
??? // this will be used to know the position of the description container
??? listW??????? = $list.width(),
??? listL??????? = $list.offset().left,
??? // the images
??? $elems??????? = $list.find('img'),
??? // the description containers
??? $descrp??????? = $list.find('div.pe-description'),
??? // maxScale : maximum scale value the image will have
??? // minOpacity / maxOpacity : minimum (set in the CSS) and maximum values for the image's opacity
??? settings??? = {
??????? maxScale??? : 1.3,
??????? maxOpacity??? : 0.9,
??????? minOpacity??? : Number( $elems.css('opacity') )
??? },
??? init??????? = function() {

??????? // minScale will be set in the CSS
??????? settings.minScale = _getScaleVal() || 1;
??????? // preload the images (thumbs)
??????? _loadImages( function() {

??????????? _calcDescrp();
??????????? _initEvents();

??????? });

??? },
??? // Get Value of CSS Scale through JavaScript:
??? // http://css-tricks.com/get-value-of-css-rotation-through-javascript/
??? _getScaleVal= function() {

??????? var st = window.getComputedStyle($elems.get(0), null),
??????????? tr = st.getPropertyValue("-webkit-transform") ||
???????????????? st.getPropertyValue("-moz-transform") ||
???????????????? st.getPropertyValue("-ms-transform") ||
???????????????? st.getPropertyValue("-o-transform") ||
???????????????? st.getPropertyValue("transform") ||
???????????????? "fail...";

??????? if( tr !== 'none' ) {????

??????????? var values = tr.split('(')[1].split(')')[0].split(','),
??????????????? a = values[0],
??????????????? b = values[1],
??????????????? c = values[2],
??????????????? d = values[3];

??????????? return Math.sqrt( a * a + b * b );

??????? }

??? },
??? // calculates the style values for the description containers,
??? // based on the settings variable
??? _calcDescrp??? = function() {

??????? $descrp.each( function(i) {

??????????? var $el??????? = $(this),
??????????????? $img??? = $el.prev(),
??????????????? img_w??? = $img.width(),
??????????????? img_h??? = $img.height(),
??????????????? img_n_w??? = settings.maxScale * img_w,
??????????????? img_n_h??? = settings.maxScale * img_h,
??????????????? space_t = ( img_n_h - img_h ) / 2,
??????????????? space_l = ( img_n_w - img_w ) / 2;

??????????? $el.data( 'space_l', space_l ).css({
??????????????? height??? : settings.maxScale * $el.height(),
??????????????? top??????? : -space_t,
??????????????? left??? : img_n_w - space_l
??????????? });

??????? });

??? },
??? _initEvents??? = function() {

??????? $elems.on('proximity.Photo', { max: 80, throttle: 10, fireOutOfBounds : true }, function(event, proximity, distance) {

??????????? var $el??????????? = $(this),
??????????????? $li??????????? = $el.closest('li'),
??????????????? $desc??????? = $el.next(),
??????????????? scaleVal??? = proximity * ( settings.maxScale - settings.minScale ) + settings.minScale,
??????????????? scaleExp??? = 'scale(' + scaleVal + ')';

??????????? // change the z-index of the element once
??????????? // it reaches the maximum scale value
??????????? // also, show the description container
??????????? if( scaleVal === settings.maxScale ) {

??????????????? $li.css( 'z-index', 1000 );

??????????????? if( $desc.offset().left + $desc.width() > listL + listW ) {

??????????????????? $desc.css( 'left', -$desc.width() - $desc.data( 'space_l' ) );

??????????????? }

??????????????? $desc.fadeIn( 800 );

??????????? }
??????????? else {

??????????????? $li.css( 'z-index', 1 );

??????????????? $desc.stop(true,true).hide();

??????????? }???

??????????? $el.css({
??????????????? '-webkit-transform'??? : scaleExp,
??????????????? '-moz-transform'??? : scaleExp,
??????????????? '-o-transform'??????? : scaleExp,
??????????????? '-ms-transform'??????? : scaleExp,
??????????????? 'transform'??????????? : scaleExp,
??????????????? 'opacity'??????????? : ( proximity * ( settings.maxOpacity - settings.minOpacity ) + settings.minOpacity )
??????????? });

??????? });

??? },
??? _loadImages??? = function( callback ) {

??????? var loaded???? = 0,
??????????? total??? = $elems.length;

??????? $elems.each( function(i) {

??????????? var $el = $(this);

??????????? $('<img>').load( function() {

??????????????? ++loaded;
??????????????? if( loaded === total )
??????????????????? callback.call();

??????????? }).attr( 'src', $el.attr('src') );

??????? });

??? };

return {
??? init??? : init
};

热点排行