本实例演示了实现一个滚动条基本功能的制作方法,没有添加改变皮肤,修改滚动条视框大小等功能,有兴趣的朋友可根据自己要求自行添加。使用时只需要通过以下一行代码创建滚动条组件:

var myScrollbar:Scrollbar=new Scrollbar(mc);
addChild(myScrollbar);

其中mc为需要添加滚动条功能的元件,如影片剪辑,文本等。

一、制作元件

滚动条由滑块slider,向上向下滚动的按钮,滚动条背景,遮挡内容的遮罩及存储内容的contMc元素组成。当拖动滑块slider或单击上下按钮时,contMc会上下滚动。制作元件并命名如下:

二、为滚动条的库元件添加链接(如下图所示)

三、链接的类代码

全局变量说明:step为滚动步数,top为slider滑块在最顶端的位置,buttom为滑块在最低端的位置。

 package  {

     import flash.display.MovieClip;
import flash.display.DisplayObject;
import flash.events.Event;
import flash.events.MouseEvent; public class Scrollbar extends MovieClip { private var step:int=5;
private var top:Number;
private var buttom:Number; public function Scrollbar(mc:DisplayObject) {
this.contMc.addChild(mc);
mc.x=0;
mc.y=0;
this.addEventListener(Event.ADDED_TO_STAGE,init);
} private function init(e:Event):void {
top=this.slider.height/2;
buttom=this.back.height-this.slider.height/2;
this.downBtn.addEventListener(MouseEvent.CLICK,downHandler);
this.upBtn.addEventListener(MouseEvent.CLICK,upHandler);
this.slider.addEventListener(MouseEvent.MOUSE_DOWN,sliderDrag);
} private function downHandler(e:MouseEvent):void {
if(this.slider.y<buttom){
this.slider.y+=step;
}
if(this.slider.y>buttom){
this.slider.y=buttom;
}
moveContMc();
} private function upHandler(e:MouseEvent):void {
if(this.slider.y>top){
this.slider.y-=step;
}
if(this.slider.y<top){
this.slider.y=top;
}
moveContMc()
} private function sliderDrag(e:MouseEvent):void {
this.stage.addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler);
this.addEventListener(Event.ENTER_FRAME,enterFrameHandler); } private function mouseUpHandler(e:MouseEvent):void {
this.removeEventListener(Event.ENTER_FRAME,enterFrameHandler);
} private function enterFrameHandler(e:Event):void {
this.slider.y=Math.min(buttom,Math.max(top,this.mouseY));
moveContMc();
} private function moveContMc():void {
this.contMc.y=-(this.contMc.height-this.back.height)*(this.slider.y-top)/buttom;
} }
}

四、moveContMc函数解析:

如下图左示意,当slider滑块由最顶端(top位置)向下移动距离b时,contMc会向上移动距离a。如下图右,当滑块移动到最低端(buttom位置)时,contMc会移动到最顶端,距离为m(值为contMc的高度-遮罩层的高度),由a/b=m/n,可算出a值为m*b/n,即:

this.contMc.y=-(this.contMc.height-this.back.height)*(this.slider.y-top)/buttom;

用as3.0制作一个滚动条组件的更多相关文章

  1. 第2篇:用as3.0制作一个滚动条组件

    本实例演示了实现一个滚动条基本功能的制作方法,没有添加改变皮肤,修改滚动条视框大小等功能,有兴趣的朋友可根据自己要求自行添加.使用时只需要通过以下一行代码创建滚动条组件: var myScrollba ...

  2. 如何从0开发一个Vue组件库并发布到npm

    1.新建文件夹在终端打开执行 npm init -y 生成package.json如下,注意如果要发布到npm,name不能有下划线,大写字母等 { "name": "v ...

  3. 基于vue2.0的一个分页组件

    分页组件在项目中经常要用到之前一直都是在网上找些jq的控件来用(逃..),最近几个项目用上vue了项目又刚好需要一个分页的功能.于是百度发现几篇文章介绍的实在方式有点复杂, 没耐心看自己动手造轮子写了 ...

  4. [ActionScript 3.0] AS3.0 让一个视频无缝循环播放的一个偏方

    一个视频要循环播放,通常的办法都是播放完后再重新播放,但是不可避免的播放结束和重新开始播放这个时间点上会有停顿,如何解决这个问题,说个偏方吧! package com.views { import f ...

  5. 如何从0开发一个Atom组件

    最近用Atom写博客比较多,然后发现一个很严重的问题..没有一个我想要的上传图片的方式,比如某乎上边就可以直接copy/paste文件,然后进行上传.然而在Atom上没有找到类似的插件,最接近的一个, ...

  6. as3.0用了视频组件,导致视频打开后就全屏,加一下代码就行

    myFlv.fullScreenTakeOver = false; fullScreenTakeOver : Boolean 舞台进入全屏模式时,FLVPlayback 组件位于所有内容的顶部并占据整 ...

  7. vue3系列:vue3.0自定义虚拟滚动条V3Scroll|vue3模拟滚动条组件

    基于Vue3.0构建PC桌面端自定义美化滚动条组件V3Scroll. 前段时间有分享一个Vue3 PC网页端弹窗组件,今天带来最新开发的Vue3.0版虚拟滚动条组件. V3Scroll 使用vue3. ...

  8. [0]尝试用Unity3d制作一个王者荣耀(持续更新)->游戏规划

    太得闲了于是想写个农药,虽然可能会失败但是还是要试一试. 因为是自学的不是Unity专业的可能表达语言会有些不标准!望见谅! 结构: 以组件式(比如说摇杆控制和玩家部分的编写是分离的,可以自由拼装)作 ...

  9. 编写Java程序,使用菜单组件制作一个记事本编辑器

    返回本章节 返回作业目录 需求说明: 使用菜单组件制作一个记事本编辑器 实现思路: 创建记事本菜单工具栏JMenuBar. 创建多个菜单条JMenu. 创建多个菜单项JMenuItem. 将菜单添加至 ...

随机推荐

  1. OpenGl 坐标转换 (转载)

    OpenGl 坐标转换 (转载) 1. OpenGL 渲染管线 OpenGL渲染管线分为两大部分,模型观测变换(ModelView Transformation)和投影变换(Projection Tr ...

  2. MySQL常用功能语句分类总结

    C(创建型功能) 创建数据库:CREATE DATABASE 创建用户:CREATE USER 用户名@主机 IDENTIFIED BY 密码; -- 如果想让该用户可以从任意远程主机登陆,可以使用通 ...

  3. linux与unix时间戳互转

    linux与unix时间戳互转 今天在消费kafka数据时遇到了这样一个问题,kafka数据中所有的数据时间戳格式都是unix上时间戳的格式,例如:1505786829101,看到这个时间戳真的是头都 ...

  4. go 编译问题

    golang的编译使用命令 go build , go install;除非仅写一个main函数,否则还是准备好目录结构:GOPATH=工程根目录:其下应创建src,pkg,bin目录,bin目录中用 ...

  5. 窗口与导航-----Selenium快速入门(十三)

    前面所讲的,大部分是WebDriver这个接口以及相关的类的使用.而本文所讲的窗口与导航,也是里面的内容,而且非常简单,目测就能学会. 一.窗口,也就是window,这里的窗口是指浏览器窗口.他的方法 ...

  6. CentOS 7 安装并配置 MySQL 5.6

    Linux使用MySQL Yum存储库上安装MySQL 5.6,适用于Oracle Linux,Red Hat Enterprise Linux和CentOS系统. 1.添加MySQL Yum存储库 ...

  7. C# wpf InkCanvas 保存图片jpg

    前端xaml页面代码 <Window x:Class="WpfApplication6.MainWindow" xmlns="http://schemas.micr ...

  8. Algebraic Kernel ( Arithmetic and Algebra) CGAL 4.13 -User Manual

    1 Introduction Real solving of polynomials is a fundamental problem with a wide application range. T ...

  9. Regular进阶: 跨组件通信

    本文由作者郑海波授权网易云社区发布. 背景 在组件化不断深入的大环境下,无论使用哪种 MDV 框架都最终会遇到一个头疼的问题,就是「跨组件通信」. 下图是个简单的例子 这里包含「事件通信」和「数据通信 ...

  10. BigData – Join中竟然也有谓词下推!?

    本文由  网易云发布. 在之前的文章中简要介绍了Join在大数据领域中的使用背景以及常用的几种算法-broadcast hash join .shuffle hash join以及 sort merg ...