CHAPTER 13 - jQuery Mobile 教學 ( 事件 )

前一篇看了一些 jQuery Mobile 基礎的程式,再來介紹一下 jQuery Mobile 的事件,這些事件相當的重要,用法也很簡單,學會之後對於使用 jQuery Mobile 開發才能更得心應手。




1. 頁面事件

jQuery Mobile 提供了兩種頁面事件,分別是 pageinit 和 pageshow,pageinit 表示頁面『第一次』執行時會發生的事件,因此只會發生一次,而 pageshow 表示頁面載入時會發生的事件,每次頁面載入都會觸發,如果要使用 jQuery Mobile,相關的程式必須寫在裡頭。 ( 範例:http://jqmdesigner.appspot.com/designer.html#&ref=5866509217824768,點選按鈕會發現警告視窗彈出兩次,第一次顯示 pageinit,接著顯示 pageshow,再點選一次會發現只會出現 pageshow )

(function () {
  $(document).on("pageinit", "#pageID", function () {
    // 頁面第一次執行時會觸發
    // 程式寫在這裡
  });
})()
(function () {
  $(document).on("pageshow", "#pageID", function () {
    // 頁面載入會觸發
    // 程式寫在這裡
  });
})();



2. 觸控事件

『觸控』是在手機上操作最重要的行為,因此 jQuery Mobile 提供了五種觸控事件,分別是:tap ( 點擊 )、taphold ( 長按 )、swipe ( 滑動 )、swipeleft ( 往左滑 )、swiperight ( 往右滑 ) ( 範例:http://jqmdesigner.appspot.com/designer.html#&ref=5146167943888896 )

HTML:

<span id="status">狀態顯示</span>
<br>
<br>
<div id="tapthis" class="test">tap</div>
<div id="tapholdthis" class="test">tap hold</div>
<div id="swipethis" class="test">swpie</div>
<div id="swipeleftthis" class="test">swipe left</div>
<div id="swiperightthis" class="test">swipe right</div>

javascript:

(function () {
  $(document).on("pageinit", "#home", function () {
    $('#tapthis').on("tap", function () {
      $('#status').text('tap');
    });
    $('#tapholdthis').on("taphold", function () {
      $('#status').text('taphold');
    });
    $('#swipethis').on("swipe", function () {
      $('#status').text('swipe');
    });
    $('#swipeleftthis').on("swipeleft", function () {
      $('#status').text('swipeleft');
    });
    $('#swiperightthis').on("swiperight", function () {
      $('#status').text('swiperight');
    });
  });
})();


因為 jQuery Mobile 本身沒有提供往上往下滑的功能,如果要使用,則可新增這段 javascript ,就可以使用 swipeup 往上滑 swipedown 往下滑的事件。 ( 範例:http://jqmdesigner.appspot.com/designer.html#&ref=6219705958268928 )

HTML:

    <span id="status">狀態顯示</span>
    <br>
    <br>
    <div id="swipeupthis" class="test">swipe up</div>
    <div id="swipedownthis" class="test">swipe down</div>

javascript ( 加入這段可以新增往上往下事件 ):

(function () {
  var supportTouch = $.support.touch,
    scrollEvent = "touchmove scroll",
    touchStartEvent = supportTouch ? "touchstart" : "mousedown",
    touchStopEvent = supportTouch ? "touchend" : "mouseup",
    touchMoveEvent = supportTouch ? "touchmove" : "mousemove";
  $.event.special.swipeupdown = {
    setup: function () {
      var thisObject = this;
      var $this = $(thisObject);
      $this.bind(touchStartEvent, function (event) {
        var data = event.originalEvent.touches ?
          event.originalEvent.touches[0] :
          event,
          start = {
            time: (new Date).getTime(),
            coords: [data.pageX, data.pageY],
            origin: $(event.target)
          },
          stop;
        function moveHandler(event) {
          if (!start) {
            return;
          }
          var data = event.originalEvent.touches ?
            event.originalEvent.touches[0] :
            event;
          stop = {
            time: (new Date).getTime(),
            coords: [data.pageX, data.pageY]
          };
          // prevent scrolling
          if (Math.abs(start.coords[1] - stop.coords[1]) > 10) {
            event.preventDefault();
          }
        }
        $this
          .bind(touchMoveEvent, moveHandler)
          .one(touchStopEvent, function (event) {
            $this.unbind(touchMoveEvent, moveHandler);
            if (start && stop) {
              if (stop.time - start.time < 1000 &&
                Math.abs(start.coords[1] - stop.coords[1]) > 30 &&
                Math.abs(start.coords[0] - stop.coords[0]) < 75) {
                start.origin
                  .trigger("swipeupdown")
                  .trigger(start.coords[1] > stop.coords[1] ? "swipeup" : "swipedown");
              }
            }
            start = stop = undefined;
          });
      });
    }
  };
  $.each({
    swipedown: "swipeupdown",
    swipeup: "swipeupdown"
  }, function (event, sourceEvent) {
    $.event.special[event] = {
      setup: function () {
        $(this).bind(sourceEvent, $.noop);
      }
    };
  });
})();

javascript ( pageinit 事件 ):

(function () {
  $(document).on("pageinit", "#home", function () {
    $('#swipeupthis').on("swipeup", function () {
      $('#status').text('swipeup');
    });
    $('#swipedownthis').on("swipedown", function () {
      $('#status').text('swipedown');
    });
  });
})();



3. 旋轉事件

旋轉事件可以偵測行動裝置的旋轉狀態,產生相對應的行為。 ( 範例:http://jqmdesigner.appspot.com/designer.html#&ref=5681561387139072 )

(function () {
  $(document).on("pageinit", "#home", function () {
    $(window).on("orientationchange", function (event) {
      alert("方向是:" + event.orientation);
    });
  });
})();





繼續閱讀 Chapter 14 - 開始寫程式之前要注意的眉眉角角
回文章目錄

results matching ""

    No results matching ""