avatar/static/js/jx/ext/slides.js

132 lines
3.8 KiB
JavaScript

/**
* This file goes along with slides.css
*/
if(!jx){
var jx = {}
}
jx.slides = {}
/**
*
* @params args:
* main_id main panel
* nav_id control panel
* nav_left left button
* nav_right right button
* data data (array of items)
* renderer point to the function that will render an item in the data
*/
jx.slides.instance = function(args){
this.main_id = args.main_id
this.nav_id = args.nav_id
this.data = args.data
this.nav_left = args.nav_left;
this.nav_right = args.nav_right;
this.enable_auto= args.auto == true
this.handler = null;
this.page = {index:0,count:0};
this.left = function(){
var pane = jx.dom.get.children(this.main_id)[0]
var width = $('#'+this.main_id).width()
// var page = jx.dom.get.attribute('controls','info')
var i = this.page.index
var N = this.page.count
i = ((i+1) < N)? (i+1):0
$(pane).animate({'margin-left':-(width+4)*i})
this.page.index = i
// jx.dom.set.attribute(this.nav_id,'info',page)
}
this.right = function(){
var pane = jx.dom.get.children(this.main_id)[0]
var width = $('#'+this.main_id).width()
// var page = jx.dom.get.attribute('controls','info')
var i = this.page.index
var N = this.page.count
// alert(N)
i = ((i-1) > -1)?(i-1):(N-1) ;
$(pane).animate({'margin-left':-width*i})
this.page.index = i
// jx.dom.set.attribute(this.nav_id,'info',page)
}
this.stop = function(){
if(this.handler != null){
clearInterval(this.handler)
this.handler = null
}
}
this.auto = function(){
if(this.handler == null){
this.handler = setInterval(this.right,2000) }
}
this.bind = function(){
var _ileft = jx.dom.get.instance(this.nav_left)
_ileft.onclick = this.left
_ileft.onmouseover = this.stop
var _iright = jx.dom.get.instance(this.nav_left)
_iright.onclick = this.left
_iright.onmouseover = this.stop
if(this.enable_auto){
_ileft.onmouseout = this.auto
_iright.onmouseout = this.auto
}
}
/**
* This section will handle the initialization
*/
var pane = jx.dom.get.instance('DIV')
var width = $('#'+this.main_id).width()
var height = $('#'+this.main_id).height()
var N = this.data.length
this.page = {index:0,count:N}
// jx.dom.set.attribute(this.nav_id,"info",info)
// jx.dom.set.attribute("controls","page.count",N)
// $(pane).width(width*N)
$(pane).css("width",width*N)
$(pane).height(height)
$(pane).css('overflow','hidden')
jx.dom.set.value(this.main_id,'')
jx.dom.append(this.main_id,pane)
jx.utils.patterns.visitor(this.data,function(item){
console.log(item.constructor.prototype.name)
var frame = jx.dom.get.instance('DIV')
var picframe = jx.dom.get.instance('DIV')
var image = jx.dom.get.instance('IMG')
var info = jx.dom.get.instance('DIV')
image.src = item.src
info.innerHTML = item.text
info.className = 'text'
picframe.appendChild(image)
picframe.className = 'pic-frame'
// $(picframe).height(height-148)
$(frame).css("height",height)
$(frame).css("width",width)
$(frame).css('overflow','hidden')
frame.appendChild(picframe)
frame.appendChild(info)
pane.appendChild(frame)
$(frame).width(width)
$(frame).height(height)
frame.className = 'slides left'
})
if(this.enable_auto){
this.auto()
}
}