Edit in JSFiddle

<div id='container'>
    <div id='slider'></div>
</div>
<div>Progress <strong id='progress'>0.5</strong></div>
makeSlider()

var project = new can.Observe({progress: 0.5});

var slider = new Slider("#slider",{
    value: project.attr('progress')
})

$("#slider").bind("change",function(){
    project.attr('progress',slider.value() )
})

project.bind("progress",function(ev, newVal){
    slider.value( newVal )
    $("#progress").html(newVal)
});

function makeSlider(){

    Slider = can.Control.extend({
        init: function(){
            this.value(this.options.value)
        },
        "draginit": function(el, ev, drag){
            drag.limit(this.element.parent());
            drag.horizontal();
        },
        "dragmove": function(el, ev, drag){            
            this.element.trigger("change")
        },
        value: function(value){
            if(!arguments.length){
                 var el = this.element,
                     container = el.parent(),
                     sliderOffset = el.offset().left,
                     containerOffset = container.offset().left,
                     sliderWidth = el.outerWidth(),
                     containerWidth = container.width(),
                     delta = 1;
                
                containerOffset +=
                    parseInt( container.css("paddingLeft") ) +
                    parseInt( container.css("borderLeftWidth") )
                
                return ( (sliderOffset-containerOffset ) /
                             (containerWidth - sliderWidth) ) * delta;   
                
            } else {
                var container = this.element.parent(),
                    containerOffset = container.offset().left,
                    sliderWidth = this.element.outerWidth(),
                    containerWidth = container.width(),
                    delta = 1;
                
                containerOffset +=
                    parseInt( container.css("paddingLeft") ) +
                    parseInt( container.css("borderLeftWidth") )
                
                var sliderOffset = containerOffset+
                    ( 	(containerWidth - sliderWidth) * 
                     (value) ) /
                    (delta)
                
                this.element.offset({
                    left: sliderOffset
                })
            }
        }
    });
    
}