2015年9月2日水曜日

google mapを使ってjavascriptでルート検索をしてみる

PC故障によってしばらく更新できませんでした・・
復活したので中断前にちょこっとやっていたgoogle mapルート検索について
書こうと思います。
サンプルはJR東京駅から皇居の車でのルートを表示し
マーカーおよび吹き出しを表示させるものとなります。
吹き出し表示を紹介をしているとこでクリックするたびに吹き出しが
多重化してるサンプルを見かけますが今回は多重化しないようにしています。



htmlは1行で済みます!楽ですねぇ
  <div id="map"></div>  

javascriptは少し長いです。
でも条件指定などが長いだけ。
    var From = "JR東京駅"; //出発点
    var To = "皇居";  //行き先
    //マップオブジェクトを生成します。
    var myMap = new google.maps.Map(document.getElementById("map"), {
      mapTypeId: google.maps.MapTypeId.ROADMAP,
      scrollwheel: true, //マウスホイールスクロールを有効にする
      scaleControl: true //スケールコントロールを有効にする
    });
    
    //マーカークリック時の吹き出し表示
    function attachMessage(marker, msg, inf) {
      google.maps.event.addListener(marker, 'click', function () {
        inf.open(myMap, marker);
      });
    }
    //マップ生成、条件指定
    new google.maps.DirectionsService().route({
      //出発点
      origin: From,
      //行き先
      destination: To,
      //移動方法(電車は動かないっぽい)
      travelMode: google.maps.DirectionsTravelMode.DRIVING, 
      //途中通過したいポイントを使用するしない
      optimizeWaypoints: true,
      //通過点を指定する(緯度経度か文字列)
      //waypoints[]
      //高速道路を使用しない場合はTrue
      avoidHighways: false, 
      //有料区間を使用しない場合はTrue
      avoidTolls: false, 
      //代替ルート有無(動かない??)
      provideRouteAlternatives: false, 
      //最適化された最短距離にする。
      optimizeWaypoints: true, 
      //もちろんメートル法
      unitSystem: google.maps.DirectionsUnitSystem.METRIC,
      //交通情報を考慮するか否か
      durationInTraffic:true
    }, function (result, status) {
      //同期処理
      var mapdisp = markers(result, status);
      
      //markers関数内のはじめに出てくるyeildまで実行
      mapdisp.next();
      setTimeout(function () {
       //markers関数内の2個目に出てくるyeildまで実行
        mapdisp.next();
       //markers関数内の3個目に出てくるyeildまで実行
        mapdisp.next();
      }, 500);
    });
    //functionに*が付いていること
    function* markers(result, status) {
      //ルート取得成功したら
      if (status == google.maps.DirectionsStatus.OK) {
        //ルート表示
        var directionsRenderer = new google.maps.DirectionsRenderer();
        directionsRenderer.setDirections(result);
        directionsRenderer.draggable = true;
        directionsRenderer.setMap(myMap);
        yield; //処理一時中断ポイント
        
        //吹き出しデータ生成
        var data = new Array();
        
        //出発点の吹き出しの中身はhtml表示可能 iframeなども指定可能
        contentString = "
" + From + "
" + result.routes[0].legs[0].start_address + "
" data.push({ position: new google.maps.LatLng(result.routes[0].legs[0].start_location.G, result.routes[0].legs[0].start_location.K ), content: contentString }); //同じく行き先の吹き出しを生成 contentString = "
" + To + "
" + result.routes[0].legs[0].end_address + "
" data.push({ position: new google.maps.LatLng(result.routes[0].legs[0].end_location.G, result.routes[0].legs[0].end_location.K), content: contentString }); //マーカー+吹き出し生成 for (i = 0; i < data.length; i++) { //吹き出しオブジェクト var infowindow = new google.maps.InfoWindow({ content: data[i].content }); //マーカーオブジェクト var myMarker = new google.maps.Marker({ position: data[i].position, map: myMap, //animation: google.maps.Animation.DROPもあり animation: google.maps.Animation.BOUNCE }); //マップに表示 attachMessage(myMarker, data[i].content, infowindow); yield; //処理一時中断ポイント } } }

本家のサンプル     を参考にすると他にもいろいろ楽しそうなのがありそうです



2015年8月2日日曜日

cssでのMENU表示

Menuでいいやつがないかと探してたところ lopan.jp   
にCSSでできる良さそうなのが載っていましたので試してみました。

Sample

詳細な説明は link先     にわかりやすくまとめられていますので、そちらで確認してください。
ポイントはチェックの使い方と メニュー内容は見えない位置に配置している点でしょうか
見えない位置というのは、ブラウザの外の左側に配置しておくというもの

もし、ここでそのまま使用すると記事の左ではなく
ブラウザ左上隅に表示されてしまい記事とは関係ないような位置表示になります
これを解決するためiframeをつかって表示させてます
iframeなしで任意の場所でメニューを出すなら、ブラウザ上部とかのほうがいいかもしれません
でもワイド画面を考えると左右の余裕があるので左右も捨てがたいんですよね

あとはメニュー表示した際に内容もスライドしたい場合は contents以下に記載するとよいです
      <div class="contents">
      移動させたい内容はここに記載!
      </div>
    


2015年7月26日日曜日

またcodropsに載っている画像の上で動くCSSを試してみる

また楽しそうなのが codrops     にあったのでやってみました
サンプルは左右ボタンがずれてます;
おそらく何かのCSSが影響してしまってる気がしますが
Blogger以外で試してみたところ綺麗に表示されてました

SAMPLE
  • Landscape.1

  • Eclipse

  • Shishi-odoshi

  • Landscape.2

  • Illumination

  • Mt.Daisen

  • Cosmos

cssとjsを複数読み出す必要があります
    <head>
      <link rel="stylesheet" type="text/css" href="css/slicebox.css" />
      <link rel="stylesheet" type="text/css" href="css/custom.css" />
      <script type="text/javascript" src="js/modernizr.custom.46884.js"></script>
    </head>
    <body>
    <div class="wrapper" >
      <ul id="sb-slider" class="sb-slider">
        <li>
          <a href="画像アドレス1" target="_blank" imageanchor="1" >
            <img border="0" src="画像アドレス1" />
          </a>
          <div class="sb-description">
            <h3>画像説明1</h3>
          </div>
        </li>
        <li>
          <a href="画像アドレス2" target="_blank" imageanchor="1" >
            <img border="0" src="画像アドレス2" />
          </a>
          <div class="sb-description">
            <h3>画像説明2</h3>
          </div>
        </li>
        <div id="nav-arrows" class="nav-arrows">
          <a href="#" style= "opacity: 0.4;">Next</a>
          <a href="#" style= "opacity: 0.4;">Previous</a>
        </div>
      </ul>
    </div>
    </body>
    
あとはjavascriptですがbody部の閉じ括弧前で以下を記載します。
jqueryは1.8.2以降であれば大丈夫と思われます。
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
    <script type="text/javascript" src="jquery.slicebox.js"></script>
    <script type="text/javascript">
    $(function () {
      var Page = (function () {
        var $navArrows = $('#nav-arrows').hide(),
          $shadow = $('#shadow').hide(),
          slicebox = $('#sb-slider').slicebox({
            onReady: function () {
              $navArrows.show();
              $shadow.show();
            },
            orientation: 'r',
            cuboidsRandom: true,
            disperseFactor: 30
          }),
          init = function () {
            initEvents();
          },
          initEvents = function () {
            // add navigation events
            $navArrows.children(':first').on('click', function () {
              slicebox.next();
              return false;
            });
            $navArrows.children(':last').on('click', function () {
              slicebox.previous();
              return false;
            });
          };
        return {
          init: init
        };
      })();
      Page.init();
    });
    </script>
    


2015年7月25日土曜日

codropsに載っている画像の上で動くCSSを試してみる

またまた codrops     に載っているものを試してみました。
下の画像にマウスを持って行ってください
動きのあるのが楽しくてついついやってみたくなりますね

修造暑すぎ

Wow hot since Shuzo has returned home.

Read More

htmlはこんな以下です。
    <head>
    <link rel="stylesheet" type="text/css" href="style_common.css" />
    <link rel="stylesheet" type="text/css" href="style3.css" />
    </head>
    <!-- body -->
    <div class="main">
      <div class="view view-third">
        <img src="画像ファイル" />
        <div class="mask">
          <h2 style="font-weight:100;">修造暑すぎ</h2>
          <p>Wow hot since Shuzo has returned home.</p>
          <a href="リンク" class="info" target="_blank">Read More</a>
        </div>
      </div>
    </div>
    
2つのCSSを読み込んでおき
動きはsytle(n).cssで決まります。
あとはイメージやらコメント内容を記載するのみです
簡単ですねぇ


2015年7月19日日曜日

iOS設定の備忘など

またちょっと趣を変えて
iOS(8.4)の設定でよくどうだったっけと忘れるので備忘とか
適当にまとめてみました
  • 一般設定
  • バッテリー%表示

    設定>一般>使用状況>バッテリー残量(%)をon これがないとわかりにづらい

    Appのバックグラウンド更新

    設定>一般>Appのバックグラウンド更新>Appのバックグラウンド更新off アプリ起動した時で十分。通信料、バッテリーを節約できる。データ同期では便利かもしれないけど、そこまでの必要性が感じられない

    キーボード数設定

    設定>一般>キーボード>キーボード>【日本語-かな フリックのみ】、【英語】 絵文字いらないし、qwertyで日本語入力も不要。切り替えミスも減り快適

    キーボード-音声入力

    設定>一般>キーボード>音声入力をoff

    音声入力ボタンが消えるのでキーボードレイアウトが少しすっきり スマホに話しかけるのはちょっと・・・

    キーボード-フリックのみ

    設定>一般>キーボード>フリックのみon

    ”あああ”を連続入力可能 同文字連続入力をフリックで行える。

    キーボード-英語-自動大文字入力

    設定>一般>キーボード>自動大文字入力off

    英語入力時の頭文字を大文字にさせない iPhoneで英文なんて書かないですから

    キーボード-英語-自動修正

    設定>一般>キーボード>自動修正off

    英語入力時の修正候補を表示させない 横の×押そうとして、候補が選択されてイライラするのが軽減。商品名などの名詞はわざと捻った名前が多く自動候補に向かない気がする

    メール フェッチorプッシュ

    設定>メール/連絡先/カレンダー>アドレス毎に設定

    すぐ見ないといけないアドレスだけプッシュ。それ以外はフェッチですると通信料、バッテリーにやさしい ちなみにGmailはフェッチのみ。専用アプリいれればプッシュになるけれども、一元管理できなくなるのは困る

  • プライバシー
  • 位置情報サービス

    設定>一般>プライバシー>位置情報サービス>必要なアプリ以外は全てoff、もしくは使用中のみに限定 カメラの必ず位置情報は切っておいた方がいい。画像のExifからすぐ場所特定される。でも旅行先とかではonにしておくと楽しいアルバムが作れる。デジカメ別持ちなら切っておいていいかな

    追跡型広告を制限

    設定>一般>プライバシー>広告>追跡型広告を制限をon 追跡?なにそれ怖い

  • Tips
  • モバイルデータ通信

    設定>モバイルデータ通信>各アプリでoff

    LTE、3G回線で通信する必要がないものを制限して通信料節約。

    例えば無料アプリでメモリ解放してくれるけど広告表示される場合、モバイル通信を切っておけば

    メモリ解放はできるけど広告の通信はしないから微妙にお得 あとクラウドサービスで巨大ファイルをモバイル通信で同期する必要ないので切ってます。wifi環境でやれば十分です

    safari-パソコン用ページを楽に表示

      safariでパソコン用ページを表示したいのにボタンが見つからないなどを解決

    括弧を楽に入力する

    いつからできるようになったんだろ?

    メッセージの時刻表示

    意外と気づかない

    スクリーンショット

    電源押しながらホームボタン押すと撮れる さすがに知ってると思うけど一応



2015年7月18日土曜日

WEBサービスを試す(thinglink)

thinglink   というWebサービスを使ってみました
制限はありますが無料で使えます。
ユーザー登録が必要です
以下が作成したものとなります


微妙に日本語があったりなかったりですが作るのは簡単です

  • ログイン後、右上のCreateを押します。
  • 埋め込みたい画像を準備し
    画像ファイルをD&Dやlinkなどから画像選択します

    D&Dなら以下のボタンへ

  • 編集画面が表示されますのでリンク先などを検索し結果をクリックします
    これという検索結果が表示されなくても適当に選択してしまってください
    あとでリンクアドレスの入力枠が表示されるのでそこに貼り付ければOKです
  • するとアイコンが表示され位置やアイコンを選択できるようになったと思います

  • これを繰り返して最後に右下にあるSave Imageボタンを押します。

  • あとはShareボタンを押せば Twitter、FB Google+ に共有できるようです。
    埋め込みコードもあるのでコピペすればご自身のサイトにも表示できます。

  • たぶん私のやり方が悪いだけですが、なぜかコード埋め込みiframe埋め込みしかできませんでした

  • 無料版なので仕方ないですが
    アイコンが少なすぎる点 広告がちょっと目立つ点
    Google Mapがlinkしか表示できない点
    検索結果が残念な点(これはあとでリンクを直接変更できるからマシです)
    このあたりが微妙ですが、こういうのが楽に作れるのはありがたいです。



    2015年7月16日木曜日

    Google Apps ScriptでGmail取得するとメール内容によって異常に重かった時の対処

    以前、Gmailの未読メールの件数を表示する投稿
       
    をしましたが
    今度はメールの内容を一部表示するよう対応しようとした際に
    1メッセージに4秒もかかってしまうものがあり
    なぜ????と悩んでしまったので備忘録です。
    コード.gsにLogger.logを至る所に差し込んでみたところ
    原因は getMessages()
       
    でした
    Threadに対してgetMessages()でメッセージを取得するのですが
    なにかしらの条件に当てはまる内容?であると
    異常に重くなるようです。

    でなんでやーと色々やってみた結果
    getMessagesForThreadsを使えば早くなりました!

    以前の遅いコードは以下です
    //未読メール取得関数
    function getMail(){
      var datReturn =new Object();
     
      //スレッド取得
      var thds = GmailApp.search("is:unread", 0, 500);
    
      var i = 1;
      var cFrom = '';
      var cSub = '';
      var cMsgid='';
      var cThdurl='';
      for(var n in thds){
        var thd = thds[n];
        //*** こいつが遅い! ***
        var msgs = thd.getMessages(); 
        //******************
        cThdurl = thd.getPermalink();
        for(m in msgs){
          var msg = msgs[m];
          cFrom =msg.getFrom();
          var searchchar = Session.getActiveUser().getEmail();
          var searchidx = cFrom.search(searchchar);
          if (searchidx <= 0 && msg.isUnread() === true){
          cTo = msg.getTo();
          cSub = msg.getSubject();
          cMsgid = msg.getId();
          datReturn['from' + i] =cFrom;
          datReturn['subject' + i] = cSub;
          datReturn['msgid' + i] = cMsgid;
          datReturn['url' + i] = cThdurl;
          i++;
          }
        }
      }
      datReturn['count'] = i;
      return(datReturn)
    }
      

    以下は速度改善したコードです。
    //コード.gsのトップに以下の1行だけ記載しておく
    var cachedata = CacheService.getScriptCache();
      
    //未読メール取得関数
    function getMail(){
      var datReturn =new Object();
      var key = "MailAdress"
      
      //スレッド取得
      var thds = GmailApp.search("is:unread", 0, 500); //
      var k = 1;
      var cFrom = '';
    
    //  メールアドレスはキャッシュしておく
      var searchchar = suna_cache.get(key);
      if (searchchar === null){
        searchchar = Session.getActiveUser().getEmail();
        suna_cache.put(key,searchchar);
      }
      //一括取得しgetMessages()を使わない!
      var msgs = GmailApp.getMessagesForThreads(thds);
      for (var i = 0 ; i < msgs.length; i++) {
       for (var j = 0; j < msgs[i].length; j++) {
         cFrom = msgs[i][j].getFrom();
         var searchidx = cFrom.search(searchchar);
         if (searchidx <= 0 && msgs[i][j].isUnread() === true){
          datReturn['from' + k] =cFrom; 
          datReturn['subject' + k] = msgs[i][j].getSubject();
          datReturn['msgid' + k] = msgs[i][j].getId();
          datReturn['url' + k] = msgs[i][j].getThread().getPermalink();
          k++;
         }
       }
      }
      datReturn['count'] = k;
      return(datReturn)
    }
    //キャッシュ
    var suna_cache = {
      put: function(key,data){
        cachedata.put(key,data,60*60*48); //
      },
      get: function (key){
         return cachedata.get(key);
      }
    };
      

    いずれも同じ結果を取得します。
    遅いコード側は遅くなるメールがあると1件4秒でしたが
    速い方は遅くなるメールがいても0.5秒程度で完了してます
    重くなる原因のメール内容はGoogleからくるお知らせなんですが
    なんなんでしょうねぇ
    まぁgetMessagesForThreads
       
    で一括取得するのなんて
    当たり前なのかもしれませんが;

    ついでにメール表示するテストページを作ってみました
    もちろんGoogleにログインしてないと見れませんし
    ボタンが表示されておりますので押して承認して頂いたあと
    リロードする必要があります
    悪さなどしておりませんが
    承認してもいいよ~って方だけ見てください
    テストページへ
       

    2015年7月11日土曜日

    CSSで簡単なアニメーションさせてみる

    cssでGIFのような動きをさせてみました。
    sample





    こんな感じです。もちろん画像は使ってません

    htmlでは要素の真ん中にくるようにwarrperとmainを作っておきます
    ぐるぐる回してる●を必要数だけ並べてます
        <div id="wrapper">
          <div class="main">
            <p id="maru0" class="load">●</p>
            <p id="maru1" class="load">●</p>
            <p id="maru2" class="load">●</p>
            <p id="maru3" class="load">●</p>
            <p id="maru4" class="load">●</p>
            <p id="maru5" class="load">●</p>
            <p id="maru6" class="load">●</p>
            <p id="maru7" class="load">●</p>
            <p id="maru8" class="load">●</p>
            <p id="maru9" class="load">●</p>
          </div>
        </div>
        
    cssは回転速度を要素ごとに分けているため長いです
    .loadのbackground-colorを透過じゃない色をつけて
    #maru0だけにすると何が起こっているのかわかりやすいかもしれません
        /*  外枠基本設定 */
        #wrapper {
          position: relative;
          width: 50px;
          left:0;
          top:40px;
        }
        .main {
          display: none;
          width: 100%;
          height: 100%;
        }
        
        /*  ●の基本設定
        (適宜変更して下さい)
        */
        .load {
          background-color: transparent;
          position: absolute;
          font-size: 8px;
          top:50%; /* 上から半分 */
          left:50%; /* 左から半分 */
          width:40px;
          height: 40px;
          margin:-20px 0 0 -20px; 
        }
        
        /*  ●の0%~100%まで動きを指定(webkitも記載) */
        @keyframes rotate {
          0% { 
              transform: rotate(0deg); 
              color:black; 
              -moz-opacity: 1.0;
              opacity: 1.0;
            }
        100% { 
            transform: rotate(360deg);
            color :#BDBDBD;
            -moz-opacity: 0.5;
              opacity: 0.5;
            }
        }
        @-webkit-keyframes rotate {
          /* webkit用keyframes */
          0% { -webkit-transform: rotate(0deg);
              color:black;
              opacity: 1.0;
            }
          100% {
            -webkit-transform : rotate(360deg);
            color : #BDBDBD;
            opacity : 0.5;
            }
        }
        /* 以下は●1つずつの動作
        cubic-bezierの値で動く速度に変化を与えてます
        */
        #maru0 {
          animation: rotate 2s cubic-bezier(0.1, 1.0, 1.0, 1.0);
          -webkit-animation: rotate 2s cubic-bezier(0.1, 1.0, 1.0, 1.0);
          animation-iteration-count: infinite;
          -webkit-animation-iteration-count: infinite;
        }   
        #maru1 {
          animation: rotate 2s cubic-bezier(0.2, 0.9, 0.9, 0.9);
          -webkit-animation: rotate 2s cubic-bezier(0.2, 0.9, 0.9, 0.9);
          animation-iteration-count: infinite;
          -webkit-animation-iteration-count: infinite;
        }
        #maru2 {
          animation: rotate 2s cubic-bezier(0.3, 0.8, 0.8, 0.8);
          -webkit-animation: rotate 2s cubic-bezier(0.3, 0.8, 0.8, 0.8);
          animation-iteration-count: infinite;
          -webkit-animation-iteration-count: infinite;
        }
        #maru3 {
          animation: rotate 2s cubic-bezier(0.4, 0.7, 0.7, 0.7);
          -webkit-animation: rotate 2s cubic-bezier(0.4, 0.7, 0.7, 0.7);
          animation-iteration-count: infinite;
          -webkit-animation-iteration-count: infinite;
        }
        #maru4 {
          animation: rotate 2s cubic-bezier(0.5, 0.6, 0.6, 0.6);
          -webkit-animation: rotate 2s cubic-bezier(0.5, 0.6, 0.6, 0.6);
          animation-iteration-count: infinite;
          -webkit-animation-iteration-count: infinite;
        }
        #maru5 {
          animation: rotate 2s cubic-bezier(0.6, 0.5, 0.5, 0.5);
          -webkit-animation: rotate 2s cubic-bezier(0.6, 0.5, 0.5, 0.5);
          animation-iteration-count: infinite;
          -webkit-animation-iteration-count: infinite;
        }
        #maru6 {
          animation: rotate 2s cubic-bezier(0.7, 0.4, 0.4, 0.4);
          -webkit-animation: rotate 2s cubic-bezier(0.7, 0.4, 0.4, 0.4);
          animation-iteration-count: infinite;
          -webkit-animation-iteration-count: infinite;
        }
        #maru7 {
          animation: rotate 2s cubic-bezier(0.8, 0.3, 0.3, 0.3);
          -webkit-animation: rotate 2s cubic-bezier(0.8, 0.3, 0.3, 0.3);
          animation-iteration-count: infinite;
          -webkit-animation-iteration-count: infinite;
        }
        #maru8 {
          animation: rotate 2s cubic-bezier(0.9, 0.2, 0.2, 0.3);
          -webkit-animation: rotate 2s cubic-bezier(0.9, 0.2, 0.2, 0.3);
          animation-iteration-count: infinite;
          -webkit-animation-iteration-count: infinite;
        }
        #maru9 {
          animation: rotate 2s cubic-bezier(1.0, 0.1, 0.1, 0.1);
          -webkit-animation: rotate 2s cubic-bezier(1.0, 0.1, 0.1, 0.1);
          animation-iteration-count: infinite;
          -webkit-animation-iteration-count: infinite;
        }
        
    ちなみにLoadingのように使うと
    以下のような感じになります
    GIFのがお手軽に感じましたが
    GIFよりはサイズが小さい点と画質に左右されないのはいいところですね

    つれづれなるまゝに:退屈なこと、さみしいこと、無聊。 日くらし:<ひぐらし>と読む。
    朝から晩まで。終日。 ひねもす。 心に移りゆくよしな


    鳥取-大山






    2015年7月5日日曜日

    予測変換しながらメールアドレスを選択。要素追加削除

    予測変換しつつ、要素を足したり消したりします。
    都道府県を入力して見て下さい。
    予測が表示されるので何か選択します
    「、」または「,」を押すと要素が増えます
    増えた要素は×を押すと消されます

    Sample

      ×

    今回は×をAdd-Clear というJqueryのplug-inを使用してますが、少し手を加えてます
    内容を消すのではなく要素を消したり、closeSymbolの変更、常時表示等に変更してます
    Firefoxは微妙に「、」での追加が動作しないですが半角「,」なら大丈夫です
    safari(iOS)は例のごとく未確認です。



    HTMLです。要素追加のためにulが要ります。
        <ul>
          <div id="jquery-ui-autocomplete" class="ui-widget">
            <label for="jquery-ui-autocomplete-label">To:</label>
            <input id="mailto1" class="mailto" placeholder = "名前またはアドレスを入力して下さい">
              <span id="close1" class="close" title="Close" onclick="adclear()">×</span>
            </input>
          </div>
        </ul>
      

    addclear.jsの重要な変更点である要素削除の所だけ書きます
    元々はクリックされた場合にテキストがクリアされる関数でした。

        $("a[href='#clear']").click(function(e) {
            $(this).parent(me.element).remove();
            $(this).remove();
            e.preventDefault();
        });
      

     次はメインのjsです

      //JQuery必須です。
      <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js'></script>
      <script src='http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/jquery-ui.min.js'></script>
      <link href='http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/themes/smoothness/jquery-ui.css' rel='stylesheet'>
      <script src="../jquery/addclear.min.js"></script>
      
      //追加要素id用INDEX
      var index = 1;
      //×押下時クリア
      function adclear() {
        var objmail = $("#mailto1");
          objmail.val("");
      }
      $(function () {
        var data = ["北海道(hokkaido.1@gmail.com)",
        "青森県(aomori.2@gmail.com)",
        "沖縄県(okinawa.7@gmail.com)"];
    
        prediction(data);
        //予測変換
        function prediction(result) {
          var ArrData = [""];
          for (var i = 0; i < result.length; i++) {
            //var arr = [result[i]];
            var num = ArrData.push(result[i]);
          }
          var word = [];
    
          for (var i = 0; i < ArrData.length; i++) {
            word.push(String(ArrData[i]));
          }
          var pin = word;
          $("#mailto1").autocomplete({
            source: pin
          });
        }
        //要素追加処理
        $("#mailto1").on("keyup", function (e) {
          if (e.keyCode === 188) {
            var data1 = $("#mailto1").val();
            if (data1.indexOf("、") !== -1) {
              data1 = data1.replace(/、/g,',');
              $("#mailto1").val(data1);
              //return true;
            }
            if ((data1 !== "") && (data1.length > 1)) {
              e.keyCode = 0;
              data1 = data1.replace(/,/g,'');
              if (data1!=="") {
                index++;
                //必要幅取得
                var wid = fncStrCount(data1);
                wid = (wid / 2) + 3.5;
                //タグエスケープをしておく
                data1 = escapeHtml(data1);
                //要素追加
                 $('ul').append('
    '); var $mails = $('#mailto' + index); //幅設定 $mails.width(wid + 'em'); //追加要素へCSS反映 $('#mailto' + index).addClass('ui-autocompletelto'); $("#mailto1").val(""); $mails.addClear(); } } } }); }) //全角2半角1で数える function fncStrCount(str) { len = 0; str = escape(str); for (i=0;i<str.length;i++,len++) { if (str.charAt(i) == "%") { if (str.charAt(++i) == "u") { i += 3; len++; } i++; } } return len; } //タグエスケープ function escapeHtml(content) { return content .replace(/&/g, '&amp;') .replace(/</g, "&lt;") .replace(/>/g, "&gt;") .replace(/"/g, '&quot;') .replace(/'/g, '&#039;') .replace(/\r?\n/g, "<br />"); }

    cssは特に変わったことはしてません

        .ui-widget {
          font-family: 'ヒラギノ角ゴ ProN W3', 'メイリオ', 'Noto Sans Japanese', sans-serif;
          font-size: 13px;
          margin-left: -24px;
          }
        .ui-widget input,
        .ui-widget select,
        .ui-widget textarea,
        .ui-widget button {
          font-family: 'ヒラギノ角ゴ ProN W3', 'メイリオ', 'Noto Sans Japanese', sans-serif;
          font-size: 13px;
        }
        .ui-autocomplete {
          max-height: 200px;
          overflow-y: auto;
          overflow-x: hidden;
          font-family: 'ヒラギノ角ゴ ProN W3', 'メイリオ', 'Noto Sans Japanese', sans-serif;
          font-size: 13px;
        }
        .mailto {
          margin-left: 5px;
          font-size: 13px;
          width: 350px;
          margin-top: 5px;
          font-family: 'ヒラギノ角ゴ ProN W3', 'メイリオ', 'Noto Sans Japanese', sans-serif;
        }
        .mailto:hover + .close {
          display: inline-block;
        }
        
        .close {
          display: none;
          color: #585858;
          cursor: pointer;
          font-size: 13px;
          height: 16px;
          line-height: 16px;
          text-align: center;
          top: 1px;
          position: relative;
          right: 25px;
          width: 16px; 
        }
        
        .close:hover {
          display: inline-block;
        }
        .waku {
          display: inline-block;
        }
            /*リスト系*/
        ul {
          line-height: 1em;
        }