抱歉,这有点牵强,但我最近遇到了需要这种功能的情况。虽然我确信您不再需要这个问题的答案,但我希望我提出的解决方案能对其他人有所帮助。
天哪,为什么会有人这样做?!
在我的特殊情况下,我有一个需要滚动的超长文本字段。根据我的经验,在处理 非常长 文本字段时,通过垂直移动影片剪辑进行滚动是不可靠的,这需要我使用 Adobe/Flash uiscrollbar-esk 方法来调整文本字段的 scrollV .
由于需要从库中提取的内嵌图像(而不是外部来源)以及文本部分周围的黑框边框,这两者都需要滚动,这使情况变得更加复杂连同文字。
简而言之,对于一个完全独立的 swf 和在情有可原的情况下(如制药横幅),人们可能只需要这样做。
从库中插入图片:
要完成此操作,您需要从库中的图像创建一个影片剪辑并将该影片剪辑导出到 Actionscript。然后,在您的代码中,添加如下内容:
//This is a string from your textfield that you will replace with an image
var matchForImageSplit:String = 'IMAGE 1 GOES HERE';
//This is the code to replace the above string
//Here, "Image1" is the class name of the exported MovieClip
var imageToAdd:String = '<img src="Image1" />';
my_text.htmlText = my_text.htmlText.split(matchForImageSplit).join(imageToAdd);
在文本周围添加黑框边框:
这有点棘手。我必须做的是创建一个带有我需要大小的边框的影片剪辑,并为其命名。然后我将它放在应该去的文本后面,并将所有这些都包含在parent_mc 电影剪辑中。
然后我必须对框进行编码以随着滚动而移动。以下是我的具体项目,但这是它的要点:
//THIS CODE IS NON-FUNCTIONAL AND SHOULD ONLY BE USED AS A REFERENCE
//Redundant - just making the example more clear.
var my_text:TextField = parent_mc.my_text;
var borderBox:Sprite = parent_mc.borderBox;
//Vars for calculating position and movement
var borderBoxStartY:Number = borderBox.y;
var incrementRate:Number = my_text.textHeight/my_text.numLines;
var sPos:Number;
var top:Number = dragger.y;
var bottom:Number = (dragger.y + track.height) - dragger.height;
var range:Number = bottom - top;
var ctrl:Number = parent_mc.y; //"parent_mc" is the parent MC that contains the textField and borderBox
function dragScroll():void {
ratio = my_text.maxScrollV/range;
sPos = (dragger.y * ratio) - ctrl;
my_text.scrollV = Math.ceil(sPos);
borderBox.y = ((borderBoxStartY + incrementRate) - (my_text.scrollV * incrementRate));
}
在尝试所有这些之前需要注意的一点是,当使用scrollV 时,文本会逐行移动,因此不会平滑滚动(就像基于位置的滚动一样)。这可能会导致滚动看起来“生涩”。
编辑:
我还应该注意,这都是自定义编程的,实际上并没有使用scrollPane/uiscrollbar 组件,但行为方式相同。