• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pike

Scroll com Scroll wheel

13 mensagens neste tópico

Bem eu tnh um projecto a decorrer e precisava saber se alguem me pode ajudar, tenho um scroll que sakei da net que atraves deste codigo:

#initclip 2

// ::: FScrollPaneClass

function FScrollPaneClass() {

this.init();

this.width = this._width;

this.height = this._height;

this._xscale = this._yscale=100;

this.contentWidth = this.contentHeight=0;

if (this.hScroll == undefined) {

this.hScroll = this.vScroll="auto";

this.dragContent = false;

}

this.offset = new Object();

function boolToString(str) {

if (str == "false") {

return false;

}

if (str == "true") {

return true;

} else {

return str;

}

}

this.vScroll = boolToString(this.vScroll);

this.hScroll = boolToString(this.hScroll);

this.attachMovie("FScrollBarSymbol","hScrollBar_mc",100,{hostStyle:this.styleTable});

this.hScrollBar_mc.setHorizontal(true);

this.hScrollBar_mc.setSmallScroll(5);

this.hScrollBar_mc.setChangeHandler("onScroll",this);

this.attachMovie("FScrollBarSymbol","vScrollBar_mc",99,{hostStyle:this.styleTable});

this.vScrollBar_mc.setSmallScroll(5);

this.vScrollBar_mc.setChangeHandler("onScroll",this);

this.setSize(this.width,this.height);

if (this.scrollContent != "") {

this.setScrollContent(this.scrollContent);

}

this.setDragContent(this.dragContent);

}

FScrollPaneClass.prototype = new FUIComponentClass();

Object.registerClass("FScrollPaneSymbol",FScrollPaneClass);

// ::: PUBLIC METHODS

FScrollPaneClass.prototype.getScrollContent = function() {

return this.content_mc;

};

FScrollPaneClass.prototype.getPaneWidth = function() {

return this.width;

};

FScrollPaneClass.prototype.getPaneHeight = function() {

return this.height;

};

FScrollPaneClass.prototype.getScrollPosition = function() {

var xPos = (this.hScrollBar_mc == undefined) ? 0 : this.hScrollBar_mc.getScrollPosition();

var yPos = (this.vScrollBar_mc == undefined) ? 0 : this.vScrollBar_mc.getScrollPosition();

return {x:xPos, y:yPos};

};

FScrollPaneClass.prototype.setScrollContent = function(target) {

this.offset.x = 0;

this.offset.y = 0;

// remove or hide the old movie clip

if (this.content_mc != undefined) {

if (target != this.content_mc) {

this.content_mc._visible = false;

this.content_mc.removeMovieClip();

this.content_mc.unloadMovie();

}

}

// create the movie clip 

if (typeof (target) == "string") {

this.attachMovie(target,"tmp_mc",3);

this.content_mc = this.tmp_mc;

} else if (target == undefined) {

this.content_mc.unloadMovie();

} else {

this.content_mc = target;

}

this.localToGlobal(this.offset);

this.content_mc._parent.globalToLocal(this.offset);

this.content_mc._x = this.offset.x;

this.content_mc._y = this.offset.y;

var contentBounds = this.content_mc.getBounds(this);

this.offset.x = -contentBounds.xMin;

this.offset.y = -contentBounds.yMin;

this.localToGlobal(this.offset);

this.content_mc._parent.globalToLocal(this.offset);

this.content_mc._x = this.offset.x;

this.content_mc._y = this.offset.y;

this.contentWidth = this.content_mc._width;

this.contentHeight = this.content_mc._height;

// set up the mask

this.content_mc.setMask(this.mask_mc);

this.setSize(this.width,this.height);

};

FScrollPaneClass.prototype.setSize = function(w, h) {

if (arguments.length<2 || isNaN(w) || isNaN(h)) {

return;

}

super.setSize(w,h);

this.width = Math.max(w, 60);

this.height = Math.max(h, 60);

this.boundingBox_mc._xscale = 100;

this.boundingBox_mc._yscale = 100;

// adjust the border size

this.boundingBox_mc._width = this.width;

this.boundingBox_mc._height = this.height;

this.setHandV();

this.initScrollBars();

// set up the mask

if (this.mask_mc == undefined) {

this.attachMovie("FBoundingBoxSymbol","mask_mc",3000);

}

this.mask_mc._xscale = 100;

this.mask_mc._yscale = 100;

this.mask_mc._width = this.hWidth;

this.mask_mc._height = this.vHeight;

this.mask_mc._alpha = 0;

};

FScrollPaneClass.prototype.setScrollPosition = function(x, y) {

x = Math.max(this.hScrollBar_mc.minPos, x);

x = Math.min(this.hScrollBar_mc.maxPos, x);

y = Math.max(this.vScrollBar_mc.minPos, y);

y = Math.min(this.vScrollBar_mc.maxPos, y);

this.hScrollBar_mc.setScrollPosition(x);

this.vScrollBar_mc.setScrollPosition(y);

};

FScrollPaneClass.prototype.refreshPane = function() {

this.setScrollContent(this.content_mc);

};

FScrollPaneClass.prototype.loadScrollContent = function(url, handler, location) {

this.content_mc.removeMovieClip();

this.content_mc.unloadMovie();

this.content_mc._visible = 0;

this.loadContent.duplicateMovieClip("loadTemp",3);

this.dupeFlag = true;

this.contentLoaded = function() {

this.loadReady = false;

this.content_mc = this.loadTemp;

this.refreshPane();

this.executeCallBack();

};

this.setChangeHandler(handler,location);

this.loadTemp.loadMovie(url);

};

FScrollPaneClass.prototype.setHScroll = function(prop) {

this.hScroll = prop;

this.setSize(this.width,this.height);

};

FScrollPaneClass.prototype.setVScroll = function(prop) {

this.vScroll = prop;

this.setSize(this.width,this.height);

};

FScrollPaneClass.prototype.setDragContent = function(dragFlag) {

if (dragFlag) {

this.boundingBox_mc.useHandCursor = true;

this.boundingBox_mc.onPress = function() {

this._parent.startDragLoop();

};

this.boundingBox_mc.tabEnabled = false;

this.boundingBox_mc.onRelease = this.boundingBox_mc.onReleaseOutside=function () {

this._parent.pressFocus();

this._parent.onMouseMove = null;

};

} else {

delete this.boundingBox_mc.onPress;

this.boundingBox_mc.useHandCursor = false;

}

};

// A secret public method - wasn't documented or tested, but works.

// see the setSmallScroll method of FScrollBar for details.

FScrollPaneClass.prototype.setSmallScroll = function(x, y) {

this.hScrollBar_mc.setSmallScroll(x);

this.vScrollBar_mc.setSmallScroll(y);

};

// ::: 'PRIVATE' METHODS

FScrollPaneClass.prototype.setHandV = function() {

if ((this.contentHeight-this.height>2 && this.vScroll != false) || this.vScroll == true) {

this.hWidth = this.width-this.vScrollBar_mc._width;

} else {

this.hWidth = this.width;

}

if ((this.contentWidth-this.width>2 && this.hScroll != false) || this.hScroll == true) {

this.vHeight = this.height-this.hScrollBar_mc._height;

} else {

this.vHeight = this.height;

}

};

FScrollPaneClass.prototype.startDragLoop = function() {

this.tabFocused = false;

this.myOnSetFocus();

this.lastX = this._xmouse;

this.lastY = this._ymouse;

this.onMouseMove = function() {

this.scrollXMove = this.lastX-this._xmouse;

this.scrollYMove = this.lastY-this._ymouse;

this.scrollXMove += this.hScrollBar_mc.getScrollPosition();

this.scrollYMove += this.vScrollBar_mc.getScrollPosition();

this.setScrollPosition(this.scrollXMove,this.scrollYMove);

if (this.scrollXMove<this.hScrollBar_mc.maxPos && this.scrollXMove>this.hScrollBar_mc.minPos) {

this.lastX = this._xmouse;

}

if (this.scrollYMove<this.vScrollBar_mc.maxPos && this.scrollYMove>this.vScrollBar_mc.minPos) {

this.lastY = this._ymouse;

}

this.updateAfterEvent();

};

};

FScrollPaneClass.prototype.initScrollBars = function() {

this.hScrollBar_mc._y = this.height-this.hScrollBar_mc._height;

this.hScrollBar_mc.setSize(this.hWidth);

this.hScrollBar_mc.setScrollProperties(this.hWidth,0,this.contentWidth-this.hWidth);

this.vScrollBar_mc._visible = (this.hWidth == this.width) ? false : true;

this.vScrollBar_mc._x = this.width-this.vScrollBar_mc._width;

this.vScrollBar_mc.setSize(this.vHeight);

this.vScrollBar_mc.setScrollProperties(this.vHeight,0,this.contentHeight-this.vHeight);

this.hScrollBar_mc._visible = (this.vHeight == this.height) ? false : true;

};

FScrollPaneClass.prototype.onScroll = function(component) {

var pos = component.getScrollPosition();

var XorY = (component._name == "hScrollBar_mc") ? "x" : "y";

if (component._name == "hScrollBar_mc") {

this.content_mc._x = -pos+this.offset.x;

} else {

this.content_mc._y = -pos+this.offset.y;

}

};

FScrollPaneClass.prototype.myOnKeyDown = function() {

var posX = this.hScrollBar_mc.getScrollPosition();

var posY = this.vScrollBar_mc.getScrollPosition();

if (this.hScrollBar_mc.maxPos>this.hScrollBar_mc.minPos) {

if (Key.isDown(Key.LEFT)) {

trace(Key.isDown);

this.setScrollPosition(posX-3,posY);

} else if (Key.isDown(Key.RIGHT)) {

this.setScrollPosition(posX+3,posY);

}

}

if (this.vScrollBar_mc.maxPos>this.vScrollBar_mc.minPos) {

if (Key.isDown(Key.UP)) {

this.setScrollPosition(posX,posY-3);

} else if (Key.isDown(Key.DOWN)) {

this.setScrollPosition(posX,posY+3);

} else if (Key.isDown(Key.PGDN)) {

this.setScrollPosition(posX,posY+this.vScrollBar_mc.pageSize);

} else if (Key.isDown(Key.PGUP)) {

this.setScrollPosition(posX,posY-this.vScrollBar_mc.pageSize);

}

}

mouseListener = new Object();

mouseListener.onMouseWheel = function(delta) {

this.scrollXMove += delta;

trace(delta);

this.scrollYMove += delta;

};

Mouse.addListener(mouseListener);

};

#endinitclip

this.deadPreview._visible = false;

mas não o consigo por a funcionar pela scroll wheel do rato aka rodinha do rato xD, alguem me pode ajudar?!

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Oi,

Pike, o Scroll que sacas-te da Net, incluia esse código ou tu é que o criaste ? Onde é que puses-te esse código ? O Scroll funciona com o arrastar do rato sobre a Scroll ? O objecto Scroll está como MovieClip ?

EDIT: Se não te importares podes, dar-me o link para fazer download da Scroll para testar com esse código, para ver melhor o que se passa.

Cumps :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem é facil o codigo que postei era o que sakei da net não criei nada nele e ele cria um componente scroll no flash, sim funciona cm o arrastar do rato, o object scrol não sei se soubesse metia-o linkado a classe scrollwheel!

ja meto aqui o link disso pera ai...

LINK

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Oi,

Pike, já vi o Link que me deste, o criador do Post dá um Link do exemplo em Flash (.fla), ao qual eu queria ter acesso para entender melhor, mas o que acontece é que o link dá erro ao abrir :P

EDIT: Tens esse ficheiro disponivel ? Usas-te qualquer Scroll ou usas-te alguma personalizada ?

Cumps :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esse código é bastante antigo, se puderes disponibilizar um fla ajudava.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Usei sempre esse componente ou classe, segundo me entendo disto é uma componente que fica embebido dentro do swf que faz o scroll a questão é que não o consigo por com o scroll wheel, visto não puder disponibilizar o que estou a usar por motivos profissionais vou recriar um com a mesma estrutura para disponibilizar aqui.

Cumprimentos  :shocking:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aquando da inicialização do component tens de adicionar um listener à classe Mouse.

Quando o evento ocorre retiras o valor actual de scroll e defines o novo valor com o delta que é a deslocação da roda, mas apenas se o rato estiver por cima da instância.

#initclip 2

// ::: FScrollPaneClass

function FScrollPaneClass()
{
var lstnr:Object = new Object();
var thisRef:Object = this;
lstnr.onMouseWheel = function(delta:Number):Void{
	if(thisRef.hitTest(_xmouse,_ymouse)){
		var pos:Object = thisRef.getScrollPosition();
		thisRef.setScrollPosition(pos.x, pos.y-delta);
	}
}

Mouse.addListener(lstnr);

this.init();
(...)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

És Grande meu :) totalmente resolvido muito obrigado, já andava farto de tentar resolver isso sabia que tinha de usar um listener mas não sabia onde o usar nem como o por a funcionar era algo totalmente desconhecido para mim.

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Falei cedo demais, agora não percebo porque da me erros de sintaxe devido a "{" mas tenho o código todo bem estruturado a única diferença do outro documento e que este é outro ficheiro de resto tem o mesmo componente! Alguma ideia??!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Provavelmente esqueceste-te de fechar um bloco algures "}".

Verifica algures nas linhas adjacente onde o compilador detectou o erro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas é estranho eu ja o pus a trabalhar num documento quando faço copy e paste do mesmo codigo para outro ficheiro ele da me erro de sintax, diz que falta "{" não consigo solucionar....

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sem ver vai ser complicado.

Não consegues ir lá pelas linhas que o compilador dá o erro?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora