UNPKG

zoomla

Version:

16年专业研发|中文alexa排名第一的CMS品牌-基于dotNET core、功能强大,集成站群、微信开发、小程序与ERP及OA办公系统,支持国际语言和多民族语言,世界五百强与大型门户专用高端网站内核CMS系统

229 lines (195 loc) 8.59 kB
/* =========================================================== * jquery.interactive_3d.js v1.1 * =========================================================== * Copyright 2013 Pete Rojwongsuriya. * http://www.thepetedesign.com * * Create a 3D interactive object using images as frames * with one js call * * https://github.com/peachananr/interactive_3d * * ========================================================== */ !function($){ var defaults = { frames: 10, cursor: "move", speed: 0, entrance: true, preloadImages: true, touchSupport: true, loading: "Loading..", autoPlay: false }; function touchHandler(event) { var touch = event.changedTouches[0]; var simulatedEvent = document.createEvent("MouseEvent"); simulatedEvent.initMouseEvent({ touchstart: "mousedown", touchmove: "mousemove", touchend: "mouseup" }[event.type], true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null); touch.target.dispatchEvent(simulatedEvent); } $.fn.preload = function(el) { $("<div class='images_cache'></div>").hide().appendTo(el); this.each(function(){ $('<img/>').attr("src", this).appendTo(".images_cache") }); } $.fn.drags = function(settings) { var $el = this; return $el.css('cursor', settings.cursor).on("mousedown", function(e) { var $drag = $(this).addClass('draggable'), cur_pos = e.pageX, last_position = {}; $drag.parents().on("mousemove", function(e) { if($('.draggable').length > 0) { var src = $el.find("img.main-frame").attr("src"), img_name = src.split('/')[src.split('/').length-1], cur_frame = img_name.split('_')[1].split('.')[0]; if (typeof(last_position.x) != 'undefined') { //get the change from last position to this position var deltaX = last_position.x - e.clientX, deltaY = last_position.y - e.clientY; if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX > 0) { if(cur_frame > 1) { setTimeout(function() { var img_name = src.split('/')[src.split('/').length-1] var directory = src.split('/').slice(0, -1).join("/") var new_frame = directory + "/" + img_name.split('_')[0] + "_" + (parseInt(cur_frame) - 1) + "." + img_name.split('.')[1] $el.find("img.main-frame").attr("src", new_frame) },settings.speed) } else { setTimeout(function() { var img_name = src.split('/')[src.split('/').length-1] var directory = src.split('/').slice(0, -1).join("/") var new_frame = directory + "/" + img_name.split('_')[0] + "_" + (parseInt(settings.frames)) + "." + img_name.split('.')[1] $el.find("img.main-frame").attr("src", new_frame) },settings.speed) } } else if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX < 0) { if(cur_frame < settings.frames) { setTimeout(function() { var img_name = src.split('/')[src.split('/').length-1] var directory = src.split('/').slice(0, -1).join("/") var new_frame = directory + "/" + img_name.split('_')[0] + "_" + (parseInt(cur_frame) + 1) + "." + img_name.split('.')[1] $el.find("img.main-frame").attr("src", new_frame) },settings.speed) } else { setTimeout(function() { var img_name = src.split('/')[src.split('/').length-1] var directory = src.split('/').slice(0, -1).join("/") var new_frame = directory + "/" + img_name.split('_')[0] + "_" + 1 + "." + img_name.split('.')[1] $el.find("img.main-frame").attr("src", new_frame) },settings.speed) } } } last_position = { x : e.clientX, y : e.clientY }; } $(".draggable").on("mouseup", function() { $(this).removeClass('draggable') }); }); e.preventDefault(); // disable selection }).on("mouseup", function() { $(this).removeClass('draggable'); }); } $.fn.interactive_3d = function(options){ var settings = $.extend({}, defaults, options), el = $(this); el.find(" > img").addClass("main-frame"); el.drags(settings), x = 0, step = 100 / parseInt(settings.frames), cur_frame = el.find("img.main-frame").attr("src").split('_')[1].split('.')[0]; function animate_3d() { var src = el.find("img.main-frame").attr("src"); el.find("img.main-frame").css("opacity", (x * step)/100); if(cur_frame < settings.frames) { setTimeout(function() { var img_name = src.split('/')[src.split('/').length-1] var directory = src.split('/').slice(0, -1).join("/") var new_frame = directory + "/" + img_name.split('_')[0] + "_" + (parseInt(cur_frame) + 1) + "." + img_name.split('.')[1] el.find("img.main-frame").attr("src", new_frame) cur_frame = parseInt(cur_frame) + 1; },settings.speed) } else { setTimeout(function() { var img_name = src.split('/')[src.split('/').length-1] var directory = src.split('/').slice(0, -1).join("/") var new_frame = directory + "/" + img_name.split('_')[0] + "_" + 1 + "." + img_name.split('.')[1] el.find("img.main-frame").attr("src", new_frame) cur_frame = 1; },settings.speed) } if (x++ < (settings.frames - 1)) { if (settings.autoPlay != false) { setTimeout(animate_3d, 0); } else { setTimeout(animate_3d, (x * 1.5)); } } } if (settings.entrance == true && settings.autoPlay == false ) { if (settings.loading == false && settings.autoPlay == false) animate_3d(); } if (settings.touchSupport == true) { document.addEventListener("touchstart", touchHandler, true); document.addEventListener("touchmove", touchHandler, true); document.addEventListener("touchend", touchHandler, true); document.addEventListener("touchcancel", touchHandler, true); } if (settings.preloadImages == true) { var src = el.find("img.main-frame").attr("src"); arr = [] for (var i = 1; i < settings.frames + 1; i++) { var img_name = src.split('/')[src.split('/').length-1] var directory = src.split('/').slice(0, -1).join("/") arr.push(directory + "/" + img_name.split('_')[0] + "_" + i + "." + img_name.split('.')[1]) } $(arr).preload(el); if (settings.loading != false) { var imgs = $(".images_cache > img").not(function() { return this.complete; }); var count = imgs.length; el.append("<div class='loading_3d'>" + settings.loading + "</div>"); el.find(".main-frame").css("visibility", "hidden"); if (count) { imgs.load(function() { count--; if (!count) { el.find(".main-frame").css("visibility", "visible"); el.find(".loading_3d").remove(); if (settings.autoPlay == false) animate_3d(); } }); } else { el.find(".main-frame").css("visibility", "visible"); el.find(".loading_3d").remove(); if (settings.autoPlay == false) animate_3d(); } } } if (settings.autoPlay != false) { function intervalTrigger() { return window.setInterval( function() { animate_3d(); }, settings.autoPlay ); }; var id = intervalTrigger(); el.mouseenter(function() { window.clearInterval(id); }).mouseleave(function() { id = intervalTrigger(); }); } } }(window.jQuery);