Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Ç³Ì¸ÒÆ¶¯Ç°¶ËµÄ×î¼Ñʵ¼ù
 
×÷ÕߣºÒ¶Ð¡îÎ À´Ô´£º²©¿ÍÔ° ·¢²¼ÓÚ 2015-03-03
  2501  次浏览      27
 

Õ⼸Ì죬µÚÈýÂÖȫվÓÅ»¯½áÊø£¬²âÊÔÏîÄ¿ÔÚ2GÊׯÁÔØÈëËÙ¶ÈÈ¡µÃÁËһЩÓÅ»¯³É¼¨£¬¶Ô±ÈÏÂÀ´ÓÐ10s×óÓҵIJî¾à£º

Õâ´ÎÓÅ»¯¹¤×÷½áÊøºó£¬ÒѾ­ÊǵÚÈý´Î´ó¹æÄ£ÕÛÌÚ¹«Ë¾¿ò¼ÜÁË£¬ÕâÀォһЩ×Ô¼ºÖªµÀµÄÒÆ¶¯¶ËµÄ½¨ÒéÌá³öÀ´·ÖÏíÏ£¬Ï£Íû¶Ô¸÷λÓÐÓá£ÎÄÖÐÓÐÎóÇëÄúÌá³ö£¬ÒÔÃâÎóÈË×ÔÎó¡£

¼¼ÊõÑ¡ÐÍ

µ¥Ò³or¶àÒ³

spa£¨single page application£©Ò²¾ÍÊÇÎÒÃdz£³£ËµµÄwebÓ¦ÓóÌÐòwebapp£¬±»ÈÏΪÊÇÒµÄڵķ¢Õ¹Ç÷ÊÆ£¬Ö÷ÒªÓÐÁ½¸öÓŵ㣺

¢Ù Óû§ÌåÑéºÃ

¢Ú ¿ÉÒÔ¸üºÃµÄ½µµÍ·þÎñÆ÷ѹÁ¦

µ«Êǵ¥Ò³Óм¸¸öÖÂÃüµÄȱµã£º

¢Ù SEOÖ§³Ö²»ºÃ£¬ÍùÍùÐèÒªµ¥¶Àд³ÌÐò´¦ÀíSEOÎÊÌâ

¢Ú webapp±¾ÉíµÄÄÚ´æ¹ÜÀíÄÑ£¬Javascript¡¢Css·Ç³£ÈÝÒ×»¥ÏàÓ°Ïì

µ±È»£¬ÕâÀï²»ÊÇ˵¶àÒ³±ã²»ÄÜÓкõÄÓû§ÌåÑ飬²»ÄܽµµÍ·þÎñÆ÷ѹÁ¦£»¶àÒ³Ò²»áÓбäÁ¿ÎÛȾµÄÎÊÌâ·¢Éú£¬µ«Ôì³ÉwebappÒÀ¾ÉÊÇ¡°·¢Õ¹Ç÷ÊÆ¡±£¬¶øÃ»Óдó¹æÄ£Ó¦ÓõÄÖ÷ÒªÔ­ÒòÊÇ£ºwebappģʽÃż÷½Ï¸ß£¬ºÜÈÝÒ×Íæ»µ¡£

ÆäʵwebappµÄ×î´óÎÊÌâÓëÉÏÊö¼¸µãûÓйØÏµ£¬Êµ¼ÊÉÏ×è°­webappµÄÊǼ¼ÊõÃż÷ÓëÊÖ»úÐÔÄÜ£¬Ó²¼þ·½Ãæ²»±Ø¶à˵£¬ÕâÀïÖ÷Ҫ˵¼¼ÊõÃż÷¡£

webapp×öµÄºÃ£¬¿ÉÒÔÍæ¶¯»­£¬¿ÉÒÔÍæÕæÕýÒâÒåÉϵÄÔ¤¼ÓÔØ£¬¿ÉÒÔÍæÎÞ·ìÒ³ÃæÇл»£¬´ÓijЩ·½ÃæÉõÖÁ¿ÉÒÔæÇÃÀÔ­ÉúAPP£¬ÕâÒ²ÊÇwebappÊܵ½×·ÅõµÄÔ­Òò¡£

µ«ÊÇ£¬ÒÔÉϺÜÈÝÒ×±»Í滵£¡ÒòΪwebappģʽ²»¿É±ÜÃâµÄÐèÒªÓõ½¿ò¼Ü£¬Õ¾µãÐèÒªÒ»¸öÇÐʵ¿ÉÐеĿØÖÆÆ÷À´¹ÜÀíHistoryÒÔ¼°Ò³ÃæviewʵÀý»¯¹¤×÷£¬ÓÚÊÇ´ó¼Ò»áÑ¡ÔñÖîÈ磺

Backbone¡¢angularJS¡¢canJsÖ®ÀàµÄMVC¿ò¼Ü£¬ÓÚÊÇÕû¸öǰ¶ËµÄ¼¼ÊõÒªÇ󱻯½°×Î޹ʵÄÌáÉýÁËÒ»¸öµÈ¼¶£¬Ô­À´²Ù×÷dom¿ÉÒÔ×öµÄÊÂÇ飬ÏÖÔÚ²»Ò»¶¨ÄÜ×öÁË¡£

ºÜ¶àÈ˶ÔÒÔÉÏ¿ò¼ÜֻͣÁôÔÚʹÓòãÃæ£¬¼¸ÂÖÅàѵºó£¬¶Ôµ×²ãÍùÍù¸Ðµ½Ò»Í·ÎíË®£¬¾ÍË㿪·¢Á˼¸¸öÏîÄ¿ºó£¬ÈÔÈ»»¹ÊÇÖ»ÄÜÁ˽âView²ãÃæµÄ¶«Î÷£»ÓжԼ¼Êõ¸ÐÐËȤµÄͬÊ»áÂýÂýÁ˽âµ×²ã£¬µ«¶àÊýÈÔȻֻ¹Ø×¢ÒµÎñ¿ª·¢£¬Õâ¸öʱºòÍøÕ¾ÌåÑé±ã»áÊܵ½Ó°Ï죬»¹ÈÃwebappÊܵ½ÖÊÒÉ¡£

ËùÒÔÕâÀィÒéÊÇ£º

¢Ù ¾«Ó¢ÍŶÓÔÚ¹«Ë¾ÓÐÇ®²¢ÇÒÍøÕ¾ÖÜÆÚÔÚÁ½ÄêÒÔÉϵϰ¿ÉÒÔÑ¡ÓÃwebappģʽ

¢Ú Ò»°ãÍŶӻ¹ÊÇʹÓöàÒ³°É£¬¿Ó²»ÁË

¢Û ¸üºÃµÄ½¨ÒéÊDzο¼Ï¸ıäºóµÄÐÂÀË΢²©£¬²ÉÓÃαµ¥Ò³Ä£Ê½£¬½«ÍøÕ¾·ÖΪ¼¸¸öÄ£¿é×öµ½×é¼þ»¯¿ª·¢£¬Åöµ½²î¾à½Ï´óµÄÒ³Ãæ±ãË¢ÐÂÒ²ÎÞ²»¿É

PS£ºÊÂʵÉÏwebappģʽµÄÍøÕ¾ÌåÑéȷʵ»áºÃÒ»µã

¿ò¼ÜÑ¡Ôñ

ÒÆ¶¯Ç°¶ËÒÀ¾ÉÀë²»¿ª¿ò¼Ü£¬¶øÇÒ¿ò¼Ü³Ê±ä»¯×´Ì¬£¬ÒÔÎÒ³§ÎªÀý£¬ÎÒÃǼ¸ÂÖ¿ò¼ÜÑ¡ÐÍÊÇ£º

¢Ù ¶àÒ³Ó¦ÓÃ+jQuery

¢Ú jQuery mobile£¨Õâ¸ö¿ÓË­ÓÃË­ÖªµÀ£©

¢Û ¿ªÊ¼webappģʽ£¨jQuery+requireJS+Backbone+underscore£©

¢Ü ÊÝÉí£¨zepto+requireJS+Backbone View²¿·Ö+underscore£©

......

ÒÆ¶¯´ó³±À´ÁÙºó£¬ä¯ÀÀÆ÷»ù±¾µÄ¼æÈݵõ½Á˱£Ö¤£¬ËùÒÔÍêÕûµÄjQuery±äµÃ²»ÊÇÄÇô±ØÐ룬ÒòΪ³ß´çÔ­Òò£¬ËùÒÔÒ»°ã±»zeptoÌæ»»£¬zeptoÓëjQueryÓÐʲô²îÒìÄØ£¿

jQuery VS Zepto

Ê×ÏÈ£¬ZeptoÓëjQueryµÄAPI´óÌåÏàËÆ£¬µ«ÊÇʵÏÖϸ½ÚÉϲîÒìÉõ´ó£¬ÎÒÃÇʹÓÃZeptoÒ»°ãÍê³ÉÁ½¸ö²Ù×÷£º

¢Ù dom²Ù×÷

¢Ú ajax´¦Àí

µ«ÊÇÎÒÃÇÖªµÀHTML5ÌṩÁËÒ»¸ödocument.querySelectorAllµÄ½Ó¿Ú£¬¿ÉÒÔ½â¾öÎÒÃÇ90%µÄÐèÇó£¬ÓÚÊÇjQueryµÄsizzle±ãÒâÒå²»´óÁË£¬ºóÀ´jQueryÒ²×öÁËÒ»ÂÖÓÅ»¯£¬ÈÃÓû§´ò°üʱºòÑ¡Ôñ£¬ÐèÒªsizzle²ÅÓá£

Æä´ÎjQueryµÄһЩÊôÐÔ²Ù×÷ÉÏ×ö×ãÁ˼æÈÝ£¬±ÈÈ磺

el.css('transform', 'translate(-968px, 0px) translateZ(0px)')
//jQuery»á×Ô¶¯¸ù¾Ý²»Í¬ä¯ÀÀÆ÷ÄÚºËΪÄã´¦ÀíΪ£º
el.css('-webkit-transform', 'translate(-968px, 0px) translateZ(0px)')

ÓÖ±ÈÈç˵£¬ÒÔϲîÒì±È±È½ÔÊÇ£º

el.hide(1000);//jQuery¾ßÓж¯»­£¬Zepto²»»áÄñÄã

È»ºó£¬jQuery×î³õʵÏÖanimateÊDzÉÓÃjsÑ­»·ÉèÖÃ״̬¼Ç¼µÄ·½Ê½£¬ËùÒÔ¿ÉÒÔÓÐЧµÄ¼Çס״̬ÔÝÍ£¶¯»­ÔªËØ£»ZeptoµÄanimateÍêÈ«ÒÀÀµÓÚcss3¶¯»­£¬ÔÝÍ£ÐèÒªÔÙÏë°ì·¨

//     Zepto.js
//     (c) 2010-2014 Thomas Fuchs
//     Zepto.js may be freely distributed under the MIT license.





;(function($, undefined){
  var prefix = '', eventPrefix, endEventName, endAnimationName,
    vendors = { Webkit: 'webkit', Moz: '', O: 'o' },
    document = window.document, testEl = document.createElement('div'),
    supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i,
    transform,
    transitionProperty, transitionDuration, transitionTiming, transitionDelay,
    animationName, animationDuration, animationTiming, animationDelay,
    cssReset = {}

  function dasherize(str) { return str.replace(/([a-z])([A-Z])/, '$1-$2').toLowerCase() }
  function normalizeEvent(name) { return eventPrefix ? eventPrefix + name : name.toLowerCase() }

  $.each(vendors, function(vendor, event){
    if (testEl.style[vendor + 'TransitionProperty'] !== undefined) {
      prefix = '-' + vendor.toLowerCase() + '-'
      eventPrefix = event
      return false
    }
  })

  transform = prefix + 'transform'
  cssReset[transitionProperty = prefix + 'transition-property'] =
  cssReset[transitionDuration = prefix + 'transition-duration'] =
  cssReset[transitionDelay    = prefix + 'transition-delay'] =
  cssReset[transitionTiming   = prefix + 'transition-timing-function'] =
  cssReset[animationName      = prefix + 'animation-name'] =
  cssReset[animationDuration  = prefix + 'animation-duration'] =
  cssReset[animationDelay     = prefix + 'animation-delay'] =
  cssReset[animationTiming    = prefix + 'animation-timing-function'] = ''

  $.fx = {
    off: (eventPrefix === undefined && testEl.style.transitionProperty === undefined),
    speeds: { _default: 400, fast: 200, slow: 600 },
    cssPrefix: prefix,
    transitionEnd: normalizeEvent('TransitionEnd'),
    animationEnd: normalizeEvent('AnimationEnd')
  }

  $.fn.animate = function(properties, duration, ease, callback, delay){
    if ($.isFunction(duration))
      callback = duration, ease = undefined, duration = undefined
    if ($.isFunction(ease))
      callback = ease, ease = undefined
    if ($.isPlainObject(duration))
      ease = duration.easing, callback = duration.complete, delay = duration.delay, duration = duration.duration
    if (duration) duration = (typeof duration == 'number' ? duration :
                    ($.fx.speeds[duration] || $.fx.speeds._default)) / 1000
    if (delay) delay = parseFloat(delay) / 1000
    return this.anim(properties, duration, ease, callback, delay)
  }

  $.fn.anim = function(properties, duration, ease, callback, delay){
    var key, cssValues = {}, cssProperties, transforms = '',
        that = this, wrappedCallback, endEvent = $.fx.transitionEnd,
        fired = false

    if (duration === undefined) duration = $.fx.speeds._default / 1000
    if (delay === undefined) delay = 0
    if ($.fx.off) duration = 0

    if (typeof properties == 'string') {
      // keyframe animation
      cssValues[animationName] = properties
      cssValues[animationDuration] = duration + 's'
      cssValues[animationDelay] = delay + 's'
      cssValues[animationTiming] = (ease || 'linear')
      endEvent = $.fx.animationEnd
    } else {
      cssProperties = []
      // CSS transitions
      for (key in properties)
        if (supportedTransforms.test(key)) transforms += key + '(' + properties[key] + ') '
        else cssValues[key] = properties[key], cssProperties.push(dasherize(key))

      if (transforms) cssValues[transform] = transforms, cssProperties.push(transform)
      if (duration > 0 && typeof properties === 'object') {
        cssValues[transitionProperty] = cssProperties.join(', ')
        cssValues[transitionDuration] = duration + 's'
        cssValues[transitionDelay] = delay + 's'
        cssValues[transitionTiming] = (ease || 'linear')
      }
    }

    wrappedCallback = function(event){
      if (typeof event !== 'undefined') {
        if (event.target !== event.currentTarget) return // makes sure the event didn't bubble from "below"
        $(event.target).unbind(endEvent, wrappedCallback)
      } else
        $(this).unbind(endEvent, wrappedCallback) // triggered by setTimeout

      fired = true
      $(this).css(cssReset)
      callback && callback.call(this)
    }
    if (duration > 0){
      this.bind(endEvent, wrappedCallback)
      // transitionEnd is not always firing on older Android phones
      // so make sure it gets fired
      setTimeout(function(){
        if (fired) return
        wrappedCallback.call(that)
      }, (duration * 1000) + 25)
    }

    // trigger page reflow so new elements can animate
    this.size() && this.get(0).clientLeft

    this.css(cssValues)

    if (duration <= 0) setTimeout(function() {
      that.each(function(){ wrappedCallback.call(this) })
    }, 0)

    return this
  }

  testEl = null
})(Zepto)

Æäʵ£¬ÎÒÃǼòµ¥´ÓʵÏÖÉϾͿÉÒÔ¿´³ö£¬ZeptoÕâÀïÊÇ͵ÀÁÁË£¬ÆäʵÏÖ×î³õ¾ÍûÓÐÏ뿼ÂÇIE£¬ËùÒÔwinphone¸ù±¾²»ÄÜÓä¿ìµÄÍæË£

zepto.Z = function(dom, selector) {
dom = dom || []
dom.__proto__ = $.fn
dom.selector = selector || ''
return dom
}

ÕæÊµµÄ²îÒ컹Óкܶ࣬ÎÒÕâÀïҲû·¨Ò»Ò»Áгö£¬ÕâÀïҪ˵Ã÷µÄÒ»¸öÎÊÌâÆäʵ¾ÍÊÇ£º

zeptoÉè¼ÆµÄÄ¿µÄÊÇÌṩjqueryµÄÀàËÆµÄAPIs£¬²»ÒÔ100%¸²¸ÇjqueryΪĿµÄ£¬Ò»¸ö5-10kµÄͨÓÿ⡢ÏÂÔØ²¢Ö´Ðп졢ÓÐÒ»¸öÊìϤͨÓõÄAPI£¬ËùÒÔÄãÄܰÑÄãÖ÷ÒªµÄ¾«Á¦·Åµ½Ó¦Óÿª·¢ÉÏ¡£

ÉÏͼÊÇ1.8°æ±¾ÓëZeptoÍêÕû°æµÄ¶Ô±È£¬GzipÔÚ2GÇé¿öÏÂ20KÔì³ÉµÄ²î¾àÔÚ2-5sÖ®¼ä£¬3GÇé¿ö»áÓÐ1sµÄ²î¾à£¬ÕâÒ²ÊÇÎÒÃÇÑ¡ÔñZeptoµÄÔ­Òò£¬ÏÂÃæ¼òµ¥½éÉÜÏÂZepto¡£

ZeptoÇåµ¥

ÄãÕæÊµÏîĿʱ£¬ÍêÈ«¿ÉÒÔ°´ÕÕÐèҪѡȡģ¿é¼´¿É£¬ÏÂÃæ¼òµ¥ÔÙÁм¸¸ö²îÒ죺

ÆäËü²îÒì

¢Ù selector

ÈçÉÏËùÊö£¬ZeptoµÄÑ¡ÔñÆ÷Ö»ÊÇjQueryµÄÒ»¸ö×Ó¼¯£¬µ«ÊÇÕâ¸ö×Ó¼¯Âú×ãÎÒÃÇ90%µÄʹÓó¡¾°

¢Ú clone

ZeptoµÄclone²»Ö§³Öʼþclone£¬Õâ¾ä»°µÄÒâ˼ÊÇdom cloneºóÐèÒª×Ô¼ºÔÙ´¦Àíʼþ£¬¾Ù¸öÀý×ÓÀ´Ëµ£º

var el = $('.el');

el.on('click', function() {
  alert(1)
})

1 //trueµÄÇé¿öjQuery»áÁ¬´ødomʼþ¿½±´£¬ZeptoûÓÐ×öÕâ¸ö´¦Àí
2 //jQuery¿â£¬µã»÷cloneµÄ½Úµã»á´òÓ¡1£¬Zepto²»»á
3
4 var el1 = el.clone(true);
5 $('#wrap').append(el1);

Õâ¸ö²îÒ컹±È½ÏºÃ´¦Àí£¬ÏÖÔÚ¶¼»áʹÓÃʼþ´úÀí£¬ËùÒÔûcloneʼþÒ²ÔÚûÎÊÌâµÄ......

ÕâÀï¼òµ¥¿´¿´Ï¸½ÚʵÏÖ£º

clone: function (elem, dataAndEvents, deepDataAndEvents) {
  var i, l, srcElements, destElements,
        clone = elem.cloneNode(true),
        inPage = jQuery.contains(elem.ownerDocument, elem);

  // Fix IE cloning issues
  if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) &&
            !jQuery.isXMLDoc(elem)) {

    // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
    destElements = getAll(clone);
    srcElements = getAll(elem);

    for (i = 0, l = srcElements.length; i < l; i++) {
      fixInput(srcElements[i], destElements[i]);
    }
  }

  // Copy the events from the original to the clone
  if (dataAndEvents) {
    if (deepDataAndEvents) {
      srcElements = srcElements || getAll(elem);
      destElements = destElements || getAll(clone);

      for (i = 0, l = srcElements.length; i < l; i++) {
        cloneCopyEvent(srcElements[i], destElements[i]);
      }
    } else {
      cloneCopyEvent(elem, clone);
    }
  }

  // Preserve script evaluation history
  destElements = getAll(clone, "script");
  if (destElements.length > 0) {
    setGlobalEval(destElements, !inPage && getAll(elem, "script"));
  }

  // Return the cloned set
  return clone;
},
function cloneCopyEvent(src, dest) {
  var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;

  if (dest.nodeType !== 1) {
    return;
  }

  // 1. Copy private data: events, handlers, etc.
  if (dataPriv.hasData(src)) {
    pdataOld = dataPriv.access(src);
    pdataCur = dataPriv.set(dest, pdataOld);
    events = pdataOld.events;

    if (events) {
      delete pdataCur.handle;
      pdataCur.events = {};

      for (type in events) {
        for (i = 0, l = events[type].length; i < l; i++) {
          jQuery.event.add(dest, type, events[type][i]);
        }
      }
    }
  }

  // 2. Copy user data
  if (dataUser.hasData(src)) {
    udataOld = dataUser.access(src);
    udataCur = jQuery.extend({}, udataOld);

    dataUser.set(dest, udataCur);
  }
}

jQuery clone

1 clone: function(){
2 return this.map(function(){ return this.cloneNode(true) })
3 },

ÏÂÃæÊÇZeptoµÄcloneʵÏÖ£¬ÎÒɶҲ²»ËµÁË£¬ÎªÊ²Ã´jQueryÕâô´óÄØ£¬ÊÇÓеÀÀíµÄ¡£

¢Û data

ZeptoµÄdataÖ»ÄÜ´æ´¢×Ö·û´®£¬ÄãÏë´æ´¢¸´ÔÓ¶ÔÏóµÄ»°±ã°ÑËûÏÈת»»Îª×Ö·û´®

¢Ü offset

el.offset()

//Zepto·µ»Ø
Object {left: 8, top: 8, width: 485, height: 18}

//jQuery·µ»Ø
Object {top: 8, left: 8}

getBoundingClientRect º¯ÊýÊÇW3C×éÖ¯ÔÚµÚÒ»°æ±¾µÄW3C CSSOM View specification²Ý°¸ÖÐÈ·¶¨µÄÒ»¸ö±ê×¼·½·¨£¬ÔÚ´Ë֮ǰ£¬Ö»ÓÐIEä¯ÀÀÆ÷ÊÇÖ§³Ö¸Ã·½·¨µÄ£¬W3CÔÚÕâ´Î²Ý°¸ÖаÑËü·öÕý³ÉΪ±ê×¼¡£

getBoundingClientRect ·½·¨·µ»ØµÄÊǵ÷Óø÷½·¨µÄÔªËØµÄTextRectangle¶ÔÏ󣬸öÔÏó¾ßÓÐtop¡¢left¡¢right¡¢bottomËĸöÊôÐÔ£¬·Ö±ð´ú±í¸ÃÔªËØÉÏ¡¢×ó¡¢ÓÒ¡¢ÏÂËÄÌõ±ß½çÏà¶ÔÓÚä¯ÀÀÆ÷´°¿Ú×óÉϽǣ¨×¢Ò⣬²»ÊÇÎĵµÇøÓòµÄ×óÉϽǣ©µÄÆ«ÒÆÏñËØÖµ¡£

offset: function(coordinates){
  if (coordinates) return this.each(function(index){
    var $this = $(this),
        coords = funcArg(this, coordinates, index, $this.offset()),
        parentOffset = $this.offsetParent().offset(),
        props = {
          top:  coords.top  - parentOffset.top,
          left: coords.left - parentOffset.left
        }

    if ($this.css('position') == 'static') props['position'] = 'relative'
    $this.css(props)
  })
  if (this.length==0) return null
  var obj = this[0].getBoundingClientRect()
  return {
    left: obj.left + window.pageXOffset,
    top: obj.top + window.pageYOffset,
    width: Math.round(obj.width),
    height: Math.round(obj.height)
  }
},

Zepto offset

offset: function (options) {
  if (arguments.length) {
    return options === undefined ?
            this :
            this.each(function (i) {
              jQuery.offset.setOffset(this, options, i);
            });
  }

  var docElem, win,
        elem = this[0],
        box = { top: 0, left: 0 },
        doc = elem && elem.ownerDocument;

  if (!doc) {
    return;
  }

  docElem = doc.documentElement;

  // Make sure it's not a disconnected DOM node
  if (!jQuery.contains(docElem, elem)) {
    return box;
  }

  // Support: BlackBerry 5, iOS 3 (original iPhone)
  // If we don't have gBCR, just use 0,0 rather than error
  if (typeof elem.getBoundingClientRect !== strundefined) {
    box = elem.getBoundingClientRect();
  }
  win = getWindow(doc);
  return {
    top: box.top + win.pageYOffset - docElem.clientTop,
    left: box.left + win.pageXOffset - docElem.clientLeft
  };
},

jQuery offset

²î¾à²»´ó£¬jQueryµÄ¸ü¼ÓÑϽ÷£¬×Ü»á×öºÜ¶à¼æÈÝ£¬jQuery´óÊÇÓеÀÀíµÄ

MVC¿ò¼ÜÑ¡Ôñ

MVC¿ò¼ÜÁ÷ÐеÄÓÐBackbone¡¢angularJS¡¢reactJS¡¢canJSµÈ£¬ÎÒ¸öÈ˱ȽÏÊìϤBackboneÓëcanJS£¬½üÆÚÒ²ÔÚÕûÀícanJSµÄһЩ±Ê¼Ç

Ê×ÏÈÌáÒ»ÏÂBackbone£¬ÎÒÈÏΪÆä×îÓÅÐãµÄ¾ÍÊÇÆäViewÒ»¿éµÄʵÏÖ£¬BackboneµÄView¹æ·¶»¯ÁËdomʼþµÄʹÓ㬱ÜÃâÁËʼþÀÄÓ㬱ÜÃâÁËʼþ¡°Ê§Ð§¡±

µ«ÊÇBackboneµÄ·ÓÉ´¦ÀíÒ»¿éºÜÈõ£¬ÊÂʵÉÏÒ»µãÓÃҲûÓУ¬¶øÇÒ¾ÍËãviewÒ»¿éµÄ¼Ì³Ð¹ØÏµÒ²·Ç³£ÄÑÒÔ´¦Àí£¬extendʵÏÖÊÇ£º

var extend = function (protoProps, staticProps) {
  var parent = this;
  var child;

  // The constructor function for the new subclass is either defined by you
  // (the "constructor" property in your `extend` definition), or defaulted
  // by us to simply call the parent's constructor.
  if (protoProps && _.has(protoProps, 'constructor')) {
    child = protoProps.constructor;
  } else {
    child = function () { return parent.apply(this, arguments); };
  }

  // Add static properties to the constructor function, if supplied.
  _.extend(child, parent, staticProps);

  // Set the prototype chain to inherit from `parent`, without calling
  // `parent`'s constructor function.
  var Surrogate = function () { this.constructor = child; };
  Surrogate.prototype = parent.prototype;
  child.prototype = new Surrogate;

  // Add prototype properties (instance properties) to the subclass,
  // if supplied.
  if (protoProps) _.extend(child.prototype, protoProps);

  // Set a convenience property in case the parent's prototype is needed
  // later.
  child.__super__ = parent.prototype;

  return child;
};

child.__super__ = parent.prototype;

ÕâÊÇÒ»¶Î¼«ÎªÔã¸âµÄÉè¼Æ£¬ËûÊǽ«parentÔ­Ð͵ÄÖ¸Ïò¸øµ½ÁËÀàµÄµÄÊôÐÔÉÏ£¬ÕâÀï¿ÉÒÔ¿´×ö¾²Ì¬·½·¨£¬ÄÇôÎÒÔÚʵ¼ÊʹÓõÄʱºòÒªÈçºÎʹÓÃÄØ£¿

ÎÒÔÚÄÚ²¿Ô­ÐÍÁ´ÉÏ»òÕßʵÀý·½·¨Ò»°ãʹÓÃthis±ãÄÜÖ¸Ïò±¾Éí£¬µ«ÊÇÈ´²»ÄÜÖ´Ðб¾ÀàµÄ·½·¨£¬Èç¹ûҪʹÓÃÖ¸Ïò¹¹Ô캯ÊýÎÒÐèÒªÕâô×ö£º

this.constructor
this.constructor.__super__

Èç¹ûÎÒÕâÀïÏëÒªÖ´Ðи¸ÀàµÄÒ»¸ö·½·¨£¬»¹µÃ¹Ø×¢Æð×÷ÓÃÓòÖ¸Ïò£¬ÓÚÊÇÖ»ÄÜÕâÑùд

this.constructor.__super__.apply(this, arguments)

¶øÎÒ×ÜÊÇÈÏΪjavascriptµÄconstructδ±Ø·Ç³£¿¿Æ×£¬ÓÚÊÇÕû¸öÈ˶¼²»ºÃÁË£¬ËùÒÔÔÚÒ»ÂÖʹÓú󣬻ù±¾±ã·ÅÆúBackboneÁË£¬µ«ÊÇBackboneÓÅÐãµÄÒ»ÃæÒ²²»ÄÜĨɱ£¬ÎÒÃÇ¿ÉÒÔ½è¼øBackboneʵÏÖһЩ¸ü¼ÓÊʺÏÏîÄ¿µÄ»ù´¡¼Ü×Ó

BackboneÁíÒ»¸öÁîÈËÚ¸²¡µÄµØ·½ÊÇÆä²å¼þÉÙ£¬ÆäʵÕâÀïÓеã¿Á¿Ì£¬Òƶ¯¶Ë²ÅÐËÆð²»¾Ã£¬webappµÄÏîÄ¿ÓÖÉÙ£¬ÕâÀïûÓÐÊǺÜÕý³££¬±ðÈ˵IJå¼þҲδ±ØÄÜÓõÄ˳ÐÄ¡£

angularJsÎÒ±¾ÉíûÓÐʵ¼ÊʹÓùý£¬²»ºÃÆÀ¼Û£¬¸ù¾ÝһЩÅóÓѵÄʵ¼ÊʹÓÃÇé¿ö¿ÉÒԵóöÒ»¸ö½áÂÛ£º

¹æ¶¨µÄ·Ç³£ËÀ£¬ÒµÎñ´úÂë¿É±£³ÖÒ»Ö£¬ÈëÃżòµ¥ÉîÈëÄÑ£¬Ò»µ©³öÏÖÎÊÌ⣬²»Ì«ºÃ¸Ä£¬¶Ô¼¼ÊõÒªÇó½Ï¸ß

ÕâÀï¸÷λ¸ù¾Ýʵ¼ÊÇé¿öÑ¡Ôñ¾ÍºÃ£¬ÎÒÕâÀïµÄ½¨Ò黹ÊÇ×Ô¼º¶Á¶®Ò»¸öMV*µÄ¿ò¼Ü£¬³éÈ¡ÐèÒªµÄÖØÐ´£¬ÏñangularJSÒ»´ÎÉý¼¶£¬Ö®Ç°µÄÏîÄ¿ÈçºÎ¸ú×ÅÉý¼¶£¬ÕâЩÎÊÌâºÜÍ·ÌÛÒ²ºÜʵ¼Ê¡£

Éϴα§×Žâ¾öwebappSEOÄÑÌâʱºò¶ÔreactJSÓÐËù½Ó´¥£¬ÆäÔ´ÂëÑóÑóÈ÷È÷10000ÐУ¬Ã»ÓÐÒ»¶¨¹¦Á¦Óëʱ¼ä»¹ÊÇÔÝʱ²»ÅöΪºÃ¡£

canJSѧϰ³É±¾ÓëBackbone²î²»¶à£¬ÎÒÕâ±ß×¼±¸³öϵÁÐѧϰ±Ê¼Ç£¬ºÃ²»ºÃºóÃæµ÷ÑÐÔÙ˵¡£

×ܽáÒ»¾ä£º²»½¨ÒéÖ±½Ó½«ÒµÎñ¿â¿ò¼ÜÖ±½ÓÈ¡À´Ê¹Ó㬸ü²»½¨ÒéʹÓùýÖØµÄÒµÎñ¿ò¼Ü£¬×îºÃÊÇÄÜÃ÷°×¿ò¼ÜÏëÒª½â¾öµÄÎÊÌ⣬Óë×Ô¼ºÏîÄ¿µÄʵ¼ÊÐèÇó£¬×Ô¼ºÔìÂÖ×ÓÖª¸ùÖªµ×¡£

¿ò¼Ü½¨Òé

×îºÃ¸ø³öÒ»¸öССµÄ½¨Ò飬ϣÍû¶Ô¸÷λÓÐÓãº

µÚÈý·½¿â£¨»ù´¡¿â£©£º

requireJS+Zepto+ÑË¸î°æunderscore£¨½«ÆäÖв»Ì«Óõ½µÄ·½·¨È¥µô£¬Ö÷ҪʹÓÃÄ£°åÒýÇæÒ»¿é£©+ Fastclick

MVC¿â/UI¿â£º

½¨Òé×Ô¼ºÐ´£¬²»ÒªÌ«Ó·Ö×£¬¿ÉÒÔ³­Ï®£¬¿ÉÒÔ½è¼ø£¬²»ÒªÍêÈ«ÄÃÀ´¾ÍÓÃ

ÕâÑù³öÀ´µÄÒ»Ì׿ò¼Ü±È½ÏÇáÁ¿¼¶£¬Öª¸ùÖªµ×£¬²»»á³öÏָIJ»¶¯µÄÇé¿ö£¬×îºóÌáÒ»¾ä£º²»¾­¹ýµ÷ÑУ¬Ã»ÓÐʵ¼Ê³¡¾°ÔÚ¿ò¼ÜÖÐÍæÄ£Ê½£¬Íæ¸ß¼¶ÀíÄîËÀµÃ¿ì£¬²»ÒªÎª¼¼Êõ¶ø¼¼Êõ¡£

ÍøÕ¾ÊÇÈçºÎ±äÂýµÄ£¿

³ß´ç¡ª¡ªÂýµÄ¸ùÔ´

±øÎÞ¶¨ÊÆ£¬Ë®ÎÞ³£ÐΣ¬°´ÕÕ֮ǰËù˵£¬ÎÒÃÇѡȡÁ˶ÔÎÒÃÇ×îÓŵĿò¼Ü£¬×ö³öÀ´µÄÍøÕ¾Ó¦¸ÃºÜ¿ì£¬µ«µÚÒ»ÂÖÐèÇó½áÊøºóÓеڶþÂÖ£¬µÚ¶þÂÖÐèÇó½áÊøºóÓеÚÈýÂÖ£¬ÍøÕ¾°æ±¾»á´Ó1.1-X.1£¬ÒµÎñµÄÔö³¤ÒÔ¼°Êг¡·Ý¶îµÄ½ÇÁ¦´øÀ´µÄÊÇÒ»ÔÂÒ»·¢²¼£¬Ò»¼¾Ò»ÂÖÌæ£¬Ã»Óв»±äµÄµÀÀí¡£

¿ò¼Ü×î´óµÄµÐÈËÊÇÐèÇ󣬴úÂë×î´óµÄµÐÈËÊDZä¸ü£¬×ʼʹÓõÄÊÇ×Ô¼ºÊìϤµÄ¼¼Êõ£¬Í»È»Ò»Ìì¶à³öÁËһЩĪÃûÆäÃîµÄ³¡¾°£º

¢Ù webappģʽºÜ²»´í£¬ÎªÁË¿ìËÙÒµÎñ·¢Õ¹£¬½«½ÓÈëHybrid¼¼Êõ£¬²¢ÇÒʹÓÃÒ»Ì×´úÂë

¢Ú ΢ÐÅÈë¿ÚÒѾ­ºÜ»ðÁË£¬ÎªÁË¿ìËÙÒµÎñ·¢Õ¹£¬½«½ÓÈë΢ÐÅÈë¿Ú£¬²¢ÇÒʹÓÃÒ»Ì×´úÂë

¢Û UI×é¼þÒѾ­¾ÉÁË£¬»»Ò»Åúios8·ç¸ñµÄ×é¼þ°É

¢Ü ȫվÑùʽ¸Ð¾õ¸ú²»Éϳ±Á÷ÁË£¬»»Ò»Ì×°É

ÍøÕ¾±äÂýµÄºËÐÄÔ­ÒòÊdzߴçµÄÅòÕÍ£¬³ß´çÓÅ»¯²ÅÊÇǰ¶ËÓÅ»¯µÄ×îÖØÒªÃüÌ⣬¢Ù¡¢¢Ú³¡¾°ÊDz»¿ÉÔ¤Öª³¡¾°£¬Ãæ¶ÔÕâÖÖ²»¿ÉÔ¤Öª³¡¾°£¬»áдºÜ¶àÇŽӵĴúÂ룬¶øÕâÀà´úÂëÍùÍù×îºó¶¼»áÖ¤Ã÷ÊDz»ºÃµÄ£¡

¿ò¼ÜÊ״δ¦Àíδ֪³¡¾°Ëù×öµÄ´úÂ룬ÍùÍù²»ÊÇ×îÓŵģ¬ÈçHybrid¡¢Èç΢ÐÅÈë¿Ú

Ê£ÏÂÁ½¸ö³¡¾°ÊÇ¿ÉÔ¤¼ûµÄ¸Ä±ä£¬µ«ÊÇ´ËÀà±ä¸ü»á´øÀ´ÁíÒ»¸öÁîÈËÍ·ÌÛµÄÎÊÌ⣬ÐÂÀϰ汾½»Ìæ¡£ÒµÎñ20¶à¸öÒµÎñÍŶӣ¬²»¿ÉÄÜÒ»¸ö°æ±¾±ãÈ«²¿¸Ä±ä£¬±ãÓиöÖð²½ÍƽøµÄ¹ý³Ì¡£

ȫվÑùÊ½Ìæ»»/¶Ôδ֪³¡¾°µÄ´úÂëÓÅ»¯£¬ºÜ¶àʱºòΪÁË×öµ½Í¸Ã÷£¬»á²úÉúÈßÓà´úÂ룬ΪÁË×ö¼æÈÝ£¬³£³£Óкܳ¤Ò»¶Îʱ¼äÐÂÀÏ´úÂë¹²´æµÄÏÖÏó

ÓÚÊDz»¿ÉÔ¤ÖªÔì³ÉµÄ³ß´çÅòÕÍ£¬¾­¹ýÖØ¹¹ÓÅ»¯£¬¶øÎªÁË×ö¼æÈÝ£¬¾ÓÈ»»áÔì³É³ß´ç½øÒ»²½µÄÔö¼Ó

ËùνÓÅ»¯²»Ò»¶¨ÂíÉϱãÓÐЧ¹û£¬¿ª·¢ÈËÔ±ÊÇ·ñ¿¸µÃסÕâÖÖѹÁ¦£¬ÊÇ·ñÓÐÈ«ÍŶÓÍÆ¶¯µÄÄÜÁ¦»á±äµÃ±È±¾Éí¼¼ÊõÄÜÁ¦¸ü¼ÓÖØÒª

ÊÂʵÉϵÄÇé¿ö¸´ÔӵĶ࣬ÒÔÉÏÖ»ÊÇÒ»ÏáÇéÔ¸µÄÒÔ¡°½Ó¿Úͳһ¡±¡¢¡°Í¸Ã÷Éý¼¶¡±ÎªÇ°Ìᣬµ«ÊÇ͸Ã÷µÄ´ú¼ÛÊÇÒªÔÚÖØ¹¹´úÂëÖÐ×ö¼æÈÝ£¬¶ø¼æÈÝÓÖ±¾ÉíÊÇÐèÒªÖØ¹¹µôµÄ¶«Î÷£¬µ±¼æÈݲúÉúµÄ´úÂë±ÈÓÅ»¯»¹¶àµÄʱºò£¬ÎÒÃÇ¿ÉÄܾͻá·ÅÆú¼æÈÝ£¬¶øÌṩһÌ×½Ó¿ÚÍêÈ«²»Í³Ò»µÄ¶«Î÷£»¸ü¼ÓÕæÊµÇé¿öÊÇÎÒÃǸù±¾²»»áÈ¥×öÕâÖֶԱȣ¬±ãÖ±½Ó½«ÀϽӿڷϵô£¬Õâ¸öʱºòÔì³ÉµÄÓ°ÏìÊÇ¡°ÌìÅ­ÈËÔ¹¡±£¬µ«ÊÇÎÒÃÇˬÁË£¬Ë¬Á˵Ĵú¼ÛÊǵ¥¸öÍŶӵÄÍÆ¶¯°²¸§¡£

ÕâÀïÇë²Î¿¼angularJSÉý¼¶£¬ÐÂÀË΢²©2.0½Ó¿ÚÓë1.1²»¼æÈÝÎÊÌ⣬ÕâÀïµÄ΢ÐŽӿÚÌá³ö£¬Äѱ£Ò»Äêºó²»»áÍêÈ«ÍÆ·­......

ËùÒÔ£¬³ß´ç±ä´óµÄÖ÷ÒªÔ­ÒòÊÇÒòΪÈßÓà´úÂëµÄ²úÉú£¬ÈçºÎÏû³ýÈßÓà´úÂëÊÇÒ»¸öÖØµã£¬Ò²ÊÇÒ»¸öÄѵ㡣

°æ±¾ÂÖÌæ¡ª¡ªÄÄЩÄÜɾµÄÍ´µã

ÊýÔºó£¬20¶à¸öÍŶÓϤÊýÇÐÈëµ½×îеĿò¼Ü£¬ÁíÒ»¸öÁîÈËÍ·ÌÛµÄÎÊÌâÂíÉÏÓÖ³öÀ´ÁË£¬ËäÈ»´ó¼ÒÑùʽ¶¼½ÓÈëµ½×îеķç¸ñÁË£¬µ«ÊÇÀϵÄÑùʽÄÄЩÄÜɾ£¿ÄÄЩ²»ÄÜɾÓÖÊÇÒ»¸öÁîÈËÍ·ÌÛµÄÎÊÌâ¡£

¼¸¸öÔÂǰά»¤CSSͬÊÂÏÓ¹¤×ʵÍÁË£¬»»ÁËÒ»¸öͬÊÂά»¤È«Õ¾»ù´¡css£»ÔÙ¹ýÁËÒ»¶Îʱ¼ä£¬×éÖ¯¼Ü¹¹µ÷Õû£¬ÓÖ»»ÁËÒ»¸öͬÊÂά»¤£»ÔÙ¹ýÁËÒ»¶Îʱ¼ä£¬ÕýÔÚά»¤cssµÄͬʾõµÃ×Ô¼º¼¶±ðµÍÁË£¬ÔÚ¹«Ë¾ÄÚ²¿µÈ´ý½ú¼¶È·Êµ°¾²»×¡£¬ÓÚÊÇÒ²×ßÁË¡£Õâ¸ö»ù´¡cssٲȻ±ä³ÉÁËÒ»±ÊÀÃÕË£¬Ë­Ò²²»¸Òɾ£¬Ë­Ò²²»Ô¸Ò⶯£¬¶¯Ò»Ï´íһϡ£

Õâ¸öÎÊÌâ±íÃæÉÏ¿´ÊÇÒ»¸öcssÎÊÌ⣬ÆäʵÕâÊÇÒ»¸öǰ¶ËÄÑÌ⣬ҲÊǹý¶È½âñ²ð·Ö»úÖÆ²»ÕýÈ·´øÀ´µÄÂé·³¡£

CSSÊÇǰ¶Ë²»¿É·Ö¸îµÄÒ»²¿·Ö£¬HTMLÄ£°åÓëJavascript¿ÉÒÔÓÃrequireJS´¦Àí£¬ºÜ´ó³Ì¶ÈÉϽâ¾öÁËjavascript±äÁ¿ÎÛȾµÄÎÊÌ⣬cssÒ»°ã±»Ò»Æð·ÖÀëÁ˳öÀ´£¬µ¥¶À´æ·Å¡£Ò»¸ömain.css°üº¬È«Õ¾ÖØÖõÄÑùʽ£¬±íµ¥¡¢ÁÐ±í¡¢°´Å¥µÄ»ù´¡Ñùʽ£¬ÍêÁ˾ÍÊÇȫվ»ù´¡µÄUI×é¼þ¡£

×ÜÓÐÒµÎñÍŶÓÔÚʵ¼Ê×öÏîĿʱ»á²»×ÔÖ÷µÄʹÓÃmain.cssÖеÄһЩ¹¦ÄÜ£¬Èç¹ûÖ»ÊÇʹÓÃÁË»ù´¡µÄÖØÖû¹ºÃ£¬µ«ÊÇÒ»µ©ÕæµÄʹÓÃÆäÖÐͨÓÃµÄ±íµ¥¡¢ÁбíµÈ±ã2BÁË.

main.cssµÄ³õÖÔµ±È»Êǽ«¸÷¸öÒµÎñÍŶÓͨÓõIJ¿·ÖÌáÁ¶³öÀ´£¬ÊÂʵÉÏÒ²¸ÃÕâÑù×ö£¬µ«ÀíÏëºÜ·áÂú£¬ÏÖʵºÜ²Ð¿á£¬²»Í¬µÄÈ˶ÔSEO¡¢¶ÔÓïÒ廯¶ÔÃüÃûµÄÀí½â²»Ì«Ò»Ñù£¬»»Ò»¸öÈ˾ͻỻһÌ×¶«Î÷¡£µÚÒ»ÅúÏîÄ¿ÉÏÏߺ󣬹ýÁ˼¸¸öÔ£¬¿ª·¢ÈËÔ±³É³¤·Ç³£¾Þ´ó£¬¶ÔÔ­À´µÄÃüÃû½á¹¹£¬ÍêÈ«²»Ï÷Ò»¹Ë£¬×Ô¼ºµ¹ÌÚ³öÒ»Ì×ÐµĶ«Î÷£¬Èø÷¸öÍŶӻ»ÉÏÈ¥£¬ÆäËüÍŶÓÃæ¶ÔÕâÖÖÒªÇóÊǼ°ÆäÍ·Ì۵ģ¬ÒòΪ¸÷¸öÍŶӻáÓÐ×Ô¼ºµÄCSSÍŶӣ¬ÕâÑùÒ»¸ãÊÆ±Ø¸ÃÒµÎñÍŶӵÄHTML½á¹¹ÓëCSSÒª±»·­ÐÂÒ»´Î£¬ÕâÑùµÄÒâÒåÊÇʲô£¬±ã²»Ì«Ã÷ÏÔÁË¡£2¸öÐÇÆÚ¹ýÈ¥ÁË£¬ÐÂÒ»Åú¡°¹æ·¶»¯¡±µÄ½á¹¹ÖÕÓÚÉÏÏßÁË£¬2¸öÔºóËùÓеÄÒµÎñÍŶÓÈ«²¿½ÓÁËеĽṹ£¬Ëƺõ½Ô´ó»¶Ï²£¬µ«ÊÇÄǸöͬʱ»ÁíÒ»¸öÍŹ«Ë¾ÍÚ¹ýÈ¥µ±Ç°¶ËleaderÁË£¬ÓÚÊÇÒ»´óȺ²ÝÄàÂíÕýÔÚÏòÒµÎñÍŶӵľջ¨±¼ÌÚ¹ýÈ¥£¡ÕâÀïµÄ½¨ÒéÊÇ£º

ÒµÎñÍŶӲ»ÒªÒÀÀµÓÚ¿ò¼ÜµÄÈκÎdom½á¹¹ÓëcssÑùʽ£¬Ìرð²»Òª½«UI×é¼þÖеÄdom½á¹¹ÓëÑùʽµ¥¶À¿Ù³öÀ´Ê¹Ó㬷ñÔò¾Í×¼±¸·ÊÔí°É

CSSÈßÓàµÄ½â¾ö·½°¸

¶Ôǰ¶Ë¾ßÓÐʵ¼ÊÍÆ¶¯×÷Óõģ¬ÎÒ¾õµÃÓÐÒÔϼ¼Êõ£º

¢Ù jQuery£¬½â¾öIEʱ´úÁîÈËÍ·Ì۵ļæÈÝÎÊÌâ

¢Ú ÒÆ¶¯À˳±£¬ÈÃHTML5ÓëCSS3Á÷ÐÐÆðÀ´

¢Û requireJS£¬Ä£¿é»¯¼ÓÔØ¼¼ÊõÈÃǰ¶Ë¿ª·¢ÄÜЭͬ×÷Õ½£¬Ò²Ò»¶¨Ï޶ȵıÜÃâÁËÃüÃûÎÛȾ

¢Ü Hybrid£¬Hybrid¼¼Êõ½«Ç°¶ËÍÆÏòÁËÒ»¸öǰËùδÓеĸ߶ȣ¬ÕâÃż¼ÊõÈÃǰ¶ËËÁÎ޼ɵ¬µÄÇÖÕ¼×ÅnativeµÄ·Ý¶î

Èç¹û˵½ÓÏÂÀ´»áÓÐÒ»Ãż¼Êõ»á¼ÌÐøÍÆ¶¯Ç°¶Ë¼¼Êõ·¢Õ¹£¬ÓпÉÄÜÊÇweb components£¬»òÕß³öÏÖÁËеÄÉ豸¡£

web componentÊÇǰ¶Ë¼¸Ïî¼¼ÊõµÄÈںϣ¬ÀïÃæÓÐÒ»ÏÄÜΪshadow dom£¬shadow domÊÇÒ»ÖÖä¯ÀÀÆ÷ÐÐΪ£¬ËûÔÊÐíÔÚdocumentÎĵµÖÐäÖȾʱ²åÈëÒ»¸ö¶ÀÁ¢µÄdom×ÓÊ÷£¬µ«Õâ¸ödomÊ÷ÓëÖ÷domÊ÷ÍêÈ«·ÖÀëµÄ£¬²»»á»¥ÏàÓ°Ïì¡£ÒÔÒ»¸ö×é¼þΪÀý£¬ÊÇÕâ¸öÑù×ӵģº

Ò»¸ö×é¼þ¾ÍÖ»ÓÐÒ»¸ödivÁË£¬ÕâÊÇÒ»¼þºÜ°ôµÄÊÂÇ飬µ«Êµ¼ÊµÄÖ§³ÖÇé¿ö²»ÈÝÀÖ¹Û£º

È»ºóweb components»¹»áÓÐһЩ¸½´øµÄÎÊÌ⣺

¢Ù cssÓëÈÝÆ÷Ò»Æð³öÏÖ£¬¶øÃ»ÓÐÔÚÒ»¸öÎļþÖУ¬ÔںܶàÈË¿´À´ºÜ¡°Ææ¹Ö¡±£¬ÎÒ×î³õÒ²¾õµÃÓеã¹Ö

¢Ú ´ó¹æÄ£Ê¹Óúó£¬ÓÃÓÚ×°ÔØHTMLµÄÈÝÆ÷×é¼þÈçºÎ´¦Àí£¬ÈÔȻûÓÐÒ»¸öºÜºÃµÄ·½°¸

¢Û ¶ÔÓÚ²»Ö§³ÖµÄÇé¿öÈçºÎ×ö½µ¼¶£¬ÈçºÎ×îС»¯´úÂë

¢Ü ûÓдó¹æÄ£Ê¹ÓõݸÀý£¬ÖÁÉÙ¹úÄÚûÓкܺõÄÑéÖ¤¹ý

ÆäÖÐshadow dom˼ÏëÒ²Êǽâ¾öcssÖØ¸´µÄÒ»¸ö°ì·¨£¬ÒÔÒ»¸öÒ³ÃæÎªÀý£¬ËûÔÚÔ­À´µÄ½á¹¹ÊÇÕâ¸öÑù×ӵģº

main.css

view1.js
view1.html

view2.js
view2.css

¿ª·¢µÄʱºòÊÇÕâ¸öÑù×Ó£º

view1.css
view1.js
view1.html

×îÖÕ·¢²¼ÊÇÕâ¸öÑù×Ó£º
view1.js

ÕâÒ»Çй鹦ÓÚrequireJSÓëgrunt´ò°ü¹¤¾ß£¬ÕâÀï¸øÒ»¸öʵ¼ÊµÄÀý×Ó£º

ÕâÀï×îÖջᱻ´ò°ü±àÒëΪһ¸öÎļþ£º

ÕâÑùµÄ»°°æ±¾UIÉý¼¶Ö»ÓëjsÓйØÏµ£¬requireJSÅäÖü´¿É£¬ÕâÀïÖ»ÊÇUIµÄÓ¦Ó㬺ÜÈÝÒ×±ã¿ÉÒÔÀ©Õ¹µ½page view¼¶±ð£¬Ê¹Óõõ±µÄ»°ÂèÂèÔÙÒ²²»ÓùØÐÄÎÒÃǵİ汾Éý¼¶ÒÔ¼°cssÈßÓàÁË

ÕâÀï´¦Àí½µ¼¶Ê±£¬»á¸øcss¼Óǰ׺£¬ÈçÒ»¸ö×é¼þidΪui£¬ÆäÖеÄcss»á±àÒëΪ

#ui * {}
#ui div {}

ÓÉÓÚcssÑ¡ÔñÆ÷ÊÇÓÉÓÒÖÁ×óµÄ£¬ÕâÖÖ´úÂë²úÉúµÄËÑË÷ÏûºÄÊÇÒ»¸öȱµã£¬µ«ÊÇÓë³ß´çµÄ½µµÍ±ÈÆðÀ´±ã²»Ëãʲô

ÍøÂçÇëÇó

ÇëÇóÊÇǰ¶ËÓÅ»¯µÄÉúÃü£¬ÓÅ»¯µ½×îºó£¬ÓÅ»¯µ½¼«Ö£¬¶¼»áÔÚÇëÇóÊý¡¢ÇëÇóÁ¿ÉÏ×öÎÄÕ£¬³£Óò¢ÇÒʵÓõÄÊÖ¶ÎÓУº

¢Ù CSS Sprites

¢Ú lazyload

¢Û ºÏ²¢½Å±¾jsÎļþ

¢Ü localsorage

......

ÎÞÂÛCDN»¹ÊÇGzip£¬¶¼ÊÇÔÚ´«ÊäÉÏ×öÎÄÕ£¬½ðÎÞ×ã³à£¬ÔÂÎÞ³£Ô²£¬ÒÔÉϼ¼ÊõÊֶνÔÓÐÆäȱÏÝ£¬ÊÇÐèÒªÑéÖ¤µÄ£¬ÈçºÎÕýÈ·Ç¡µ±µÄʹÓã¬ÎÒÕâÀï̸ÏÂÎÒµÄÀí½â

CSS Sprites

CSS Sprites¿ÉÒÔÓÐЧµÄ¼õµÍÇëÇóÊý£¬Å¼¶û»¹¿ÉÒÔ½µµÍÇëÇóÁ¿£¬µ«ÊÇËæ×Å·¢Õ¹£¬¿ÉÄÜ»áÓÐÒÔÏÂÎÊÌ⣺

¢Ù ÐÂÔöÄÑ£¬ÌرðÊÇcssά»¤¹¤×÷»»È˵ÄÇé¿öÏÂ

¢Ú ɾ³ýÄÑ£¬Õâ¸öÎÊÌâ¸ü¼ÓÃ÷ÏÔ£¬1Äêºó£¬Ç°¶Ë·ç¸ñÒѾ­»»ÁËÁ½ÅúÁË£¬ÕâÀïÒªÖªµÀÄÄЩͼ±ê»¹ÔÚÓã¬ÄÄЩûÓñäµÃ·Ç³£À§ÄÑ

¢Û µ÷ÕûÄÑ£¬Ò»¸öͼ±ê¸Õ¿ªÊ¼ÊǺìÉ«£¬Í»È»ÐèÒª±ä³ÉÀ¶É«£¬ÕâÀàÐèÇó»áÈÃÕâ¸ö¹¤×÷±äµÃ²»ÇáËÉ

¢Ü ÏìӦʽ£¬Õâ¸ö¸ü»áµ¼ÖÂÖ¸Êý¼¶µÄÔö³¤£¬±³¾°Í¼ÒªËæ×Å¿í¶ÈËõ·ÅÕâÖÖÐèÇó¸ü¼ÓÌÖÑá

ÕâÀï·ÅÒ»ÕÅ×öµÄºÜºÃµÄͼ£º

ÓÉͼËùʾ£¬ÕâÀïÊǶԳߴç×öÁËÒ»¶¨Çø·ÖµÄ£¬µ«ÊÇÕâÀïÈÔÈ»²»ÊÇ×îÓÅ£¬ÆäʵÒÔÉϺܶàͼ±ê¿ÉÒÔÖ±½ÓÓÉCSS3ʵÏÖ£¬ÕâÀï¾Ù¸ö°¸Àý£º

ÕâÀïÓÅÁÓÖ®·Ö¸÷λ×Ô¼ºÅжϣ¬ÎÒ·´ÕýÍêȫƫÏòÁËCSS3......

ΪʲôҪ½µµÍÇëÇóÊý

ÇëÇóÏûºÄ

ÿ´ÎhttpÇëÇó¶¼»á´øÉÏһЩ¶îÍâÐÅÏ¢£¬±ÈÈçcookieÿ´Î¶¼»á´øÉÏ£¬ÉÏÊöµÄCSS SpritesµÄÒâÒå¾ÍÊÇ£¬µ±ÇëÇóÒ»¸ögzipºó»¹²»µ½1KµÄͼ±ê£¬¸ã²»ºÃÇëÇóÊý¾Ý±Èʵ¼ÊÐèÇóÊý¾Ý»¹´ó

¶øÒ»´Îhttp»¹»áµ¼ÖÂÆäËü¿ªÏú£¬Ã¿´Î¶¼»á¾­ÀúÓòÃû½âÎö¡¢¿ªÆôÁ¬½Ó¡¢·¢ËÍÇëÇóµÈ²Ù×÷£¬ÒÔÒ»¸öͼƬÇëÇóÔÚÕý³£ÍøËÙÓë2GÇé¿öÀ´Ëµ£º

¿ÉÒÔ¿´µ½£¬ÔÚÍøËÙÕý³£µÄÇé¿öÏ£¬µÈ´ýÏûºÄµÄʱ¼ä¿ÉÄܱȴ«Ê仹¶à£¬Õâ¸öʱºò£¬CSS SpritesµÄÒâÒå¾ÍÂíÉϳöÀ´ÁË£¬ÕâÀïÔÙ˵һ¸öÎÊÌâ²¢ÐмÓÔØµÄÎÊÌâ¡£

ä¯ÀÀÆ÷²¢·¢Êý

ÎÒ֮ǰÅöµ½Ò»´ÎͼƬ¼ÓÔØ×èÈûjsµÄ°¸Àý£¬Æä³öÏÖÔ­Òò¾ÍÊÇä¯ÀÀÆ÷²¢·¢ÊýÏÞÖÆ£¬ÕâÀïÒÔÒ»¸öͼΪÀý£º

chromeÔÚÇëÇó×ÊÔ´Ï»áÓÐËùÏÞÖÆ£¬Òƶ¯¶ËµÄÏÞÖÆÆÕ±éÔÚ6¸ö×óÓÒ£¬Õâ¸öʱºòÔÚ²¢·¢Êý±»Õ¼Âúʱ£¬ÄãµÄajax±ã»á±»¸éÖã¬ÕâÔÚwebappÖÐÇé¿ö¸ü¼Ó³£¼û£¬ËùÒÔÍøÂçÏÞÖÆµÄÇé¿öÏÂÇëÇóÊý¿ØÖÆÊDZØÒªµÄ£¬¶øÇÒ¿ÉÒÔ½µµÍ·þÎñÆ÷¶ËµÄѹÁ¦¡£

ÀëÏß´æ´¢

¹¤×÷ÖÐʵ¼ÊʹÓõÄÀëÏß»º´æÓÐlocalstorageÓëApplication cache£¬ÕâÁ½¸ö½ÔÊǺö«Î÷£¬Ò»¸ö³£ÓÃÓÚajaxÇëÇ󻺴棬һ¸ö³£ÓÃÓÚ¾²Ì¬×ÊÔ´»º´æ£¬ÕâÀï¼òµ¥ËµÏÂÎÒµÄһЩÀí½â¡£

localstorage

Ê×ÏÈlocalsorageÓÐ500Íò×Ö·ûµÄÏÞÖÆ£¬»ù±¾À´Ëµ¾ÍÊÇ5M×óÓÒµÄÏÞÖÆ£¬ä¯ÀÀÆ÷¸÷Óв»Í¬£¬Ò²»áÓжÁдµÄÐÔÄÜËðºÄ£¬ËùÒÔ²»ÄܺÁÎÞÏÞÖÆµÄʹÓÃ

localstorage²»±»ÅÀ³æÊ¶±ð£¬²»ÄÜ¿çÓò¹²Ïí£¬ËùÒÔ²»ÒªÓÃÒÔ´æ´¢ÒµÎñ¹Ø¼üÐÅÏ¢£¬¸ü¼Ó²»Òª´æ´¢°²È«ÐÅÏ¢£¬Òª×öµ½ÓУ¬½õÉÏÌí»¨£»ÎÞ£¬ºÁÎÞÓ°Ïì²ÅÐУº

¢Ù 500Íò×Ö·ûÏÞÖÆ

¢Ú Ò»°ã´æ´¢ajaxÇëÇó·µ»ØÊý¾Ý£¬²¢ÇÒÐèÒªÉèÖùýÆÚʱ¼ä

¢Û ¾ßÓÐÇåÀí»úÖÆ£¬½«¹ýÆÚÊý¾ÝÇåÀí

¢Ü ²»´æ´¢Ãô¸ÐÐÅÏ¢

¢Ý ²»´æ´¢SEOÒÀÀµÊý¾Ý£¬ÖÁÉÙ²»ÄÜÑÏÖØÒÀÀµ

¢Þ Òþ˽ģʽlocalstorage²»¿É¶Áд£¬ËùÒÔ²»ÄÜÓÃËüÀ´×öÒ³ÃæÍ¨ÐÅ

¢ß localstorage¶ÁдÓÐÐÔÄÜËðºÄ£¬´óÊý¾Ý¶ÁдҪ±ÜÃâ

Application cache

Application cacheÊÇHTML5ÐÂÔöapi£¬ËäÈ»¶¼ÊÇ´æ´¢£¬È´Óëlocalstorage¡¢cookie²»Ì«Ïàͬ£¬Application cache´æ´¢µÄÊÇÒ»°ãÊǾ²Ì¬×ÊÔ´£¬ÔÊÐíä¯ÀÀÆ÷ÇëÇóÕâЩ×ÊԴʱ²»±ØÍ¨¹ýÍøÂ磬Éè¼ÆµÃµ±µÄÇé¿ö¿ÉÒÔÈ¡´úHybridµÄ´æ´¢¾²Ì¬×ÊÔ´£¬Ê¹ÓÃApplication cacheÖ÷ÒªÓŵãÊÇ£º

ʹÓÃApplication cache¿ÉÒÔÌáÉýÍøÕ¾ÔØÈëËÙ¶È£¬Ö÷ÒªÌåÏÖÔÚÇëÇó´«ÊäÉÏ£¬°ÑһЩhttpÇëÇóתΪ±¾µØ¶ÁÈ¡£¬ÓÐЧµØ½µµÍÍøÂçÑÓ³Ù£¬½µµÍhttpÇëÇó£¬Ê¹Óüòµ¥£¬»¹½ÚÔ¼Á÷Á¿ºÎÀÖ¶ø²»Îª£¿

¶øÎÞÂÛʲô´æ´¢¼¼Êõ¶¼»áÓпռäÏÞÖÆ£¨¾Ý˵ÊÇ5M£©£¬ÕâÀï¸üеĻúÖÆÊÇ×îÎªÖØÒªµÄ£¬ÕâÀïÊÇÎÒÃÇʹÓõĽáÂÛ£º

application cacheÊǾø¶ÔÖµµÃʹÓõģ¬ÊÇ¿ÉÒÔ½õÉÏÌí»¨¡£µ«ÔõôÓã¬ÓöàÉÙÊÇÐèÒª¿¼Âǵĵ㡣ÓÉÓÚÔ­ÀíÉÏ£¬application cacheÊǰÑmanifestÉϵÄ×ÊÔ´Ò»ÆðÏÂÔØÏÂÀ´£¬ËùÒÔmanifestÀïµÄÄÚÈݲ»Ò˹ý¶à£¬Êý¾ÝÁ¿²»Ò˹ý´ó£»ÓÉÓÚmanifestµÄ½âÎöͨ³£ÒÔÒ³ÃæË¢ÐÂΪ´¥·¢µã£¬ÇÒ¸üÐµĻº´æ²»»áÁ¢¼´±»Ê¹Óã¬ËùÒÔ»º´æµÄ×ÊÔ´Ó¦ÒÔ¾²Ì¬×ÊÔ´¡¢¸üÐÂÆµÂʱȽϵ͵Ä×ÊԴΪÖ÷¡£ÁíÍâÒª×öºÃ¶ÔmanifestÎļþµÄ¹ÜÀí£¬ÓÉÓÚÇåµ¥ÄÚÎļþ²»¿É·ÃÎÊ»òmanifest¸üв»¼°Ê±Ôì³ÉµÄһЩÎÊÌâ¡£

¿ìµÄ¼ÙÏó

³ýÁËÕæÊµÊÖ¶ÎÓÅ»¯´úÂë´¦Àí³ß´ç£¬½µµÍÇëÇóÊý£¬ÈÔÈ»ÓÐһЩ´øÓС°ÆÛÆ­¡±ÐÔÖʵļ¼Êõ¿ÉÒÔ×öÊ×Ò³¼ÓÔØµÄÓÅ»¯£¬±ÈÈçlazyload¡¢fakeÒ³

lazyload

ÎÒÃdz£ËµµÄÑÓ³Ù¼ÓÔØÊÇͼƬÑÓ³Ù¼ÓÔØ£¬Æäʵ·ÇͼƬҲ¿ÉÑÓ³Ù¼ÓÔØ£¬¿´Êµ¼ÊÐèÇó¼´¿É£¬ÕâÀïµãµ½¼´¿É£¬²»ÔÙ¶à˵¡£

Ϊimg±êÇ©srcÉèÖÃͳһµÄͼƬÁ´½Ó£¬¶ø½«ÕæÊµÁ´½ÓµØÖ·×°ÔÚ×Ô¶¨ÒåÊôÐÔÖС£
ËùÒÔ¿ªÊ¼Ê±ºòͼƬÊDz»»á¼ÓÔØµÄ£¬ÎÒÃǽ«Âú×ãÌõ¼þµÄͼƬµÄsrcÖØÖÃΪ×Ô¶¨ÒåÊôÐÔ±ã¿ÉʵÏÖÑÓ³Ù¼ÓÔØ¹¦ÄÜ

fakeÒ³

ÎÒÃÇÓ¦¸Ã±ÜÃâÒ³Ãæ³¤Ê±¼ä°×Ò³£¬ËùÒÔ»á³öÏÖfakeÒ³µÄ¸ÅÄî£¬Ò³ÃæäÖȾ½ö½öÐèÒªHTMLÒÔ¼°CSS£¬Õâ¸ö±ãÊǵÚÒ»¸öÓÅ»¯µã£¬js¶ÔÓÚÏÔʾ²»ÊDZØÐ룬ajaxÒ²²»ÊÇ¡£

ÈôÊÇÈÎÓÉjs¡¢ajax¼ÓÔØÍê³ÉÔÙäÖÈ¾Ò³Ãæ£¬Óû§ºÜÓпÉÄÜʧȥÄÍÐÄ£¬ËùÒÔ¸ãһЩÄÚǶµÄcssÒÔ¼°Í¨ÓõÄhtmlÔÚÊ×Ò³ËÆºõÊÇÒ»¸ö²»´íµÄÑ¡Ôñ

Ò»¸ö¾²Ì¬HTMLÒ³Ãæ£¬×°ÔØÊׯÁµÄ»ù±¾ÄÚÈÝ£¬ÈÃÊ×Ò³¿ìËÙÏÔʾ£¬È»ºójs¼ÓÔØ½áÊøºó»áÂíÉÏÖØÐÂäÖȾÕû¸öÒ³Ãæ£¬Õâ¸öÑù×Ó£¬Óû§¾Í¿ÉÒԺܿìµÄ¿´µ½Ò³ÃæÏìÓ¦£¬¸øÓû§Ò»¸ö¿ìµÄ´í¾õ

Ô¤¼ÓÔØ

ÕâÀïµÄÔ¤¼ÓÔØÊÇÔÚä¯ÀÀÆ÷¿ÕÏеÄʱºò¼ÓÔØºóÐøÒ³ÃæËùÐè×ÊÔ´£¬ÊÇÒ»ÖÖÀË·ÑÓû§Á÷Á¿µÄÐÐΪ£¬ÊôÓÚÒԿռ任ʱ¼äµÄ×ö·¨£¬µ«ÊÇÕâ¸öʵʩÄѶȱȽϸߡ£

Ô¤¼ÓÔØµÄǰÌáÊDz»Ó°ÏìÖ÷³ÌÐòµÄÇé¿öÏÂ͵͵µÄ¼ÓÔØ£¬Ò²¾ÍÊÇÔÚä¯ÀÀÆ÷¿ÕÏеÄʱºò¼ÓÔØ£¬µ«ÊÇä¯ÀÀÆ÷¿ÕÏÐËÆºõ±äµÃ²»¿É¿ØÖÆ

ä¯ÀÀÆ÷¿ÕÏв»¿ÉÅжϣ¨Èç¹ûÄúÖªµÀÇëÁôÑÔ£©£¬ÎÒÃÇÅжϵıê×¼Êǵ±Ç°Ã»ÓÐdomʼþ²Ù×÷£¬Ã»ÓÐajax

¿ÉÒÔ¿´³ö£¬ÓÉÓÚä¯ÀÀÆ÷ûÓпÕÏеĻص÷£¬ËùÒÔÎÒÃÇÖ»ÄÜ×Ô¼ºÊµÏÖ£¬ÕâÀàµÄʵÏÖ²»Ì«¿¿Æ×£¬ÎÒÃǵÄÔ¤¼ÓÔØ×öµÄ¾ÍºÜ´Ö±©£¬Òª×öÔ¤¼ÓÔØÐèҪעÒâÒÔϼ¸µã£º

¢Ù ä¯ÀÀÆ÷¿ÕÏÐÐèÒªÒ»¸öÅжϻúÖÆ

¢Ú ÿ´Î¿ÕÏÐʱÐèÒªÓÐÒ»¸ö¶ÓÁÐÒ»µãÒ»µãµÄ¼ÓÔØ×ÊÔ´£¬·ñÔòÇëÇóÒ»µ©·¢³öºÜÈÝÒ×Ó°ÏìÖ÷Âß¼­

¢Û ×öºÃÔ¤¼ÓÔØ×ÊÔ´¶ÓÁÐµÄÆ¥ÅäËã·¨£¬¿ÉÒÔÊÇÒµÎñÍŶÓÅäÖÃ

ÒÆ¶¯¸ïÃü¡ª¡ªHybrid

Hybrid¼¼Êõ½«Ç°¶ËÍÆµ½ÁËǰËùδÓеĸ߶ȣ¬µ«ÊÇHybrid¿ª·¢Öб¾ÉíÒ²ÓÐһЩÐèҪעÒâµÄµØ·½£¬ÕâÀïÈç¹û³öÏÖÁËÉè¼ÆÉϵÄʧÎó»á¶ÔºóÆÚÒµÎñÍŶӿª·¢´øÎÊÌ⣬Óм¸µã¿ÉÒÔ×¢Òâ

¾Ü¾ønative UI

×î³õµÄappÒ»°ãÊÇnative¿ª·¢µÄ£¬HybridÒÀÈ»ÒÀÀµÓÚnative¿ª·¢ÈËÔ±£¬µ«ÊÇÇëÒ»¶¨¾Ü¾øÈκÎnativeΪwebviewÌṩÈκÎÒµÎñÀàUI£¬Ç¿ÊƵĶÔnative˵²»£¡£¡£¡

×î³£¼ûµÄµÄÇé¿öÊÇ£¬nativeΪǰ¶ËÌṩһ¸önativeµÄÍ·£¬ÏÂÃæÊÇÒ»¸öwebview×°ÔØhtmlÓëcss£¬Õâ¸öÊÇÒ»¼þ·Ç³£¿ÓµÄÊÂÇé

HybridÖÐʹÓÃnativeµÄÍ·£¬ÊÇÎÒ¾õµÃ×îÍ·ÌÛµÄÊÂÇ飡£¡£¡

Ϊʲô»áʹÓÃnativeµÄÍ·ÄØ£¿µ±Ê±½»ÉæµÄ½á¹ûÊÇ£º

¢Ù javascriptÈÝÒ×±¨´í£¬Ò»µ©³ö´í£¬Ò³Ãæ»áÏÝÈë¼ÙËÀ

¢Ú ½øÈëwebviewʱ£¬Ò³ÃæÓÐÒ»¸ö×¼±¸¶¯×÷£¬×ÊÔ´ÓÉnativeÈ¡ºÜ¿ì£¬ÓÉÏßÉÏÈ¡ºÜÂý£»ÎÞÂÛÈçºÎ»á³öÏÖÒ»¶Îʱ¼äµÄ°×Ò³

ÆäʵÉÏÊö½ÔÊÇ¿ÉÒÔ½â¾öµÄ£¬HybridÖÐ»á´æÔÚnativeÍ·µÄÖ÷ÒªÔ­Òò»¹ÊÇ·ÀÖ¹Ò³ÃæÂÒдjs³ö´í£¬µ«ÊÇÒ»°ãÒâÒåµÄapp²»ÊÇ΢ÐÅÕâÀàÈÝÆ÷Èí¼þ£¬ÀïÃæµÄÒ³ÃæÊÇ¿ª·¢ÈËÔ±¾­¹ýÑϸñ²âÊÔд³öÀ´µÄ£¬js³ö´í»á¼ÙËÀ£¬native´úÂë³ö´í»¹»áÉÁÍËÄØ¡£ÎÊÌâÒ»£¬Õ¾²»×¡½Å£¬¶øÇÒÍêÈ«¿ÉÒÔʹÓÃÕâÖÖ·½Ê½´¦Àí£º

<header >
<a class="header" href="taobao://wireless">ºóÍË</a>
<h1 class="js_title">
±êÌâ
</h1>
</header>

¾ÍËãÊÇjs±¨´í£¬ÎÒÕâÀï¼ÙÉèÒ»À´¾Í±¨´í£¬´¦´¦±¨´í£¬µ«ÒÔÉÏЭÒénativeÊÇÒ»¶¨¿ÉÒÔ²¶×½µÄ£¬jsÕýÈ·µÄÇé¿ö±ãe.preventDefault()£¬´íÎó±ãÌø»ØÊ×Ò³£¬Õâ¸ö²»ÊDz»¿É´¦Àí¡£

ÎÊÌâ¶þÆäʵÓëÎÊÌâÒ»Ò»Ö£¬×î³õ½øÈëµÄʱºòÃ÷Ã÷¿ÉÒÔÓиö¿É¹Ø±ÕµÄnative loading£¬ÔÚwebview¼ÓÔØºÃºóÔÙϵͳ¼¶±ðµÄ¹Ø±Õloading¼´¿É£¬Ã»ÓÐʲô²»Äܽâ¾öµÄ¡£

Ö®ËùÒÔÎÒÕâÀï»áÈç´Ë¼¤ÁҵľܾønativeÌṩµÄÍ·£¬ÊÇÒòΪH5Ò³ÃæÊÇÒ»°ãÊÇÈýÌ×¹²Óã¬H5Õ¾µã£¬ios£¬android£¬¶øH5µÄdom²Ù×÷ǧ±äÍò»¯£¬Í·²¿Ò»Ð©Ææ¹ÖµÄÐèÇóչʾ£¬native¸ù±¾ÎÞ´ÓÖ§³Ö£¬ÕâÀﻹ»áÉæ¼°¿çÍŶӺÏ×÷£¬ËùÒÔHybrid¿ªÊ¼µÄʱºòÒ»¶¨Òª¼á¾öµÖÖÆnative ÌṩµÄÒµÎñÀàUI£¬²»È»ºóÆÚ½»Á÷ºÜÂé·³¡£

   
2501 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ


Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ


ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ