2 * Interface Elements for jQuery
\r
5 * http://interface.eyecon.ro
\r
7 * Copyright (c) 2006 Stefan Petre
\r
8 * Dual licensed under the MIT (MIT-LICENSE.txt)
\r
9 * and GPL (GPL-LICENSE.txt) licenses.
\r
14 * Build a Fisheye menu from a list of links
\r
17 * @description Build a Fisheye menu from a list of links
\r
18 * @param Hash hash A hash of parameters
\r
19 * @option String items items selection
\r
20 * @option String container container element
\r
21 * @option Integer itemWidth the minimum width for each item
\r
22 * @option Integer maxWidth the maximum width for each item
\r
23 * @option String itemsText selection of element that contains the text for each item
\r
24 * @option Integer proximity the distance from element that make item to interact
\r
25 * @option String valign vertical alignment
\r
26 * @option String halign horizontal alignment
\r
29 * @cat Plugins/Interface
\r
30 * @author Stefan Petre
\r
34 build : function(options)
\r
42 items : jQuery(options.items, this),
\r
43 container: jQuery(options.container, this),
\r
44 pos : jQuery.iUtil.getPosition(this),
\r
45 itemWidth: options.itemWidth,
\r
46 itemsText: options.itemsText,
\r
47 proximity: options.proximity,
\r
48 valign: options.valign,
\r
49 halign: options.halign,
\r
50 maxWidth : options.maxWidth
\r
52 jQuery.iFisheye.positionContainer(el, 0);
\r
53 jQuery(window).bind(
\r
57 el.fisheyeCfg.pos = jQuery.iUtil.getPosition(el);
\r
58 jQuery.iFisheye.positionContainer(el, 0);
\r
59 jQuery.iFisheye.positionItems(el);
\r
62 jQuery.iFisheye.positionItems(el);
\r
68 jQuery(el.fisheyeCfg.itemsText, this).get(0).style.display = 'block';
\r
75 jQuery(el.fisheyeCfg.itemsText, this).get(0).style.display = 'none';
\r
78 jQuery(document).bind(
\r
82 var pointer = jQuery.iUtil.getPointer(e);
\r
84 if (el.fisheyeCfg.halign && el.fisheyeCfg.halign == 'center')
\r
85 var posx = pointer.x - el.fisheyeCfg.pos.x - (el.offsetWidth - el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size())/2 - el.fisheyeCfg.itemWidth/2;
\r
86 else if (el.fisheyeCfg.halign && el.fisheyeCfg.halign == 'right')
\r
87 var posx = pointer.x - el.fisheyeCfg.pos.x - el.offsetWidth + el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size();
\r
89 var posx = pointer.x - el.fisheyeCfg.pos.x;
\r
90 var posy = Math.pow(pointer.y - el.fisheyeCfg.pos.y - el.offsetHeight/2,2);
\r
91 el.fisheyeCfg.items.each(
\r
94 distance = Math.sqrt(
\r
95 Math.pow(posx - nr*el.fisheyeCfg.itemWidth, 2)
\r
98 distance -= el.fisheyeCfg.itemWidth/2;
\r
100 distance = distance < 0 ? 0 : distance;
\r
101 distance = distance > el.fisheyeCfg.proximity ? el.fisheyeCfg.proximity : distance;
\r
102 distance = el.fisheyeCfg.proximity - distance;
\r
104 extraWidth = el.fisheyeCfg.maxWidth * distance/el.fisheyeCfg.proximity;
\r
106 this.style.width = el.fisheyeCfg.itemWidth + extraWidth + 'px';
\r
107 this.style.left = el.fisheyeCfg.itemWidth * nr + toAdd + 'px';
\r
108 toAdd += extraWidth;
\r
111 jQuery.iFisheye.positionContainer(el, toAdd);
\r
118 positionContainer : function(el, toAdd)
\r
120 if (el.fisheyeCfg.halign)
\r
121 if (el.fisheyeCfg.halign == 'center')
\r
122 el.fisheyeCfg.container.get(0).style.left = (el.offsetWidth - el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size())/2 - toAdd/2 + 'px';
\r
123 else if (el.fisheyeCfg.halign == 'left')
\r
124 el.fisheyeCfg.container.get(0).style.left = - toAdd/el.fisheyeCfg.items.size() + 'px';
\r
125 else if (el.fisheyeCfg.halign == 'right')
\r
126 el.fisheyeCfg.container.get(0).style.left = (el.offsetWidth - el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size()) - toAdd/2 + 'px';
\r
127 el.fisheyeCfg.container.get(0).style.width = el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size() + toAdd + 'px';
\r
130 positionItems : function(el)
\r
132 el.fisheyeCfg.items.each(
\r
135 this.style.width = el.fisheyeCfg.itemWidth + 'px';
\r
136 this.style.left = el.fisheyeCfg.itemWidth * nr + 'px';
\r
142 jQuery.fn.Fisheye = jQuery.iFisheye.build;