代码之家  ›  专栏  ›  技术社区  ›  Maksim Vi.

闪光范围滑块组件

  •  1
  • Maksim Vi.  · 技术社区  · 15 年前

    有类似的东西吗 this flash中的jquery组件,或者有什么现成的关于如何做的例子吗?

    谢谢。

    2 回复  |  直到 15 年前
        1
  •  6
  •   Cameron    15 年前

    我不知道这类的任何内置(或第三方)组件。不过,我相信一定有第三方的存在,但他们不太可能是自由的。

    你可以不用太多麻烦就创建自己的。我已经创建了一个基本的工作版本,如果您需要,可以在此基础上进行构建:

    // Main class, shows how to use other classes:
    
    import flash.display.*;
    import flash.events.*;
    import flash.text.TextField;
    
    
    public class Main extends Sprite
    {
        private var output:TextField;
        private var range:RangeSlider;
    
        public function Main()
        {
            output = new TextField();
            addChild(output);
    
            // SliderImage and ThumbImage are PNGs exported (inheriting from BitmapData) from the fla
            var thumb:SliderThumb = new SliderThumb(new ThumbImage(20, 20), stage);
            range = new RangeSlider(new SliderImage(1, 1), thumb, 100);
    
            range.x = 55;
            range.y = 55;
    
            range.addEventListener(Event.CHANGE, updateOutput);
    
            addChild(range);
    
            updateOutput();
        }
    
        private function updateOutput(e:Event = null):void
        {
            output.text = range.min + ' to ' + range.max;
        }
    }
    

    幻灯片演示类:

    import flash.display.*;
    import flash.events.*;
    import flash.geom.Point;
    
    public class SliderThumb extends Sprite
    {
        private var image:Bitmap;
        private var mouseIsDown:Boolean;
        private var _stage:Stage;
    
        public var min:Number;
        public var max:Number;
    
    
        public function SliderThumb(imageData:BitmapData, _stage:Stage)
        {
            min = max = 0;
    
            this._stage = _stage;
    
            image = new Bitmap(imageData);
            addChild(image);
    
            addEventListener(Event.ADDED_TO_STAGE, init);
        }
    
        private function init(e:Event):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
    
            mouseIsDown = false;
    
            // Center image:
            image.x = -Math.round(image.width / 2);
            image.y = -Math.round(image.height / 2);
    
            addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
            _stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
            _stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMove);
        }
    
        public function clone():SliderThumb
        {
            var clone:SliderThumb = new SliderThumb(image.bitmapData, _stage);
    
            clone.min = min;
            clone.max = max;
    
            return clone;
        }
    
        private function mouseDown(e:MouseEvent):void
        {
            mouseIsDown = true;
        }
    
        private function mouseUp(e:MouseEvent):void
        {
            mouseIsDown = false;
        }
    
        private function mouseMove(e:MouseEvent):void
        {
            if (mouseIsDown) {
                x = parent.globalToLocal(new Point(_stage.mouseX, 0)).x;
    
                if (x < min) {
                    x = min;
                }
                else if (x > max) {
                    x = max;
                }
    
                dispatchEvent(new Event(Event.CHANGE));
            }
        }
    }
    

    RangeSlider类:

    import flash.display.*;
    import flash.events.*;
    import flash.geom.Point;
    
    public class RangeSlider extends Sprite
    {
        private var background:BitmapData;
        private var sliders:Array;
    
        // Background is a one-pixel wide image that will be tiled horizonatally to give the slider its look
        public function RangeSlider(background:BitmapData, slider:SliderThumb, size:Number)
        {
            this.background = background;
    
            slider.min = 0;
            slider.max = size;
            sliders = [slider, slider.clone()];
            for each (slider in sliders) {
                addChild(slider);
                slider.addEventListener(Event.CHANGE, function (e:Event) { dispatchEvent(e); });        // Pass on the CHANGE event
            }
            sliders[1].x = size;
    
            this.size = size;
        }
    
        public function set size(value:Number):void
        {
            // Update background:
            graphics.clear();
            graphics.beginBitmapFill(background);           // Tiles by default
            graphics.drawRect(0, 0, value, background.height);
            graphics.endFill();
        }
    
        // Returns the position of the first slider (from 0 to size):
        public function get min():Number
        {
            return sliders[0].x;
        }
    
        // Returns the position of the second slider (from 0 to size):
        public function get max():Number
        {
            return sliders[1].x;
        }
    }
    
        2
  •  1
  •   merv    13 年前

    如果您愿意导入flex库,那么有几个已经构建的解决方案:

    1. flex 3 mx库具有 slider component that supports two thumbs.
    2. PatrickMowrer制作了一个Flex4火花滑块组件,该组件还实现了多个拇指的选项。然而,我认为目前他仍然有一个 trackHighlight 特性(如jquery ui示例中所示)在他的待办事项列表中。尽管在Flex4皮肤框架中,实现起来并不难。在Github上免费提供: https://github.com/pmowrer/spark-components

    正如我所说,这两个解决方案都需要使用flex库,这意味着额外的开销。不过,它们是有效的“闪存”解决方案。

    推荐文章