(function($) { $.fn.slider = function(options, flag) { var event = window.navigator.mspointerenabled ? 2 : "ontouchend" in document ? 3 : 1; if (window.debug && console) { console.log(event) } function call(f, scope, args) { if (typeof f === "function") { f.call(scope, args) } } var percentage = {to: function(range, value) { value = range[0] < 0 ? value + math.abs(range[0]) : value - range[0]; return(value * 100) / this._length(range) }, from: function(range, value) { return(value * 100) / this._length(range) }, is: function(range, value) { return((value * this._length(range)) / 100) + range[0] }, _length: function(range) { return(range[0] > range[1] ? range[0] - range[1] : range[1] - range[0]) }}; function correct(proposal, slider, handle) { var setup = slider.data("setup"), handles = setup.handles, settings = setup.settings, pos = setup.pos; proposal = proposal < 0 ? 0 : proposal > 100 ? 100 : proposal; if (settings.handles == 2) { if (handle.is(":first-child")) { var other = parsefloat(handles[1][0].style[pos]) - settings.margin; proposal = proposal > other ? other : proposal } else { var other = parsefloat(handles[0][0].style[pos]) + settings.margin; proposal = proposal < other ? other : proposal } } if (settings.step) { var per = percentage.from(settings.range, settings.step); proposal = math.round(proposal / per) * per } return proposal } function client(f) { try { return[(f.clientx || f.originalevent.clientx || f.originalevent.touches[0].clientx), (f.clienty || f.originalevent.clienty || f.originalevent.touches[0].clienty)] } catch (e) { return["x", "y"] } } function place(handle, pos) { return parsefloat(handle[0].style[pos]) } var defaults = {handles: 1, serialization: {to: ["", ""], resolution: 0.01}}; methods = {create: function() { return this.each(function() { function sethandle(handle, to, slider) { handle.css(pos, to + "%").data("input").val(percentage.is(settings.range, to).tofixed(res)) } var settings = $.extend(defaults, options), handlehtml = "
", slider = $(this).data("_isns_", true), handles = [], pos, orientation, classes = "", num = function(e) { return !isnan(parsefloat(e)) && isfinite(e) }, split = (settings.serialization.resolution = settings.serialization.resolution || 0.01).tostring().split("."), res = split[0] == 1 ? 0 : split[1].length; settings.start = num(settings.start) ? [settings.start, 0] : settings.start; $.each(settings, function(a, b) { if (num(b)) { settings[a] = parsefloat(b) } else { if (typeof b == "object" && num(b[0])) { b[0] = parsefloat(b[0]); if (num(b[1])) { b[1] = parsefloat(b[1]) } } } var e = false; b = typeof b == "undefined" ? "x" : b; switch (a) { case"range": case"start": e = b.length != 2 || !num(b[0]) || !num(b[1]); break; case"handles": e = (b < 1 || b > 2 || !num(b)); break; case"connect": e = b != "lower" && b != "upper" && typeof b != "boolean"; break; case"orientation": e = (b != "vertical" && b != "horizontal"); break; case"margin": case"step": e = typeof b != "undefined" && !num(b); break; case"serialization": e = typeof b != "object" || !num(b.resolution) || (typeof b.to == "object" && b.to.length < settings.handles); break; case"slide": e = typeof b != "function"; break } if (e && console) { console.error("bad input for " + a + " on slider:", slider) } }); settings.margin = settings.margin ? percentage.from(settings.range, settings.margin) : 0; if (settings.serialization.to instanceof jquery || typeof settings.serialization.to == "string" || settings.serialization.to === false) { settings.serialization.to = [settings.serialization.to] } if (settings.orientation == "vertical") { classes += "vertical"; pos = "top"; orientation = 1 } else { classes += "horizontal"; pos = "left"; orientation = 0 } classes += settings.connect ? settings.connect == "lower" ? " connect lower" : " connect" : ""; slider.addclass(classes); for (var i = 0; i < settings.handles; i++) { handles[i] = slider.append(handlehtml).children(":last"); var setto = percentage.to(settings.range, settings.start[i]); handles[i].css(pos, setto + "%"); if (setto == 100 && handles[i].is(":first-child")) { handles[i].css("z-index", 2) } var bind = ".slider", onevent = (event === 1 ? "mousedown" : event === 2 ? "mspointerdown" : "touchstart") + bind + "x", moveevent = (event === 1 ? "mousemove" : event === 2 ? "mspointermove" : "touchmove") + bind, offevent = (event === 1 ? "mouseup" : event === 2 ? "mspointerup" : "touchend") + bind; handles[i].find("div").on(onevent, function(e) { $("body").bind("selectstart" + bind, function() { return false }); if (!slider.hasclass("disabled")) { $("body").addclass("touch"); var handle = $(this).addclass("active").parent(), unbind = handle.add($(document)).add("body"), originalposition = parsefloat(handle[0].style[pos]), originalclick = client(e), previousclick = originalclick, previousproposal = false; $(document).on(moveevent, function(f) { f.preventdefault(); var currentclick = client(f); if (currentclick[0] == "x") { return } currentclick[0] -= originalclick[0]; currentclick[1] -= originalclick[1]; var movement = [previousclick[0] != currentclick[0], previousclick[1] != currentclick[1]], proposal = originalposition + ((currentclick[orientation] * 100) / (orientation ? slider.height() : slider.width())); proposal = correct(proposal, slider, handle); if (movement[orientation] && proposal != previousproposal) { handle.css(pos, proposal + "%").data("input").val(percentage.is(settings.range, proposal).tofixed(res)); call(settings.slide, slider.data("_n", true)); previousproposal = proposal; handle.css("z-index", handles.length == 2 && proposal == 100 && handle.is(":first-child") ? 2 : 1) } previousclick = currentclick }).on(offevent, function() { unbind.off(bind); $("body").removeclass("touch"); if (slider.find(".active").removeclass("active").end().data("_n")) { slider.data("_n", false).change() } }) } }).on("click", function(e) { e.stoppropagation() }) } if (event == 1) { slider.on("click", function(f) { if (!slider.hasclass("disabled")) { var currentclick = client(f), proposal = ((currentclick[orientation] - slider.offset()[pos]) * 100) / (orientation ? slider.height() : slider.width()), handle = handles.length > 1 ? (currentclick[orientation] < (handles[0].offset()[pos] + handles[1].offset()[pos]) / 2 ? handles[0] : handles[1]) : handles[0]; sethandle(handle, correct(proposal, slider, handle), slider); call(settings.slide, slider); slider.change() } }) } for (var i = 0; i < handles.length; i++) { var val = percentage.is(settings.range, place(handles[i], pos)).tofixed(res); if (typeof settings.serialization.to[i] == "string") { handles[i].data("input", slider.append('').find("input:last").val(val).change(function(a) { a.stoppropagation() })) } else { if (settings.serialization.to[i] == false) { handles[i].data("input", {val: function(a) { if (typeof a != "undefined") { this.handle.data("nouival", a) } else { return this.handle.data("nouival") } }, handle: handles[i]}) } else { handles[i].data("input", settings.serialization.to[i].data("handlenr", i).val(val).change(function() { var arr = [null, null]; arr[$(this).data("handlenr")] = $(this).val(); slider.val(arr) })) } } } $(this).data("setup", {settings: settings, handles: handles, pos: pos, res: res}) }) }, val: function() { if (typeof arguments[0] !== "undefined") { var val = typeof arguments[0] == "number" ? [arguments[0]] : arguments[0]; return this.each(function() { var setup = $(this).data("setup"); for (var i = 0; i < setup.handles.length; i++) { if (val[i] != null) { var proposal = correct(percentage.to(setup.settings.range, val[i]), $(this), setup.handles[i]); setup.handles[i].css(setup.pos, proposal + "%").data("input").val(percentage.is(setup.settings.range, proposal).tofixed(setup.res)) } } }) } else { var handles = $(this).data("setup").handles, re = []; for (var i = 0; i < handles.length; i++) { re.push(parsefloat(handles[i].data("input").val())) } return re.length == 1 ? re[0] : re } }, disabled: function() { return flag ? $(this).addclass("disabled") : $(this).removeclass("disabled") }}; var $_val = jquery.fn.val; jquery.fn.val = function() { return this.data("_isns_") ? methods.val.apply(this, arguments) : $_val.apply(this, arguments) }; return options == "disabled" ? methods.disabled.apply(this) : methods.create.apply(this) } })(jquery); (function($) { $.fn.videoplayer = function(extras) { var playergui = "#" + $(this).attr('id'); var playerid = "#" + $(this).find('.videoplayer').attr('id'); try { var settings = $.parsejson($(this).find('.playerdata').text()); } catch (err) { console.log('json parse error, fall back to js!'); var settings = extras; } if(!settings){ console.log('jplayer clean skin listen error!'); return; } // add by bian_hongjun 2016-12-05 $(this).find('.playerdata').remove(); $(this).append('
' + settings.name + '
00:00
00:00
音量: 50
'); if ($(this).hasclass('audioplayer')) { $(this).find('.fullscreen').remove(); $(this).find('.fullscreenoff').remove(); } createplayer(playergui, playerid, settings, extras); } function createplayer(playergui, mainplayer, settings, extras) { // get supplied media from media array var supplied = new array; $.each(settings.media, function(key, value) { if (key != 'poster') { supplied.push(key); } }); formats = supplied.join(', '); var options = { ready: function() { $(this).jplayer("setmedia", settings.media); if (settings.autoplay === true) { $(mainplayer).jplayer('play'); } }, // extra settings swfpath: "https://gdaygday.com/skin/clean-jplayer-skin/img/jplayer.swf", supplied: formats, solution: 'html, flash', volume: 0.5, size: settings.size, smoothplaybar: false, keyenabled: true, loop: settings.loop, // css selectors cssselectorancestor: playergui, cssselector: { videoplay: ".video-play", play: ".play", pause: ".pause", seekbar: ".seekbar", playbar: ".playbar", progressbar: ".progress", rightblockbar: ".rightblock", volumebar: ".currentvolume", volumebarvalue: ".currentvolume .curvol", currenttime: ".time.current", duration: ".time.duration", fullscreen: ".fullscreen", restorescreen: ".fullscreenoff", gui: ".controls", nosolution: ".nosolution" }, error: function(event) { if (event.jplayer.error.type === $.jplayer.error.url_not_set) { // setup the media stream again and play it. $(this).jplayer("setmedia", settings.media).jplayer('play'); } }, play: function() { $(playergui + ' .video-play').fadeout(); $(this).on('click', function() { $(mainplayer).jplayer('pause'); }); $(this).jplayer("pauseothers"); }, pause: function() { $(playergui + ' .video-play').fadein(); $(playergui + ' .playerscreen').unbind('click'); }, volumechange: function(event) { if (event.jplayer.options.muted) { $(playergui + ' .currentvolume').val(0); } else { $(playergui + ' .currentvolume').val(event.jplayer.options.volume); } }, timeupdate: function(event) { $(playergui + ' .seekbar').val(event.jplayer.status.currentpercentrelative); }, progress: function(event) { $(playergui + ' .seekbar').val(event.jplayer.status.currentpercentrelative); }, ended: function() { $(this).jplayer("setmedia", settings.media); } }; // create the volume slider control $(playergui + ' .currentvolume').slider({ range: [0, 1], step: 0.01, start: 0.5, handles: 1, slide: function() { var value = $(this).val(); $(mainplayer).jplayer("option", "muted", false); $(mainplayer).jplayer("option", "volume", value); $(playergui + ' .volumetext').html('volume: ' + (value * 100).tofixed(0) + ''); } }); $(playergui + ' .seekbar').slider({ range: [0, 100], step: 0.01, start: 0, handles: 1, slide: function() { var value = $(this).val(); $(mainplayer).jplayer("playhead", value); } }); // initialize player $.extend(options, extras); $(mainplayer).jplayer(options); } })(jquery);