javascript+HTML5自定义元素播放焦点图动画

 更新时间:2016年2月23日 10:02  点击:1921

这是一款基于HTML5的焦点图动画,它和其他焦点图不同的地方在于,它播放的不仅仅是图片,而是可以自定义控制的网页元素。它不仅在图片间切换有过渡动画效果,而且在切换时图片中的元素也将出现动画效果,比如图中的文字移动、打散、重新组合等,这款HTML5动画图片播放器算得上是高端大气上档次。

效果图:

HTML代码

<div class="parallax-bg" id="slider-wrap">
 <div class="slider parallax-bg" id="slider">
   <div class="slider-sections sandbox"> 
 <section class="first">
      <img alt="Kendo UI" src="images/home-banner-1.png"/>
      <div class="text">
       <h2>SmartSite Ver 2.2<br />智能网站管理系统 </h2>
       <p class="copy">采用前后台完全分离技术,通过标签(支持标签循环嵌套、判断标签、自定义标签、文件循环嵌套等)加模板技术.全站生成纯静态页。</p>
       <p class="button"><a href="#" onclick="_gaq.push(['_trackPageview', '#']);">Download</a> <a class="dimmed" onclick="_gaq.push(['_trackPageview', '#']);" href="#">Learn More</a></p>
      </div>
    </section>
 <section>
      <img src="images/dataviz-home-image-q2.png" alt="Kendo UI" />
      <div class="text" style="padding-top: 10px;">
       <h2>企业网站管理系统</h2>
       <p class="copy">单页面、单页面索引、新闻、产品展示、下载、友情链接、网上商城,在线支付、配送、支付方式管理、广告等模块。</p>
       <p class="button"><a href="#" onclick="_gaq.push(['_trackPageview', '#']);">Download</a> <a class="dimmed" onclick="_gaq.push(['_trackPageview', '#']);" href="#">Learn More</a></p>
      </div>
    </section>
 <section>
      <img src="images/home_banner_web-q2.png" alt="Kendo UI" />
      <div class="text">
       <h2>智能移动网站管理系统</h2>
       <p class="copy">基于jquery.Mobile、HTML5技术框架,前后台完全分离,采用标签加模板技术,全站生成纯静态页。</p>
       <p class="button"><a href="#" onclick="_gaq.push(['_trackPageview', '#']);">Download</a> <a class="dimmed" onclick="_gaq.push(['_trackPageview', '#']);" href="#">Learn More</a></p>
      </div>
    </section>
   </div>
  </div>
  <a class="slider-prev" href="javascript: void(0)">?</a> <a class="slider-next" href="javascript: void(0)">?</a>
</div>

CSS代码:

这里列出的是这个焦点图相关的核心CSS代码。

.slider section {display: none;}
.slider section.first {display: block;}

.slider-sections, .slider-sections section {width: 861px; height: 335px;}

.slider-sections {margin: 0 auto; position: relative;}
.slider-sections section {position: absolute; top: 0; left: 0px; }

.header-content h2 
{
 font:400 32px/1.2 "microsoft yahei", Tahoma, arial, sans-serif;
 color: #fff;
 margin: 0 0 26px;
}
.header-content p 
{
 margin: 0 0 30px;
}

.header-content .centered-content
{
 padding-top: 30px;
 padding-bottom: 10px;
}

.button {
 float: left;
 width: auto !important;
 list-style: none;
}
 .button a,
 .button button,
 .button input { /* Standard black button */
 font-size: 15px;
 /*font-family: 'lucida sans',arial,helvetica,sans-serif;*/
 line-height: 18px;
 color: #fff !important;

 text-decoration: none;

 padding: 5px 14px 6px 13px;
 display: block;
 width: auto;
 position: relative;
 z-index: 2;

  border: none;
  -moz-border-radius: 3px;
 border-radius: 3px;
 cursor: pointer;

 background: #313131; /* Old browsers */
 background: -moz-linear-gradient(top, #313131 0%, #222222 100%); /* FF3.6+ */
 background: -webkit-linear-gradient(top, #313131 0%,#222222 100%); /* Chrome10+,Safari5.1+ */
 background: -o-linear-gradient(top, #313131 0%,#222222 100%); /* Opera11.10+ */
 background: -ms-linear-gradient(top, #313131 0%,#222222 100%); /* IE10+ */
 background: linear-gradient(top, #313131 0%,#222222 100%); /* W3C */

 -webkit-transition: all 0.3s ease;
 -moz-transition: all 0.3s ease;
 -o-transition: all 0.3s ease;
 transition: all 0.3s ease;
 }

 .button a:hover,
 .button input:hover,
 .button button:hover,
 .button a:focus,
 .button input:focus,
 .button button:focus
 {
 background: #464646; /* Old browsers */
 background: -moz-linear-gradient(top, #464646 0%, #393939 100%); /* FF3.6+ */
 background: -webkit-linear-gradient(top, #464646 0%,#393939 100%); /* Chrome10+,Safari5.1+ */
 background: -o-linear-gradient(top, #464646 0%,#393939 100%); /* Opera11.10+ */
 background: -ms-linear-gradient(top, #464646 0%,#393939 100%); /* IE10+ */
 background: linear-gradient(top, #464646 0%,#393939 100%); /* W3C */
 }

 header .header-content .button a,
 #content .button a:hover
 {
  text-decoration: none;
 }

.header-content .beta-ribbons {
 position: absolute; 
 height: 120px;
 width: 85px;
 text-indent: -200px;
 overflow: hidden;
 background: url(../images/kendo-ribbons.png) no-repeat 0 0;
}

.header-content .beta-ribbons.ribbon-1 {
 background-position: -170px 0;
 top: -3px;
 right: -145px;
}

.header-content p.copy .beta-ribbons.ribbon-1 {
 top: -135px;
 left: 900px;
}

.header-content .beta-ribbons.ribbon-4 {
 background-position: -255px 0;
 left: -62px;
 top: -30px;
 z-index: 10;
 text-indent: -2000px;
}

JavaScript代码:

下面是这个焦点图插件的代码。

/**
* @author Alexander Farkas
* v. 1.22
*/
(function ($)
{
 if (!document.defaultView || !document.defaultView.getComputedStyle)
 { // IE6-IE8
  var oldCurCSS = $.curCSS;
  $.curCSS = function (elem, name, force)
  {
   if (name === 'background-position')
   {
    name = 'backgroundPosition';
   }
   if (name !== 'backgroundPosition' || !elem.currentStyle || elem.currentStyle[name])
   {
    return oldCurCSS.apply(this, arguments);
   }
   var style = elem.style;
   if (!force && style && style[name])
   {
    return style[name];
   }
   return oldCurCSS(elem, 'backgroundPositionX', force) + ' ' + oldCurCSS(elem, 'backgroundPositionY', force);
  };
 }

 var oldAnim = $.fn.animate;
 $.fn.animate = function (prop)
 {
  if ('background-position' in prop)
  {
   prop.backgroundPosition = prop['background-position'];
   delete prop['background-position'];
  }
  if ('backgroundPosition' in prop)
  {
   prop.backgroundPosition = '(' + prop.backgroundPosition;
  }
  return oldAnim.apply(this, arguments);
 };

 function toArray(strg)
 {
  strg = strg.replace(/left|top/g, '0px');
  strg = strg.replace(/right|bottom/g, '100%');
  strg = strg.replace(/([0-9\.]+)(\s|\)|$)/g, "$1px$2");
  var res = strg.match(/(-?[0-9\.]+)(px|\%|em|pt)\s(-?[0-9\.]+)(px|\%|em|pt)/);
  return [parseFloat(res[1], 10), res[2], parseFloat(res[3], 10), res[3]];
 }

 $.fx.step.backgroundPosition = function (fx)
 {
  if (!fx.bgPosReady)
  {
   var start = $.curCSS(fx.elem, 'backgroundPosition');
   if (!start)
   {//FF2 no inline-style fallback
    start = '0px 0px';
   }

   start = toArray(start);
   fx.start = [start[0], start[2]];
   var end = toArray(fx.end);
   fx.end = [end[0], end[2]];

   fx.unit = [end[1], end[3]];
   fx.bgPosReady = true;
  }
  //return;
  var nowPosX = [];
  nowPosX[0] = ((fx.end[0] - fx.start[0]) * fx.pos) + fx.start[0] + fx.unit[0];
  nowPosX[1] = ((fx.end[1] - fx.start[1]) * fx.pos) + fx.start[1] + fx.unit[1];
  fx.elem.style.backgroundPosition = nowPosX[0] + ' ' + nowPosX[1];

 };
})(jQuery);

/*
tlrkSlider

 example usage:

 $("#slider").tlrkSlider({
  autoStart: false,
  elements: {
  "img": {delay: 10},
  "h2": {delay: 500},
  ".copy": {delay: 800},
  ".button": {delay: 1000}
  }
 });

 to go to a specific frame:
 $("#slider").tlrkSlider("go", position);
 "position" can have one of the following values:
 "next", "prev", "first", "last", "+1", "-1" or a numeric value

 to start/stop the automatic loop:
 $("#slider").tlrkSlider("start");
 $("#slider").tlrkSlider("stop");

 to change the delay between automatic transitions:
 $("#slider").tlrkSlider("option", "delayAnimation", 1000);

 to change any option:
 $("#slider").tlrkSlider("option", option_name, option_value);

 Changing the "elements" object is not tested.

 Changing the following options: "navigation", "navigationClass", "framesSelector", "autoStart" won't have any effect for now.
 They are used only during the initialization.

 $("#slider").data("tlrkSlider") will return the plugin instance and the methods/properties can be accessed from there.

 The plugin contructor defaults are accessable through TlrkSlider.defaults

 The function that actually sweep the elements in/out can be overriden from
 TlrkSlider.prototype._animationIn and TlrkSlider.prototype._animationOut

 See sweepIn/sweepOut 

 */

;(function( $, window, document, undefined ){

 // utility function that generates the "dots" navigation
 function generateNavigation($el, count, config) {
 var i, html = "",
  width = count * 24;

 html += "<ol class='" + config.navigationClass + "' style='margin-left: -" + width/2 + "px; width: " + width + "px'>";
 for (i = 0; i < count; i++) {
  html += "<li><a " + (i === 0 ? "class='selected'" : "" ) + " href='#" + (i) + "'>slide</a></li>";
 }
 html += "</ol>";

 $el.append(html);
 }

 function sweepOut($el, windowWidth) {
 var dfr = $.Deferred(),
  pos = $el.position(),
  width = $el.width(),
  delta, final,
  options = $el.data("tlrkAnimOptions");

 windowWidth = windowWidth || $(window).width(); // check if the windowWidth is passed, if not - get it

 delta = windowWidth - pos.left;
 final = -(delta);

 setTimeout(function(){
  $el.animate({left: final, opacity: "toggle"}, options.speed, options.easing, function(){
  dfr.resolve();
  });
 }, options.delay);

 return dfr.promise();
 }

 function sweepIn($el, windowWidth, frameLeft) {
 var dfr = $.Deferred(),
  options = $el.data("tlrkAnimOptions"),
  positionData = $el.data("tlrkOriginalPos"),
  final = positionData.position.left,
  rightEdge;

 windowWidth = windowWidth || $(window).width(); // check if the windowWidth is passed, if not - get it

 $el.css({opacity: 0, display: "block"}); // move it outside the right edge of the screen
 $el.css("left", function(current){
  return current + windowWidth - frameLeft;
 });

 setTimeout(function(){
  $el.animate({left: final, opacity: 1}, options.speed, options.easing, function(){
  dfr.resolve();
  });
 }, options.delay);

 return dfr.promise();
 }

 // two pass function that first iterates all the elements and gets their position/width/height
 // and then sets their position to absolute
 function absolutize($elements) {

 // todo - move it to separate function and do it just once
 // gather the original position/dimension data for all elements
 $elements.each(function(){
  var $t = $(this);

  if ($t.data("tlrkOriginalPos")) return

  $t.data("tlrkOriginalPos", {
  position: $t.position(),
  width: $t.width(),
  height: $t.height(),
  css_pos: $t.css("position"),
  css_left: $t.css("left"),
  css_top: $t.css("top"),
  css_width: $t.css("width") || "auto",
  css_height: $t.css("height") || "auto"
  });

 });

 // set the absolute position
 $elements.each(function(){
  var $t = $(this),
   opos = $t.data("tlrkOriginalPos");

  $t.css({
  position: "absolute",
  left: opos.position.left,
  top: opos.position.top,
  width: opos.width,
  height: opos.height
  });
 });
 }

 function restoreFrameElements($elements) {
 $elements.each(function(){
  var $t = $(this),
   opos = $t.data("tlrkOriginalPos");

  if (!opos) return

  $t.css({
  position: opos.css_pos,
  left: opos.css_left,
  top: opos.css_top,
  width: opos.css_width,
  height: opos.css_height
  });
 });

 }

 var TlrkSlider = function( elem, options ){
  this.elem = elem;
  this.$elem = $(elem);
  this.options = options;
 };

 // the plugin prototype
 TlrkSlider.prototype = {
 defaults: {

  defaultElementOptions: {
  speed: 1200,
  easing: "easeInOutBack",
  // interval before the element starts moving when the fadeIn/Out functions are called
  // it's a good idea to give different delays for the different elements
  // if all have the same delay they'll start moving all together
  delay: 100 
  },

  // dispose elements are these that are not included in the elements object
  // but affect the document flow and will be fadedIn/Out
  disposeDelay: 100, // delay for the dispose elements
  disposeSpeed: 1000, // how quickly they'll fadeOut/In

  delayBetweenTransition: 1000, // time between starting fadeOut and fadeIn
  delayAnimation: 7000, // time between auto changing the current frame

  loop: true, // if true when clicking next on the last frame the slider jumps to the first one

  autoStart: true, // start the automatic looping through the frames on init

  framesSelector: "section", // selector for the frames inside the slider

  elements: {
  "p": {delay: 100, speed: 1000, easing: "easeInOutBack"}
  },

  navigation: true, // the dots navigation on the bottom
  navigationClass: "slider-nav",

  // callbacks
  // another way to "catch" these events is with
  // $(-slider-element-).bind("animationStart")
  animationStart: null,
  animationEnd: null
 },

 init: function() {
  var c, e, element, $element,
   that = this,
   $firstFrame;

  c = this.config = $.extend({}, this.defaults, this.options);

  this.elem.style.position = "relative"; // make the wrapping element relative

  // basics
  this.$frames = this.$elem.find(c.framesSelector);
  this.framesCount = this.$frames.length;
  this.currentFrame = 0;
  this.queue = [];

  this._$elementsByFrame = {};
  this._$disposeElementsByFrame = {};

  for (i = 0; i < this.framesCount; i++) {
  this._$elementsByFrame[i] = this._getFrameElements(i); // cache the $elements by frame
  this._$disposeElementsByFrame[i] = this._getDisposeFrameElements(i); // cache the rest of the tree for each frame
  }

  if (c.navigation) {
  generateNavigation(this.$elem, this.framesCount, c);
  this.$navigation = this.$elem.find("."+c.navigationClass);
  }

  // bindings
  this.$elem.find(".slider-nav").delegate("a", "click", function(e){
  var frame = this.getAttribute("href").split("#")[1];
  that.go.call(that, frame);
  return false;
  });

  this.$elem // internal bindings for the callbacks
  .bind("animationStart", function(){
   if ($.isFunction(c.animationStart)) {c.animationStart.apply(that, arguments);}
  })
  .bind("animationEnd", function(){
   if ($.isFunction(c.animationEnd)) {c.animationEnd.apply(that, arguments);}
  })
  ;

  // start animation?
  if (c.autoStart) {
  this.start();
  } else {
  this.running = false;
  }

  return this;
 },

 start: function(instant) {
  var that = this;

  if (this.timer) { // we'll clear the current timer
  window.clearTimeout(this.timer);
  }

  this.running = true;

  if (instant) {
  that.nextFrame();
  } else {
  this.timer = window.setTimeout(function(){ that.nextFrame.call(that) }, that.config.delayAnimation);
  }
 },

 stop: function() {
  if (!this.running) return; // we are not running

  this.running = false;
  window.clearTimeout(this.timer);
 },

 // main function for changing frames
 selectFrame: function(frame, dfr) {
  var c = this.config, // shorthand for the config
   that = this,
   dfr = dfr || $.Deferred(),
   dFadeIn = $.Deferred(),
   dFadeOut = $.Deferred();

  if (isNaN(frame) || frame < 0 || frame > this.framesCount || frame === this.currentFrame) {
  dfr.reject();
  return dfr.promise();
  }

  // clear the animation loop interval if the animation is running
  if (this.running && this.timer) { 
  window.clearTimeout(this.timer);
  }

  // check if we are currenly running an animation.
  if (this.animated && this.queue.length > 0) {
  // wait for the last item in the queue to finish
  this.queue[this.queue.length-1].done(function(){
   that.selectFrame(frame, dfr); // and call again the selectFrame
  })
  return dfr.promise();
  }

  this.animated = true;
  this.$elem.trigger("animationStart", [this, frame]);

  this.queue.push(dfr);

  // fade the frames
  dFadeOut = this._fadeOutFrame(this.currentFrame);

  // hide the fadetout frame
  dFadeOut.done(function(){
  that.$frames.eq(that.currentFrame).hide();
  });

  window.setTimeout(function(){ // then wait delayBetweenTransition and fadeIn the new frame
  dFadeIn = that._fadeInFrame.call(that, frame).done(function(){
   // when both the fadeIn and fadeOut are done we'll resolve the selectFrame promise
   $.when(dFadeOut, dFadeIn).done(function(){
   that.animated = false;
   that.queue.shift();
   that.$elem.trigger("animationEnd", [that]);
   that.currentFrame = frame;
   dfr.resolve();
   });
  });
  }, c.delayBetweenTransition);

  // navigation html change
  if (this.config.navigation) {
  this.$navigation.find(".selected").removeClass("selected").end()
   .find("a").eq(frame).addClass("selected");
  }

  dfr.done(function(){ // we'll resume the loop animation after the transitions are done
  if (that.running) {
   that.start();
  }
  });

  return dfr.promise();
 },

 _fadeFrame: function(frame, callback, direction) {
  var dfr = $.Deferred(),
   $frame = this.$frames.eq(frame),
   $elements = this._$elementsByFrame[frame],
   windowWidth = $(window).width(), // cache it before the animations, so we don't have to check it for each element 
   i, len,
   that = this,
   elementAnimations = [],
   $disposeElements = this._$disposeElementsByFrame[frame],
   $affectedElements,
   frameLeft = $frame.offset().left;

  direction = direction || "out";

  if (!$.isFunction(callback)) return; // do nothing if there's no callback passed

  $affectedElements = $elements.add($disposeElements);

  // position absolute the animation and dispose elements
  absolutize($affectedElements);

  // toggle the dispose elements
  if ($disposeElements.length > 0) {
  window.setTimeout(function(){
   $disposeElements[direction === "out" ? "fadeOut" : "fadeIn"](that.config.disposeSpeed);
  }, this.config.disposeDelay);
  }

  // invoke the callback for each element
  // the callback must return a promise
  $elements.each(function(){
  elementAnimations.push( callback.call(that, $(this), windowWidth, frameLeft) );
  });

  // wait for all the elements to finish their animation
  $.when.apply(this, elementAnimations).done(function(){
  //restoreFrameElements($affectedElements); // and restore the elements' position
  dfr.resolve(); // resolve the fade function
  });

  return dfr.promise();
 },

 _fadeOutFrame: function(frame) {
  var dfr = $.Deferred(),
   $frame = this.$frames.eq(frame),
   $disposeElements = this._$disposeElementsByFrame[frame];

  this._fadeFrame(frame, this._animationOut, "out").done(function(){
  dfr.resolve();
  })

  return dfr.promise();
 },

 _fadeInFrame: function(frame) {
  var dfr = $.Deferred(),
   $frame = this.$frames.eq(frame),
   $elements = this._$elementsByFrame[frame];

  this._restoreFrame(frame);

  $frame.show();

  this._fadeFrame(frame, this._animationIn, "in").done(function(){
  dfr.resolve();
  });

  return dfr.promise();
 },

 _restoreFrame: function(frame){
  if (!frame) return
  restoreFrameElements( this._$elementsByFrame[frame].add(this._$disposeElementsByFrame[frame]) );
 },

 nextFrame: function() {
  var frame = this.currentFrame+1,
   dfr = $.Deferred();

  if (frame > this.framesCount-1) {
  if (this.config.loop) {
   frame = 0;
  } else {
   dfr.reject();
  }
  };

  this.selectFrame(frame).done(function(){
  dfr.resolve();
  });

  return dfr.promise();
 },

 prevFrame: function() {
  var frame = this.currentFrame-1,
   dfr = $.Deferred();

  if (frame < 0) {
  if (this.config.loop) {
   frame = this.framesCount-1;
  } else {
   dfr.reject();
   return dfr.promise();
  }
  }

  this.selectFrame(frame).done(function(){
  dfr.resolve();
  });

  return dfr.promise();
 },

 go: function(str) { // shorthand
  switch (str) {
  case "next":
  case "+1":
   this.nextFrame();
   break;

  case "prev":
  case "-1":
   this.prevFrame();
   break;

  case "first":
   this.selectFrame(0);
   break;

  case "last":
   this.selectFrame(this.framesCount-1);
   break;

  default:
   if (isNaN(str)) return;
   this.selectFrame(Number(str));
  }
 },

 // returns jquery collection of animation elements
 _getFrameElements: function(frame) { 
  var $frame = this.$frames.eq(frame),
   elements = this.config.elements,
   e, elementOptions,
   $found, $frameElements = $([]);

  for (e in elements) {
  elementOptions = elements[e];
  $found = $frame.find(e);
  $found.addClass("t-frame-element").data("tlrkAnimOptions", $.extend({}, this.defaults.defaultElementOptions, elementOptions ));
  $frameElements = $frameElements.add($found);
  }

  return $frameElements;
 },

 // returns jquery collection of elements that have to be faded out
 // i.e. elements on the same level as the animation elements
 // that doesn't contain other animation elements
 _getDisposeFrameElements: function(frame) {
  var $disposeElements = $([]),
   $frame = this.$frames.eq(frame),
   $elements = this._$elementsByFrame[frame];

  $elements.each(function(){
  var $t = $(this),
   $siblings = $t.siblings().not(".t-frame-element");

  $siblings.each(function(){
   var $t = $(this);
   // check if the node is not already marked and doesn't contains other frame elements
   if (!$t.hasClass("t-frame-dispose") && $t.find(".t-frame-element").length === 0) {
   $t.addClass("t-frame-dispose");
   $disposeElements = $disposeElements.add($t);
   }
  });

  });
  return $disposeElements;
 },

 // expose the internal animationIn/Out functions that are called for each element in the frame
 // two arguments are passed - the $element which have to be animated and the window width
 _animationIn: sweepIn,
 _animationOut: sweepOut

 }

 TlrkSlider.defaults = TlrkSlider.prototype.defaults;

 $.fn.tlrkSlider = function(options) {
 var otherArgs = Array.prototype.slice.call(arguments, 1);

 return this.each(function() {
  var $el = $(this),
   pluginData = $el.data("tlrkSlider");

  if (!pluginData) { // check if the slider is already attached
  pluginData = new TlrkSlider(this, options).init();
  $el.data("tlrkSlider", pluginData);
  return;
  }

  //change the options or call a method
  if (typeof options === "string") {

  // setting / getting option(s)
  if (options === "option") {

   if (typeof otherArgs[0] === "string" && typeof otherArgs[1] !== "undefined") { // set an option value
   pluginData.config[otherArgs[0]] = otherArgs[1]; 
   }

   if (typeof otherArgs[0] === "object") { // extend the config with new options
   pluginData.config = $.extend(pluginData.config, otherArgs[0]);
   }

  } else { // call a method?
   try {
   pluginData[options].apply(pluginData, otherArgs);
   } catch(ex) {
   throw "Error calling a plugin method (" + ex + ")";
   }
  }
  }
 });
 };

 window.TlrkSlider = TlrkSlider;

})( jQuery, window , document );

下面是页面调用的JS代码:

$(document).ready(function(){
 var $backgrounds = $(".header-content").find(".parallax-bg"),
  LAYER_OFFSET = 30,
  PRLX_SPEED = 1500,
  $slider;

 $slider = $("#slider").tlrkSlider({
 autoStart: true,
 animationStart: function(ev, slider, step){
  var max_steps = this.framesCount; 
  $backgrounds.each(function(idx, el){
  var pos = (step * (100 / max_steps)) + (LAYER_OFFSET * idx);
  $(this).animate({"backgroundPosition": pos + "% 0"}, PRLX_SPEED);
  });
 },
 elements: {
  "img": {delay: 10},
  "h2": {delay: 500},
  ".copy": {delay: 800},
  ".button": {delay: 1000}
 }
 });

 $(".header-content")
 .hover(
  function(){$(this).find(".slider-prev, .slider-next").show();},
  function(){$(this).find(".slider-prev, .slider-next").hide();}
 )
 .find(".slider-prev").click(function(){$slider.tlrkSlider("go", "prev"); return false; }).end()
 .find(".slider-next").click(function(){$slider.tlrkSlider("go", "next"); return false; });

});

希望本文对大家学习javascript程序设计有所帮助。

[!--infotagslink--]

相关文章

  • 使用PHP+JavaScript将HTML页面转换为图片的实例分享

    这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19
  • 关于JavaScript中name的意义冲突示例介绍

    在昨天的《Javascript权威指南》学习笔记之十:ECMAScript 5 增强的对象模型一文中,对于一段代码的调试出现了一个奇怪现象,现将源代码贴在下面: 复制代码 代码如下: <script type="text/javascript"> function Person(){}...2014-05-31
  • C#和JavaScript实现交互的方法

    最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
  • javascript自定义的addClass()方法

    复制代码 代码如下: //element:需要添加新样式的元素,value:新的样式 function addClass(element, value ){ if (!element.className){ element.className = value; }else { newClassName = element.className; newClas...2014-05-31
  • JavaScript中的this关键字使用方法总结

    在javascritp中,不一定只有对象方法的上下文中才有this, 全局函数调用和其他的几种不同的上下文中也有this指代。 它可以是全局对象、当前对象或者任意对象,这完全取决于函数的调用方式。JavaScript 中函数的调用有以下...2015-03-15
  • 详解javascript数组去重问题

    首先,我想到的是另建一个结果数组,用来存储原始数组中不重复的数据。遍历原始数组依次跟结果数组中的元素进行比较,检测是否重复。于是乎,我写出了如下代码A: Array.prototype.clearRepetitionA = function(){ var resul...2015-11-08
  • JavaScript中逗号运算符介绍及使用示例

    有一道js面试题,题目是这样的:下列代码的执行结果是什么,为什么? 复制代码 代码如下: var i, j, k; for (i=0, j=0; i<10, j<6; i++, j++) { k = i+j; } document.write(k); 答案是显示10,这道题主要考察JavaScript的逗...2015-03-15
  • javascript的事件触发器介绍的实现

    事件触发器从字面意思上可以很好的理解,就是用来触发事件的,但是有些没有用过的朋友可能就会迷惑了,事件不是通常都由用户在页面上的实际操作来触发的吗?这个观点不完全正确,因为有些事件必须由程序来实现,如自定义事件,jQue...2014-06-07
  • Javascript类型转换的规则实例解析

    这篇文章主要介绍了Javascript类型转换的规则实例解析,涉及到javascript类型转换相关知识,对本文感兴趣的朋友一起学习吧...2016-02-27
  • ActiveX控件与Javascript之间的交互示例

    1、ActiveX向Javascript传参 复制代码 代码如下: <script language="javascript" for="objectname" event="fun1(arg)"> fun2(arg); </script> objectname为ActiveX控件名,通过<object>标签里的id属性设定,如下; 复制...2014-06-07
  • 详解JavaScript操作HTML DOM的基本方式

    通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素。 HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。 HTML DOM 模型被构造为对象的树: 通过可编程的对象模型,Java...2015-10-23
  • JavaScript获取浏览器信息的方法

    Window有navigator对象让我们得知浏览器的全部信息.我们可以利用一系列的API函数得知浏览器的信息.JavaScript代码如下:function message(){ txt = "<p>浏览器代码名: " + navigator.appCodeName + "</p>";txt+= "<p>...2015-11-24
  • 跟我学习javascript的最新标准ES6

    虽然ES6都还没真正发布,但已经有用ES6重写的程序了,各种关于ES789的提议已经开始了,这你敢信。潮流不是我等大众所能追赶的。潮流虽然太快,但我们不停下学习的步伐,就不会被潮流丢下的,下面来领略下ES6中新特性,一堵新生代JS...2015-11-24
  • javascript设计模式之解释器模式详解

    神马是“解释器模式”?先翻开《GOF》看看Definition:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。在开篇之前还是要科普几个概念: 抽象语法树: 解释器模式并未解释如...2014-06-07
  • JavaScript预解析,对象详解

    这篇文章主要介绍了JavaScript预解析,对象的的相关资料,小编觉得这篇文章写的还不错,需要的朋友可以参考下,希望能够给你带来帮助...2021-11-10
  • 学习JavaScript设计模式之装饰者模式

    这篇文章主要为大家介绍了JavaScript设计模式中的装饰者模式,对JavaScript设计模式感兴趣的小伙伴们可以参考一下...2016-01-21
  • JavaScript操作URL的相关内容集锦

    ---恢复内容开始---1.location.href.....(1)self.loction.href="http://www.cnblogs.com/url" window.location.href="http://www.cnblogs.com/url" 以上两个用法相同均为在当前页面打开URL页面 (2)this.locati...2015-10-30
  • javascript实现tab切换的四种方法

    tab切换在网页中很常见,故最近总结了4种实现方法。 首先,写出tab的框架,加上最简单的样式,代码如下: <!DOCTYPE html> <html> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><style> *{ pa...2015-11-08
  • JavaScript学习笔记整理_setTimeout的应用

    下面小编就为大家带来一篇JavaScript学习笔记整理_setTimeout的应用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-03
  • 基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式

    前言在面向对象的编程范式中,封装都是必不可少的一个概念,而在诸如 Java,C++等传统的面向对象的语言中, 私有成员是实现封装的一个重要途径。但在 JavaScript 中,确没有在语法特性上对私有成员提供支持, 这也使得开发人员使...2015-10-30