Просмотр полной версии : ComboBox и прокрутка броузера
столкнулся с проблемой:
есть флеш высота его меняется в зависимости от действий, соотвественно в броузере появляется полоса прокрутки. Если не использовать комбобокс покрутка мышью страницы работает нормально, как только добавляю комбобокс прокрутка работает только один раз при первой загрузке (как только фокус перемещается на флеш колесо перестает работать как прокрутка страницы. )
Есть идеи как решить проблему? (Писать свой комбобокс не предлагать.)
Убить обработчик onMouseWheel (хаком).
Убить обработчик onMouseWheel (хаком).
а можно пояснить что значит хаком?
Это значит в рантайме изменить поведение комбобокса.
спасибо за ответы, но честно говоря как я не ковырялся так и не смог решить эту проблему, можно попросить конкретизировать, если не трудно, что именно надо сделать с объектом, перебрал вроде все возможные варианты (((
Я думаю, что ломать придется долго и нудно, потому как подписка на onMouseWheel наверняка засунута очень далеко. Т.е. вывод: либо потратить довольно значительное время на разбор работы компонентов, либо писать свой.
Я думаю, что ломать придется долго и нудно, потому как подписка на onMouseWheel наверняка засунута очень далеко. Т.е. вывод: либо потратить довольно значительное время на разбор работы компонентов, либо писать свой.
да видимо писать придется свой, разбирать я ее пытался но там черт ногу сломит (((
Ну хак оказался простым. Возможно, сработает:
_global.__SVMouseWheelManager = {};
пробовал не оказывает никакого действия, действие с колесом мышы встречается только в ScrollView.as, и то там пара строк кода... а такие последствия ))
вот, еще вариант:
intrinsic class mx.core.ScrollView extends mx.core.View
{
public var MASK_DEPTH:Number;
public function ScrollView();
public var __hPosition:Number;
public var __hScrollPolicy:String;
public var __maxHPosition:Number;
public function __onMouseWheel(delta:Number, scrollTarget:MovieClip):Void;
- исходник комбобокса. Просто закомментить выделенную строчку и перекомпилировать компонент.
wvxvw, это ничего не даст.
Я бы ещё попробовал SystemManager отписать от Mouse (чревато).
почему же, у меня перестал скролится по движеню колесика? Или не этого надо добиться?
При наличии компонентов перестает работать скролл браузера и, судя по всему, при удалении обработчика продолжает неработать. На мой взгляд, лучше предотвратить подписку, чем убивать сам обработчик.
Попробуй ещё:
Mouse.removeListener(mx.managers.SystemManager);
так действительно появляется скролл с нереальными правда тормозами и до тех пор пока не воспользуешься комбобоксом.. после этого умирает
Значит там что-то ещё подписывается на скролл.
Я даже знаю, что именно.
Можно ещё попробовать:
mx.controls.ComboBox.prototype.getDropdown = function() {
if (this.initializing) {
return undefined;
}
if (!this.hasDropdown()) {
var o = new Object();
o.styleName = this;
if (this.dropdownBorderStyle != undefined) {
o.borderStyle = this.dropdownBorderStyle;
}
o._visible = false;
this.__dropdown = mx.managers.PopUpManager.createPopUp(this, mx.controls.List, false, o, false);
this.__dropdown.scroller.mask.removeMovieClip();
if (this.dataProvider == undefined) {
this.dataProvider = new Array();
}
this.__dropdown.setDataProvider(this.dataProvider);
this.__dropdown.selectMultiple = false;
this.__dropdown.rowCount = this.__rowCount;
this.__dropdown.selectedIndex = selectedIndex;
this.__dropdown.vScrollPolicy = "auto";
this.__dropdown.labelField = this.__labelField;
this.__dropdown.labelFunction = this.__labelFunction;
this.__dropdown.owner = this;
this.__dropdown.changeHandler = this._changeHandler;
this.__dropdown.scrollHandler = this._scrollHandler;
this.__dropdown.itemRollOverHandler = this._itemRollOverHandler;
this.__dropdown.itemRollOutHandler = this._itemRollOutHandler;
this.__dropdown.resizeHandler = this._resizeHandler;
this.__dropdown.mouseDownOutsideHandler = function(eventObj) {
var o = this.owner;
var pt = new Object();
pt.x = o._root._xmouse;
pt.y = o._root._ymouse;
o._root.localToGlobal(pt);
if (o.hitTest(pt.x, pt.y, false)) {
// do nothing
} else if (!o.wrapDownArrowButton && this.owner.downArrow_mc.hitTest(_root._xmouse, _root._ymouse, false)) {
// do nothing
} else {
o.displayDropdown(false);
}
};
this.__dropdown.onTweenUpdate = function(v) {
this._y = v;
};
this.__dropdown.setSize(this.__dropdownWidth, this.__dropdown.height);
// Create the mask that keeps the dropdown listbox only visible below the textfield.
this.createObject("BoundingBox", "mask", 20);
this.mask._y = border_mc.height;
this.mask._width = this.__dropdownWidth;
this.mask._height = this.__dropdown.height;
this.mask._visible = false;
this.__dropdown.setMask(this.mask);
}
return this.__dropdown;
};
Mouse.removeListener(mx.managers.SystemManager);
_global.__SVMouseWheelManager = {};
_root.createEmptyMovieClip('__mouseDownClip1222', -1222).onMouseDown = mx.utils.Delegate.create(mx.managers.SystemManager,mx.managers.SystemManager.onMouseDown);
Не забыть убрать старые хаки.
__etc
спасибо огромное за помощь, хотя вышло и полурешение но без Вас не справился бы, буду смотреть в сторону отписок.
Я только что отредактировал пост. Вроде больше подписок нет, пробуй.
Фантатстика все заработало как надо! !!
Только со скроллом можно попрощаться.
мне он в данном случае не нужен совершенно, а вот отсутвие прокрутки документа огромный минус, который ввел меня в ступор на пару дней )) Еще раз ОГРОМНОЕ спасибо.
Огромное спасибо, тоже столкнулся с этой проблемой и Ваш код все преобразил! Тока я пока еще так себе в actionscript и не понимаю волшебных строк этого кода, но все равно еще раз спасибо!)). Жалко теперь combobox не закрывает список пока не был выбран элемент (раньше можно было просто щелкнуть где-нить по флешке и список убирался). Но это небольшая потеря)))
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.