mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-30 10:50:08 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			183 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			HTML
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			183 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			HTML
		
	
	
		
			Executable File
		
	
	
	
	
| <script src="jquery.js"></script>
 | |
| 
 | |
| <style>
 | |
| 
 | |
| .field {
 | |
| 	width: auto;
 | |
| 	overflow: visible;
 | |
| }
 | |
| 
 | |
| .ribbon {
 | |
| 	padding: 10px;
 | |
| 	height: 100px;
 | |
| 
 | |
| 	width: auto;
 | |
| 	overflow: visible;
 | |
| 	white-space: nowrap;
 | |
| 	font-size: 0px;
 | |
| }
 | |
| 
 | |
| .image {
 | |
| 	display: inline-block;
 | |
| 	height: 80px;
 | |
| 	width: 80px;
 | |
| 	background: silver;
 | |
| }
 | |
| 
 | |
| .current.image {
 | |
| 	background: gray;
 | |
| }
 | |
| 
 | |
| .unloaded.image {
 | |
| 	opacity: 0.5;
 | |
| }
 | |
| 
 | |
| /* CSS visibility to make the load on the browser less */
 | |
| 
 | |
| .image:nth-child(3) ~ .image {
 | |
| 	background: red;
 | |
| }
 | |
| 
 | |
| </style>
 | |
| 
 | |
| 
 | |
| <div class="field">
 | |
| </div>
 | |
| 
 | |
| <script>
 | |
| 
 | |
| var json = {
 | |
| 	position: 10, 
 | |
| 	ribbons:[
 | |
| 		{
 | |
| 			3: {},
 | |
| 			4: {},
 | |
| 			6: {},
 | |
| 			7: {},
 | |
| 			8: {},
 | |
| 			10: {},
 | |
| 			12: {},
 | |
| 			13: {},
 | |
| 			18: {},
 | |
| 			19: {},
 | |
| 			20: {},
 | |
| 			30: {},
 | |
| 			34: {},
 | |
| 			37: {},
 | |
| 			40: {},
 | |
| 		},
 | |
| 		{
 | |
| 			103: {},
 | |
| 			104: {},
 | |
| 			106: {},
 | |
| 			107: {},
 | |
| 			108: {},
 | |
| 			1010: {},
 | |
| 			1012: {},
 | |
| 			1013: {},
 | |
| 			1018: {},
 | |
| 			1019: {},
 | |
| 			1020: {},
 | |
| 			1030: {},
 | |
| 			1034: {},
 | |
| 			1037: {},
 | |
| 			1040: {},
 | |
| 		},
 | |
| 		{
 | |
| 			203: {},
 | |
| 			204: {},
 | |
| 			206: {},
 | |
| 			207: {},
 | |
| 			208: {},
 | |
| 			2010: {},
 | |
| 			2012: {},
 | |
| 			2013: {},
 | |
| 			2018: {},
 | |
| 			2019: {},
 | |
| 			2020: {},
 | |
| 			2030: {},
 | |
| 			2034: {},
 | |
| 			2037: {},
 | |
| 			2040: {},
 | |
| 		}
 | |
| 	]
 | |
| }
 | |
| 
 | |
| 
 | |
| var LOAD = 5
 | |
| 
 | |
| function enumerate(obj, predicate){
 | |
| 	if(predicate == null){
 | |
| 		predicate = function(o, a){return true}
 | |
| 	}
 | |
| 	var res = []
 | |
| 	for(var k in obj){
 | |
| 		predicate(obj, k) && res.push(k)
 | |
| 	}
 | |
| 	return res
 | |
| }
 | |
| 	
 | |
| 
 | |
| // build an image element...
 | |
| function makeImage(id){
 | |
| 	return $('<div class="image"/>')
 | |
| 			.attr({id: id})
 | |
| 			.mousedown(selectImage)
 | |
| 			.addClass('unloaded')
 | |
| }
 | |
| 
 | |
| function loadJSON(json){
 | |
| 	var field = $('.field')
 | |
| 	var cur_id = json.position+''
 | |
| 	var ribbons = json.ribbons
 | |
| 	var r = Math.floor(LOAD/2)
 | |
| 
 | |
| 	var view_ribbons = $('.ribbon')
 | |
| 
 | |
| 	for(var i=0; i<ribbons.length; i++){
 | |
| 		var images = ribbons[i]
 | |
| 		var index = enumerate(images)
 | |
| 		var ribbon = $('<div class="ribbon"/>').appendTo(field)
 | |
| 		for(var j in images){
 | |
| 			makeImage(j).appendTo(ribbon)
 | |
| 		}
 | |
| 	}
 | |
| 	$('#'+cur_id).mousedown()
 | |
| }
 | |
| 
 | |
| function updateRibbonImages(img, r){
 | |
| 	var images = img.parents('.ribbon').children('.image')
 | |
| 
 | |
| 	var cur_i = images.index(img)
 | |
| 
 | |
| 	// load...
 | |
| 	var loading = $([])
 | |
| 	for(var i=Math.max(0, cur_i-r); i<=Math.min(images.length, cur_i+r); i++){
 | |
| 		loading.push(images[i])
 | |
| 		images[i] = {}
 | |
| 	}
 | |
| 	// do the loading...
 | |
| 	loading.filter('.unloaded')
 | |
| 		.addClass('loaded')
 | |
| 		.removeClass('unloaded')
 | |
| 
 | |
| 	// unload...
 | |
| 	images.filter('.loaded').removeClass('loaded').addClass('unloaded')
 | |
| }
 | |
| 
 | |
| function selectImage(){
 | |
| 	// update view...
 | |
| 	$('.current.image').removeClass('current')
 | |
| 	$(this).addClass('current')
 | |
| 	// update json...
 | |
| 	json.position = $(this).attr('id')
 | |
| 	// update visible images...
 | |
| 	//loadJSON(json)
 | |
| 	updateRibbonImages($('.current.image'), Math.floor(LOAD/2))
 | |
| }
 | |
| 
 | |
| loadJSON(json)
 | |
| 
 | |
| </script>
 | |
| 
 |