Здравствуйте. Есть задача забацать popup-меню. Все было хорошо до тех пор, пока не дошел до этапа "появись около правого/нижнего края".
Нужно определить, насколько нужно сдвинуть меню, чтобы она поместилась в окно браузера (position: fixed обязателен, увы).
Моя попытка привела вот к таким наброскам:
<polymer-element name="popup-menu">
<template>
<style>
@import url(popup.css);
</style>
<div class="popup {{stateClass}}" style="left:{{x}}px; top:{{y}}px;">
<content></content>
</div>
</template>
<script src="blabla"></script>
</polymer-element>
Polymer({
stateClass:'',
x:0,
y:0,
ready:function() {
var self=this;
this.tabIndex=0;
this.style.outline='none';
this.popup=this.shadowRoot.querySelector('.popup');
this.onshow=function() {
var eh=self.popup.offsetHeight,
ew=self.popup.offsetWidth;
console.log(eh,ew);
eh=window.innerHeight-eh;
ew=window.innerWidth-ew;
if (self._x>ew)
self.x=ew;
else
self.x=self._x;
if (self._y>eh)
self.y=ew;
else
self.y=self_y;
console.log(window.innerHeight,window.innerWidth);
console.log(self.popup.style.top=eh.toString()+'px');
console.log(self.popup.style.left=ew.toString()+'px');
};
this.onblur=function() {
self.hide();
};
},
attributeChanged:function(name,oldV,newV) {
this[name]=newV;
},
//methods
get visible() {
return this.stateClass==='visible';
},
set visible(bool) {
this.stateClass=bool?'visible':'';
if (bool) this.focus();
},
show:function(x,y) {
this.visible=true;
this._x=x;
this._y=y;
},
hide:function() {
this.visible=false;
}
});
Суть проблемы в том, что при срабатывании onshow меню неправильно просчитывает координаты и пропадает за пределы страницы.