imgViewer2.jsを使って画像の拡大縮小機能を実装する【マウスホイール・拡縮ボタン】

ひぐま
ひぐま

今回は画像を拡大縮小するボタンの実装、また、マウスホイールでの拡縮やレスポンシブでの拡縮も可能にする便利なプラグイン「imgViewer2.js」をご紹介します。

画像を拡大するプラグインはほかにもありますが、拡縮ボタンとマウスホイールでの拡縮を備えることのできるものにはなかなか巡り合えず彷徨っていた頃、このプラグインで助けられました。

まずはこちらのデモをご覧ください。

「+」ボタンアイコンで画像を拡大、「-」ボタンで縮小ができるほか、拡大した状態でドラッグすると移動ができます。

スマホでは指でピンチイン・ピンチアウトも可能です。

デモのような実装は意外と簡単ですので、 早速実装してみましょう。

用意するファイル

  1. まずは下記より必要なファイルをダウンロードします。

    imgViewer2のページの「src」フォルダから、「imgViewer2.js」をダウンロードします。

  2. 次に拡大縮小ボタンを設置するために

    leafletのページのDownloadメニューから「leaflet.js」と「leaflet.css」をダウンロードします。

  3. 最後にjQueryUIのページより、「jquery-ui.min.js」をダウンロードします。
    ※jQueryをダウンロードされていない場合はそちらもダウンロードしておいてください。jQueryのページ

HTML

  1. <main>
  2. <p><img id="zoomImg" src="img/sample.jpg" alt="富士山"></p>
  3. </main>

拡縮したいimgに任意のIDをつけてあげればOKです。

スクリプト

  1. <link rel="stylesheet" href="css/leaflet.css">
  2. <script src="js/jquery-1.12.4.min.js"></script>
  3. <script type="text/javascript" src="js/jquery-ui.min.js"></script>
  4. <script type="text/javascript" src="js/leaflet.js"></script>
  5. <script type="text/javascript" src="js/imgViewer2.js"></script>
  6. <script type="text/javascript">
  7. ;(function($) {
  8. $(window).on("load", function() {
  9. //imgのIDやクラスを指定
  10. var $img = $("#zoomImg").imgViewer2(
  11. {
  12. //画像の揺れの改善
  13. onReady: function() {
  14. this.setZoom(2);
  15. this.setZoom(1);
  16. }
  17. }
  18. );
  19. });
  20. })(jQuery);
  21. </script>

※ファイルのパスはご自身で使われるファイルの階層に合わせてください。

12行目以降の記述は特定条件で発生する画像の横揺れを出さないようにするためのものです。
(解決してくださった方、情報を載せてくださった方にお礼申し上げます。※後述)

CSS

  1. main > p{ width:800px; }
  2. /*以下はタブレット以下のサイズ用*/
  3. @media screen and (min-width:0px) and (max-width: 1023px){
  4. main > p{ width:100%; height:600px; }
  5. main > p img{ height:100%; }
  6. }

基本的には画像のコンテナのサイズ指定さえあれば大丈夫です。

以上で、簡単に拡縮機能を画像につけることができたかと思います。

------------------------------------------------------------------------------------------

※揺れの現象に関する参考記事はこちら↓

http://systemconcept.co.jp/blog/?p=1445
imgViewer2.jsの揺れ - しすこん

https://github.com/waynegm/imgViewer2/issues/10
Question related to image shake #10

関連記事