css.css" type="text/css" rel="stylesheet" />
.graphical-sort{ position: relative; width: 100%; height: 100%; padding-top: 40px; }
.graphical-sort .bars-container{ height: 100%; background: #222; white-space: nowrap; overflow: hidden; }
.graphical-sort .bars-container span{ display: inline-block; position: relative; height: 100%; background: #35bddb; border-left: 1px solid #222;
-webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; }
.graphical-sort .bars-container span.highlight{ background: #aee496; }
.graphical-sort .controller{ position: absolute; font-size: 10px; white-space: nowrap; overflow: visible; top: 0px; } .graphical-sort .controller .widget{ margin-right: 5px; }
.graphical-sort .controller .speed-amount{ display: inline-block; }
.graphical-sort .controller .speed-slider{ display: inline-block; }
// ----------------------------------------- // utils // ----------------------------------------- jquery.fn.swap = function(b){ b = jquery(b)[0]; var a = this[0]; var temp = a.parentnode.insertbefore(document.createtextnode(''), a); b.parentnode.insertbefore(a, b); temp.parentnode.insertbefore(b, temp); temp.parentnode.removechild(temp); return this; }
array.prototype.insert = function(value, index){ var array = this for(var i = array.length - 1; index array[i + 1] = array[i] } array[index] = value }
array.prototype.insertbefore = function(from, to){ this.insert(this[from], to) if(to from += 1 } this.splice(from, 1) } array.prototype.swap = function(a, b){ var temp = this[a] this[a] = this[b] this[b] = temp }
function range(min, max){ var array = [] while(min array.push(min) min++ } return array }
function randrange(min, max){ return math.floor(math.random() * (max - min)) + min }
function shuffle(array){ var length = array.length for(var i = 0; i var j = randrange(0, length) var temp = array[i] array[i] = array[j] array[j] = temp } return array }
window.profile = { nowprofiling: false, start: function(name){ if(profile === false) return if(this.nowprofiling){ console.profileend() } this.nowprofiling = true console.profile(name) }, end: function(){ if(profile === false) return this.nowprofiling = false console.profileend() } }
// ----------------------------------------- // queue class // ----------------------------------------- var queue = class.$extend({ __init__: function(){ this.length = 0 this.i = 0 this.queue = [] }, get: function(){ if(this.length === 0) return undefined this.length-- return this.queue[this.i++] }, put: function(value){ this.queue.push(value) this.length++ } })
// ----------------------------------------- // controller class // ----------------------------------------- controller = class.$extend({ widget: $(""), reset: $.noop, onspeedchange: $.noop, onlengthchange: $.noop, __init__: function(defaults){ this.element = $("
_createrestartbutton: function(){ var self = this var button = $("重新演示").button().click(function(){ self.restart() }) return this.widget.clone().append(button) }, _createspeedslider: function(defaultspeed){ var self = this var amount = $("").text(defaultspeed) var slider = $("") slider.slider({ min: 1, max: 300, value: defaultspeed, slide: function(event, ui){ amount.text(ui.value) self.onspeedchange(ui.value) } })
var sliderwrapper = $("").append(amount).append(slider) return this.widget.clone().text("演示速度: ").append(sliderwrapper) }, _createlengthbuttonset: function(defaultlength){ var self = this var buttonset = this.widget.clone().addclass("length-button") var radioname = "graphical-sort-radio" var _label = $("") var _radio = $("").attr("name", radioname) $.each([5, 10, 30, 50, 100, 200], function(i, length){ var label = _label.clone().text(length + "个排序").attr("for", radioname + length) var radio = _radio.clone().attr("id", radioname + length).val(length) buttonset.append(label).append(radio) }) buttonset.find("input[value=" + defaultlength + "]").attr("checked", "checked") buttonset.buttonset() buttonset.click(function(event, ui){ self.onlengthchange(parseint(event.target.value)) }) return buttonset } }) // ----------------------------------------- // bar class // ----------------------------------------- var bar = class.$extend({ __init__: function(value){ this.value = value }, createelement: function(){ var bar = $("") return bar } })
// ----------------------------------------- // bars class // ----------------------------------------- var bars = class.$extend({ __init__: function(length, container){ this.length = length this.container = container this.bars = [] var values = this.values = shuffle(range(1, length+1)) for(var i = 0; i this.bars[i] = bar(values[i]) } this.elements = this._createelements() },
swap: function(a, b, command){ var classname = "highlight" var elements = this.container.find("span") elements.removeclass(classname) var bara = elements.eq(a) var barb = elements.eq(b) bara[0].classname = barb[0].classname = classname if(command === c.swap){ barb.swap(bara) } }, insert: function(from, to){ var elements = this.container.find("span").removeclass("highlight") this.container[0].insertbefore(elements.eq(from).addclass("highlight")[0], elements[to]) }, _createelements: function(){ var elements = $() var length = this.length $.each(this.bars, function(){ var bar = this var element = bar.createelement() element.css("width", 100 / length + "%") element.css("height", bar.value / length * 100 + "%") elements = elements.add(element) }) return elements } })
var command = class.$extend({ __classvars__: { highlight: "highlight", swap: "swap", insert: "insert", set: "set" } }) var c = command
// ----------------------------------------- // graphicalsort class // ----------------------------------------- graphicalsort = class.$extend({ length: 30, // default list length speed: 100, // default speed currenttaskid: -1, __init__: function(){}, // graphical api compare: function(a, b){ var command = c.highlight if(this.values[a] > this.values[b]){ this.values.swap(a, b) command = c.swap } this.task.put([a, b, command]) }, // graphical api highlight: function(a, b){ this.task.put([a, b, c.highlight]) }, // graphical api swap: function(a, b){ this.values.swap( a, b) this.task.put([a, b, c.swap]) }, // graphical api insertbefore: function(from, to){ this.values.insertbefore(from, to) this.task.put([from, to, c.insert]) }, show: function(viewelement){ if(this.sortfunc === undefined){ throw error("sort function is undefined") } this.$sort = $("
_inittask: function(){ this.task = queue() this.sortfunc() }, _next: function(){ var order = this.task.get() if(order === undefined){ this.complete() return } var command = order[2] if(command === c.insert){ this.bars.insert(order[0], order[1]) }else{ this.bars.swap(order[0], order[1], command) }
this._settimeout() }, _settimeout: function(){ var self = this var interval = 2000 / this.speed this.currenttaskid = settimeout(function(){ self._next() }, interval) } })
})()
塞尔达传说智慧的再现巨大棉花糖挑战攻略
塞尔达传说智慧的再现找出咕兹挑战攻略
说明专业知识知识的重要性的句子精选129句
塞尔达传说智慧的再现传说中的德库蛇攻略
塞尔达传说智慧的再现唤来雨水的叫声攻略
塞尔达传说智慧的再现快来陪我玩攻略
暴风雪俱乐部
gogh
石器大陆
疯狂之冠汉化版
模拟小镇
模拟小镇是一款模拟经营类手游,玩家在游戏中需要经营自己的店铺
山羊模拟器太空废物官方版
山羊模拟器太空废物是好玩的模拟手游,游戏以太空为主题,玩家在
紧急城市救护车
真实摩托车竞赛玩起来特别带劲,里头摩托车种类不少,每台车手感
模拟极限越野
模拟极限越野开着大巴在各种奇葩路况里送乘客。山路弯道多得让人
模拟火车
模拟火车让你当回真正的火车司机,得先学会看信号灯、操作控制杆