Kuruki
29.05.2009, 18:03
Привет!
Сделал менюшку, в которой элементы передвигаются горизонтально относительно мыши
import mx.transitions.easing.Regular;
import gs.*;
var imagesAmount:Number = 30; // Кол-во картинок
var imageWidth:Number = 145; // Ширина картинки
var spaceWidth:Number = 10; // Ширина пробела
this.createEmptyMovieClip("nav_mc", this.getNextHighestDepth());
this.nav_mc._y = 6;
for (var counter:Number = 1; counter <= imagesAmount; counter++)
{
this.nav_mc.attachMovie("image", "image" + counter, this.nav_mc.getNextHighestDepth());
this.nav_mc["image" + counter]._x = (counter - 1) * (imageWidth + spaceWidth);
this.nav_mc["image" + counter]._txt.text = counter;
}
this.onMouseMove = moveNav;
function moveNav():Void
{
// Макс _х. При котором становится виден последний элемент
var xMax:Number = -(this.nav_mc._width - Stage.width);
// Коэффициент.
// Когда мышка в правом углу (к = 1) полностью виден последний элемент
// Когда в левом углу (к = 0) полностью виден первый элемент
var k:Number = _root._xmouse / Stage.width;
var nextX:Number = xMax * k;
TweenMax.to(this.nav_mc, 1, {_x: nextX, ease: Regular.easeOut});
updateAfterEvent();
}
Все работает правильно, но есть неудобство: чтобы полностью увидеть первый или последний элементы, нужно переместить мышь до конца влево или вправо соответственно. Я хочу сделать немного поменьше "ход" мыши, скажем на 20 пикселей справа и слева, но при этом, чтобы на координате 20 и Stage.width-20 был уже полностью виден первый или последний элемент соответственно, и еще при этом независимо от кол-ва элементов, в чем вся сложность.
Пробовал прибавлять 20 увеличивать и уменьшать на 20 координату элементов, когда мышь соответственно левее/правее центра, но такой вариант не устраивает, т.к. когда мышь проходит центр будет наблюдаться резкий скачок элементов.
Пробовал делать отступы у nav_mc справа и слева, но не могу рассчитать ширину этого отступа, т.к. он зависит от кол-ва картинок.
Как его рассчитать или есть другие варианты?
Сделал менюшку, в которой элементы передвигаются горизонтально относительно мыши
import mx.transitions.easing.Regular;
import gs.*;
var imagesAmount:Number = 30; // Кол-во картинок
var imageWidth:Number = 145; // Ширина картинки
var spaceWidth:Number = 10; // Ширина пробела
this.createEmptyMovieClip("nav_mc", this.getNextHighestDepth());
this.nav_mc._y = 6;
for (var counter:Number = 1; counter <= imagesAmount; counter++)
{
this.nav_mc.attachMovie("image", "image" + counter, this.nav_mc.getNextHighestDepth());
this.nav_mc["image" + counter]._x = (counter - 1) * (imageWidth + spaceWidth);
this.nav_mc["image" + counter]._txt.text = counter;
}
this.onMouseMove = moveNav;
function moveNav():Void
{
// Макс _х. При котором становится виден последний элемент
var xMax:Number = -(this.nav_mc._width - Stage.width);
// Коэффициент.
// Когда мышка в правом углу (к = 1) полностью виден последний элемент
// Когда в левом углу (к = 0) полностью виден первый элемент
var k:Number = _root._xmouse / Stage.width;
var nextX:Number = xMax * k;
TweenMax.to(this.nav_mc, 1, {_x: nextX, ease: Regular.easeOut});
updateAfterEvent();
}
Все работает правильно, но есть неудобство: чтобы полностью увидеть первый или последний элементы, нужно переместить мышь до конца влево или вправо соответственно. Я хочу сделать немного поменьше "ход" мыши, скажем на 20 пикселей справа и слева, но при этом, чтобы на координате 20 и Stage.width-20 был уже полностью виден первый или последний элемент соответственно, и еще при этом независимо от кол-ва элементов, в чем вся сложность.
Пробовал прибавлять 20 увеличивать и уменьшать на 20 координату элементов, когда мышь соответственно левее/правее центра, но такой вариант не устраивает, т.к. когда мышь проходит центр будет наблюдаться резкий скачок элементов.
Пробовал делать отступы у nav_mc справа и слева, но не могу рассчитать ширину этого отступа, т.к. он зависит от кол-ва картинок.
Как его рассчитать или есть другие варианты?