|
45 | 45 | var bodyResetProp = { |
46 | 46 | transform: '', |
47 | 47 | 'overflow-x': '', |
48 | | - 'overflow-y': '', |
49 | 48 | transition: '', |
| 49 | + position: '' |
50 | 50 | }; |
51 | 51 |
|
52 | 52 | var sliiiderResetProp = { |
|
66 | 66 | position: 'fixed' |
67 | 67 | }; |
68 | 68 |
|
| 69 | + var bodyChildrenProp = { |
| 70 | + transition: 'transform ' + settings.animation_duration + ' ' + settings.animation_curve |
| 71 | + }; |
| 72 | + |
| 73 | + var htmlProp = { |
| 74 | + 'overflow-x': 'hidden' |
| 75 | + }; |
| 76 | + |
69 | 77 | var bodySlidePrepare = { |
70 | | - transition: 'transform ' + settings.animation_duration + ' ' + settings.animation_curve, |
| 78 | + position: 'relative', // to make overflow-x hidden work with mobile browsers |
71 | 79 | 'overflow-x': 'hidden', |
72 | | - 'overflow-y': 'hidden' |
73 | 80 | }; |
74 | 81 |
|
75 | 82 |
|
|
112 | 119 | var Prop = { |
113 | 120 |
|
114 | 121 | left: { |
115 | | - properties: {top: '0', left: '0', transform: 'translateX(-100%)'}, |
116 | | - activateAnimation: {transform: 'translateX(0)'}, |
117 | | - deactivateAnimation: {transform: 'translateX(-100%)'}, |
| 122 | + properties: function() { |
| 123 | + var left = '-' + $sliiider.width() + 'px'; |
| 124 | + return {top: '0', left: left}; |
| 125 | + }, |
| 126 | + activateAnimation: {transform: 'translateX(100%)'}, |
| 127 | + deactivateAnimation: {transform: 'translateX(0)'}, |
118 | 128 | size: function (wHeight, wWidth) { |
119 | 129 | return {height: wHeight}; |
120 | 130 | } |
121 | 131 | }, |
122 | 132 |
|
123 | 133 | right: { |
124 | | - properties: {top: '0', right: '0', transform: 'translateX(100%)'}, |
125 | | - activateAnimation: {transform: 'translateX(0)'}, |
126 | | - deactivateAnimation: {transform: 'translateX(100%)'}, |
| 134 | + properties: function() { |
| 135 | + var right = '-' + $sliiider.width() + 'px'; |
| 136 | + return {top: '0', right: right}; |
| 137 | + }, |
| 138 | + activateAnimation: {transform: 'translateX(-100%)'}, |
| 139 | + deactivateAnimation: {transform: 'translateX(0)'}, |
127 | 140 | size: function (wHeight, wWidth) { |
128 | 141 | return {height: wHeight}; |
129 | 142 | } |
130 | 143 |
|
131 | 144 | }, |
132 | 145 |
|
133 | 146 | top: { |
134 | | - properties: {top: '0', right: '0', left:'0', transform: 'translateY(-100%)'}, |
135 | | - activateAnimation: {transform: 'translateY(0)'}, |
136 | | - deactivateAnimation: {transform: 'translateY(-100%)'}, |
| 147 | + properties: function() { |
| 148 | + var top = '-' + $sliiider.height() + 'px'; |
| 149 | + return {left: '0', right:'0', top: top}; |
| 150 | + }, |
| 151 | + activateAnimation: {transform: 'translateY(100%)'}, |
| 152 | + deactivateAnimation: {transform: 'translateY(0)'}, |
137 | 153 | size: function (wHeight, wWidth) { |
138 | 154 | return {width: wWidth}; |
139 | 155 | } |
140 | 156 | }, |
141 | 157 |
|
142 | 158 | bottom: { |
143 | | - properties: {bottom: '0', right: '0', left:'0', transform: 'translateY(100%)'}, |
144 | | - activateAnimation: {transform: 'translateY(0)'}, |
145 | | - deactivateAnimation: {transform: 'translateY(100%)'}, |
| 159 | + properties: function() { |
| 160 | + var bottom = '-' + $sliiider.height() + 'px'; |
| 161 | + return {left:0, right:0 , bottom: bottom}; |
| 162 | + }, |
| 163 | + activateAnimation: {transform: 'translateY(-100%)'}, |
| 164 | + deactivateAnimation: {transform: 'translateY(0)'}, |
146 | 165 | size: function (wHeight, wWidth) { |
147 | 166 | return {width: wWidth}; |
148 | 167 | } |
|
172 | 191 |
|
173 | 192 | var siiize = function() { |
174 | 193 | var windowSize = {}; |
| 194 | + var scroll = getScrollBarWidth(); |
175 | 195 | windowSize.height = $(window).height(); |
176 | | - windowSize.width = $(window).width(); |
| 196 | + windowSize.width = $(window).width() + scroll; |
177 | 197 | newSize = Prop[settings.place].size(windowSize.height, windowSize.width); |
178 | 198 | $sliiider.css(newSize); |
| 199 | + $sliiider.css(prefixCSS(Prop[settings.place].properties())); |
179 | 200 | setSlideDistance(); |
180 | 201 | }; |
181 | 202 |
|
|
196 | 217 |
|
197 | 218 | var prepare = function() { |
198 | 219 | $sliiider.css(prefixCSS(prepareProperties)); |
199 | | - $sliiider.css(prefixCSS(Prop[settings.place]["properties"])); |
| 220 | + $sliiider.css(prefixCSS(Prop[settings.place].properties())); |
200 | 221 | setSlideDistance(); |
201 | 222 | }; |
202 | 223 |
|
| 224 | + var getScrollBarWidth = function() { |
| 225 | + var inner = document.createElement('p'); |
| 226 | + inner.style.width = "100%"; |
| 227 | + inner.style.height = "200px"; |
| 228 | + |
| 229 | + var outer = document.createElement('div'); |
| 230 | + outer.style.position = "absolute"; |
| 231 | + outer.style.top = "0px"; |
| 232 | + outer.style.left = "0px"; |
| 233 | + outer.style.visibility = "hidden"; |
| 234 | + outer.style.width = "200px"; |
| 235 | + outer.style.height = "150px"; |
| 236 | + outer.style.overflow = "hidden"; |
| 237 | + outer.appendChild (inner); |
| 238 | + |
| 239 | + document.body.appendChild (outer); |
| 240 | + var w1 = inner.offsetWidth; |
| 241 | + outer.style.overflow = 'scroll'; |
| 242 | + var w2 = inner.offsetWidth; |
| 243 | + if (w1 === w2) { w2 = outer.clientWidth; } |
| 244 | + |
| 245 | + document.body.removeChild (outer); |
| 246 | + |
| 247 | + return (w1 - w2); |
| 248 | + }; |
203 | 249 |
|
204 | 250 | var activate = function() { |
205 | 251 | siiize(); //sets the size of the slider menu and the distance the body will travel on sliding |
206 | 252 | $sliiider.css('visibility','visible'); |
207 | 253 | if(settings.body_slide) |
208 | 254 | { |
209 | 255 | $body.css(prefixCSS(bodySlidePrepare)); |
210 | | - $body.css(prefixCSS(bodySlideProp[settings.place].activateAnimation)); |
| 256 | + $('html').css(htmlProp); |
| 257 | + $body.children().css(prefixCSS(bodyChildrenProp)); |
| 258 | + $body.children().css(prefixCSS(bodySlideProp[settings.place].activateAnimation)); |
211 | 259 | if((ie !== false) && (ie <= 11)) |
212 | 260 | { |
213 | 261 | $sliiider.css(prefixCSS(Prop[settings.place].activateAnimation)); |
|
220 | 268 | var sliiiderHeight = $sliiider.height(); |
221 | 269 | var sliiiderOffsetTop = $sliiider.offset().top; |
222 | 270 |
|
223 | | - if((sliiiderOffsetTop !== scrollTop) && settings.place !== "bottom" && !(ie && ie <= 11 && settings.place ==="top")) |
224 | | - { |
225 | | - $sliiider.css('top', scrollTop); |
226 | | - } |
227 | | - if(((sliiiderOffsetTop !== scrollTop + windowHeight) && (settings.place === "bottom"))) |
228 | | - { |
229 | | - $sliiider.css('top', scrollTop + windowHeight - sliiiderHeight).css('bottom',''); |
230 | | - } |
| 271 | + // if((sliiiderOffsetTop !== scrollTop) && settings.place !== "bottom" && !(ie && ie <= 11 && settings.place ==="top")) |
| 272 | + // { |
| 273 | + // $sliiider.css('top', scrollTop); |
| 274 | + // } |
| 275 | + // if(((sliiiderOffsetTop !== scrollTop + windowHeight) && (settings.place === "bottom"))) |
| 276 | + // { |
| 277 | + // $sliiider.css('top', scrollTop + windowHeight - sliiiderHeight).css('bottom',''); |
| 278 | + // } |
231 | 279 | } |
232 | 280 |
|
233 | 281 | else { |
|
244 | 292 | var hideSlider = function(e) { |
245 | 293 | $sliiider.css('visibility','hidden'); |
246 | 294 | $body.css(bodyResetProp); |
| 295 | + $('html').css(bodyResetProp); |
247 | 296 | $body.unbind('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', hideSlider); |
248 | 297 | prepare(); |
249 | 298 | }; |
|
253 | 302 | $body.one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', hideSlider); |
254 | 303 |
|
255 | 304 | if(settings.body_slide) { |
256 | | - $body.css(prefixCSS(bodySlideProp[settings.place].deactivateAnimation)); |
| 305 | + $body.children().css(prefixCSS(bodySlideProp[settings.place].deactivateAnimation)); |
257 | 306 | if((ie !== false) && (ie <= 11)) |
258 | 307 | {$sliiider.css(prefixCSS(Prop[settings.place].deactivateAnimation));} |
259 | 308 | } |
|
272 | 321 | siiize(); |
273 | 322 | prepare(); |
274 | 323 | $(window).resize(siiize); |
| 324 | + $sliiider.resize(siiize); |
275 | 325 |
|
276 | 326 | var handleToggle = function() { |
277 | 327 | if (!clicked) |
|
296 | 346 | reset: function(name) { |
297 | 347 | $body.one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', deleteProp); |
298 | 348 | deactivate(); |
299 | | - // $body.unbind('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', deleteProp); |
300 | 349 | }, |
301 | 350 | deactivate: function() {deactivate();}, |
302 | 351 | activate: function() {activate();} |
|
0 commit comments