iframe の親のリンクで子のアンカーリンクへスクロールする

iframe の親にあるリンクをクリックすると、 iframe 内がアンカーリンクへスクロールします。

実際の表示

コード

HTML

<iframe id="if1" src="/cmp/parts/iframe-link/iframe-child.html"></iframe>
<div id="link">
<ul class="if-link">
<li><a href="#p1"  target-iframe="if1">#p1</a></li>
<li><a href="#p2"  target-iframe="if1">#p2</a></li>
<li><a href="#p3"  target-iframe="if1">#p3</a></li>
・
・
・
</div>

CSS

#if1 {
width: 100%;
height: 300px;
}
#link::after {
clear: both;
content: "";
display: block;
line-height: 0;
}
.if-link {
float: left;
list-style: none;
}
.if-link + .if-link {
margin-left: 40px;
}

JavaScript

$(function() {
$('.if-link').on('click', 'a', function(event) {
event.preventDefault()
var target = $(this).attr('target-iframe')
var href = $(this).attr('href').slice(1)
var content = $('#' + target).contents()
$('html, body', content).animate({scrollTop: content.find('[name=' + href + ']').offset().top}, 300)
})
})

チェックボックスで要素の表示・非表示をコントロールする

  • チェックボックスで要素の表示・非表示をコントロールする JavaScript です。
  • チェックボックスをいくらでも増やせる設計になっています。
  • ちょっといじれば表示・非表示にする要素を増やすのも簡単です。

実際の表示

コンテンツ 1
コンテンツ 2
コンテンツ 3

コード

HTML

<div id="checkbox">
<input type="checkbox" target="content-1">
<input type="checkbox" target="content-2">
<input type="checkbox" target="content-3">
</div>
<div id="contents">
<div id="content-1">
コンテンツ 1
</div>
<div id="content-2">
コンテンツ 2
</div>
<div id="content-3">
コンテンツ 3
</div>
</div>

CSS

#content-1,
#content-2,
#content-3 {
float: left;
display: none;
width: 100px;
height: 100px;
text-align: center;
vertical-align: middle;
}
#content-1 {
background-color: #f88;
}
#content-2 {
background-color: #8f8;
}
#content-3 {
background-color: #88f;
}

JavaScript

$(function() {
$(document).ready(function() {
$('[type="checkbox"]').trigger('change')
})
$('#checkbox').on('change', '[type="checkbox"]', function() {
var target = $(this).attr('target')
var property = $(this).prop('checked')
if (property) {
$('#' + target).css('display', 'initial')
} else {
$('#' + target).css('display', 'none')
}
})
})

Twitter ウェブのツイートを自動的にアンロードするブックマークレット

一日中 Twitter に入り浸っていると古いツイートが溜まり過ぎてブラウザの動作が遅くなります。だから自動的にアンロードするブックマークレットを作りました。

  • Twitter ウェブの古いツイートをアンロードするブックマークレットです。
  • 50 件を残してアンロードします。
  • 1 秒おきに実行されます。
  • 画面高さの 20 倍スクロールするとアンロードが止まります。
  • ブックマークレットが実行されると、画面右下に「トップへ戻る」ボタンが表示されます。
  • コードの最初のところにある interval 、 scroll 、 tweets の変数を編集すると動作が変わります。

コード

javascript:void((function(){var interval=1e3,scroll=20,tweets=50;$("head").append("<style>#tul-btt{position:fixed;bottom:30px;right:30px}</style>"),$("body").append('<button id="tul-btt" class="EdgeButton EdgeButton--primary">トップへ戻る</button>'),$("#tul-btt").on("click",function(){$("html, body").animate({scrollTop:0},300)}),setInterval(function(){var t=document.getElementById("stream-items-id"),e=document.getElementsByClassName("stream-item").length;if(window.scrollY*scroll>window.innerHeight||tweets+1>e)return!0;for(var l=e-tweets-1;l>=0;l--){var n=t.lastElementChild;t.removeChild(n),n=null}},interval)})());

テキストボックスの入力でリストをフィルタする

はじめに

  • テキストボックスに入力すると、リストの中から部分一致でフィルタします。
  • 表示されたリストが 1 件になったとき Enter するとリンクを表示します。
  • リンクは別ウィンドウを開きます。
  • リストは JSON 形式の別ファイルです。

実際の表示

    コード

    HTML

    <input type="text" id="input">
    <ul id="output"></ul>

    JavaScript

    $(function() {
    var list
    var hits = []
    // リスト取得
    $.ajax({
    url: '/cmp/parts/list-filter/prefectures.json'
    })
    .done(function(data) {
    list = data
    })
    .fail(function() {
    alert('ページを読み直してください')
    })
    // イベント処理
    $(window).on('load', function() {
    $('#input').trigger('input')
    })
    $('#input').on({
    'input': update,
    'keypress': typeEnter})
    $('#output').on('click', 'a', function(event) {
    event.preventDefault();
    var url = $(this).attr('href')
    goLink(url)
    })
    // 関数
    function update() {
    $('#output').empty()
    var input = $(this).val()
    if (input !== '') {
    hits = list.filter(function(index) {
    return (index.name.indexOf(input) > -1)
    })
    for (var i = 0; i <= hits.length - 1; i++) {
    $('#output').append('<li><a class="pref-link" href="' + hits[i].url + '">' + hits[i].name + '</a></li>')
    }
    } else {
    for (var i = 0; i <= list.length - 1; i++) {
    $('#output').append('<li><a class="pref-link" href="' + list[i].url + '">' + list[i].name + '</a></li>')
    }
    }
    }
    function typeEnter(event) {
    if (hits.length == 1 && event.keyCode == 13) {
    goLink(hits[0].url)
    }
    }
    function goLink(url) {
    window.open(url, '', 'width=500, height=500, menubar=0, toolbar=1, status=1, scrollbars=1, resizable=1')
    }
    })

    JSON

    [
    {
    "name": "北海道",
    "url": "http://www.pref.hokkaido.lg.jp/"
    },
    {
    "name": "青森県",
    "url": "http://www.pref.aomori.lg.jp/"
    },
    {
    "name": "岩手県",
    "url": "http://www.pref.iwate.jp/"
    },
    {
    "name": "宮城県",
    "url": "http://www.pref.miyagi.jp/"
    },
    {
    "name": "秋田県",
    "url": "http://www.pref.akita.lg.jp/"
    },
    {
    "name": "山形県",
    "url": "http://www.pref.yamagata.jp/"
    },
    {
    "name": "福島県",
    "url": "http://www.pref.fukushima.lg.jp/"
    },
    {
    "name": "茨城県",
    "url": "http://www.pref.ibaraki.jp/"
    },
    {
    "name": "栃木県",
    "url": "http://www.pref.tochigi.lg.jp/"
    },
    {
    "name": "群馬県",
    "url": "http://www.pref.gunma.jp/"
    },
    {
    "name": "埼玉県",
    "url": "http://www.pref.saitama.lg.jp/"
    },
    {
    "name": "千葉県",
    "url": "http://www.pref.chiba.lg.jp/"
    },
    {
    "name": "東京都",
    "url": "http://www.metro.tokyo.jp/"
    },
    {
    "name": "神奈川県",
    "url": "http://www.pref.kanagawa.jp/"
    },
    {
    "name": "新潟県",
    "url": "http://www.pref.niigata.lg.jp/"
    },
    {
    "name": "富山県",
    "url": "http://www.pref.toyama.jp/"
    },
    {
    "name": "石川県",
    "url": "http://www.pref.ishikawa.lg.jp/"
    },
    {
    "name": "福井県",
    "url": "http://www.pref.fukui.lg.jp/"
    },
    {
    "name": "山梨県",
    "url": "http://www.pref.yamanashi.jp/"
    },
    {
    "name": "長野県",
    "url": "http://www.pref.nagano.lg.jp/"
    },
    {
    "name": "岐阜県",
    "url": "http://www.pref.gifu.lg.jp/"
    },
    {
    "name": "静岡県",
    "url": "http://www.pref.shizuoka.jp/"
    },
    {
    "name": "愛知県",
    "url": "http://www.pref.aichi.jp/"
    },
    {
    "name": "三重県",
    "url": "http://www.pref.mie.lg.jp/"
    },
    {
    "name": "滋賀県",
    "url": "http://www.pref.shiga.lg.jp/"
    },
    {
    "name": "京都府",
    "url": "http://www.pref.kyoto.jp/"
    },
    {
    "name": "大阪府",
    "url": "http://www.pref.osaka.lg.jp/"
    },
    {
    "name": "兵庫県",
    "url": "http://web.pref.hyogo.lg.jp/"
    },
    {
    "name": "奈良県",
    "url": "http://www.pref.nara.jp/"
    },
    {
    "name": "和歌山県",
    "url": "http://www.pref.wakayama.lg.jp/"
    },
    {
    "name": "鳥取県",
    "url": "http://www.pref.tottori.lg.jp/"
    },
    {
    "name": "島根県",
    "url": "http://www.pref.shimane.lg.jp/"
    },
    {
    "name": "岡山県",
    "url": "http://www.pref.okayama.lg.jp/"
    },
    {
    "name": "広島県",
    "url": "http://www.pref.hiroshima.lg.jp/"
    },
    {
    "name": "山口県",
    "url": "http://www.pref.yamaguchi.lg.jp/"
    },
    {
    "name": "徳島県",
    "url": "http://www.pref.tokushima.jp/"
    },
    {
    "name": "香川県",
    "url": "http://www.pref.kagawa.lg.jp/"
    },
    {
    "name": "愛媛県",
    "url": "http://www.pref.ehime.jp/"
    },
    {
    "name": "高知県",
    "url": "http://www.pref.kochi.lg.jp/"
    },
    {
    "name": "福岡県",
    "url": "http://www.pref.fukuoka.lg.jp/"
    },
    {
    "name": "佐賀県",
    "url": "http://www.pref.saga.lg.jp/"
    },
    {
    "name": "長崎県",
    "url": "http://www.pref.nagasaki.lg.jp/"
    },
    {
    "name": "熊本県",
    "url": "http://www.pref.kumamoto.jp/"
    },
    {
    "name": "大分県",
    "url": "http://www.pref.oita.jp/"
    },
    {
    "name": "宮崎県",
    "url": "http://www.pref.miyazaki.lg.jp/"
    },
    {
    "name": "鹿児島県",
    "url": "http://www.pref.kagoshima.jp/"
    },
    {
    "name": "沖縄県",
    "url": "http://www.pref.okinawa.lg.jp/"
    }
    ]

    テキストファイルを小説家になろうの表示にするブックマークレット

    はじめに

    テキストファイルをウェブブラウザで読み込んで実行すると、表示が「小説家になろう」でのものになるブックマークレットです。

    |《》でのルビに対応しています。漢字 + ()でのルビには対応していません。

    小説家になろうのモバイルサイト表示には対応していません。

    ブラウザでテキストファイルを表示
    ブラウザでテキストファイルを表示
    ブックマークレットで表示変換
    ブックマークレットで表示変換

    ブックマークレット

    下のリンクをブックマークバーへドラッグしてブックマークに追加してください。

    テキスト -> 小説家になろう ブックマークレット

    別の方法

    使い方

    ウェブブラウザ上へテキストファイルをドラッグするなどして開き、ブックマークレットを実行してください。

    コード

    ブックマークレット

    javascript:(function(e){var r=document.createElement("script");r.src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js",document.documentElement.appendChild(r),r.onload=function(){var r=jQuery.noConflict(!0);e(r)}}(function(e){var r='<style>body{margin:50px auto;padding:0 20px;width:600px;font-family:"メイリオ",Meiryo,"Lucida Grande",sans-serif;font-size:15.2px;line-height:22.8px;text-align:left;vertical-align:baseline;direction:ltr;unicode-bidi:bidi-override;word-break:normal;word-wrap:break-word;color:#444}</style>';word=e("body").text().replace(/\n/g,"<br>").replace(/|([^(]+?)《(.+?)》/g,"<ruby>$1<rt>$2</rt></ruby>").replace(/|((.*?))/g,"$1"),e("head").append(r),e("body").empty(),e("body").append(word)}));

    元の JavaScript

    (function(f) {
    var s = document.createElement('script')
    s.src = 'https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js'
    document.documentElement.appendChild(s)
    s.onload = function() {
    var $ = jQuery.noConflict(true)
    f($)
    }
    })
    (function($) {
    var css = '<style>body{margin:50px auto;padding:0 20px;width:600px;font-family:"メイリオ",Meiryo,"Lucida Grande",sans-serif;font-size:15.2px;line-height:22.8px;text-align:left;vertical-align:baseline;direction:ltr;unicode-bidi:bidi-override;word-break:normal;word-wrap:break-word;color:#444}</style>'
    word = $('body').text().replace(/\n/g, '<br>').replace(/|([^(]+?)《(.+?)》/g, '<ruby>$1<rt>$2</rt></ruby>').replace(/|((.*?))/g, '$1')
    $('head').append(css)
    $('body').empty()
    $('body').append(word)
    })

    元の CSS

    body {
    margin: 50px auto;
    padding: 0px 20px;
    width: 600px;
    font-family: "メイリオ", "Meiryo", "Lucida Grande", "sans-serif";
    font-size: 15.2px;
    line-height: 22.8px;
    text-align: left;
    vertical-align: baseline;
    direction: ltr;
    unicode-bidi: bidi-override;
    word-break: normal;
    word-wrap: break-word;
    color: #444444;
    }

    小説家になろうの表示を変更するブックマークレット 1

    はじめに

    表示変更のサンプル

    小説家になろうの表示を黒背景で白文字にするブックマークレットを作りました。完全な黒と白ではなくて monokai と呼ばれるカラースキームを真似てみたので色っぽいはずです。

    今回のやつは色や文字サイズが決め打ちなんですが、ゆくゆくはブックマークレットをカスタマイズできるジェネレータを作りたいと思っています。他には縦書きになるやつも作りたいですね。

    使い方

    小説家になろうの本文があるページでブックマークレットを実行します。元の画面へ戻るにはページをリロード(再読み込み)します。

    ブックマークレット

    表示変更ブックマークレット

    ブックマークレットのコード

    javascript:(function(){var e="<style>#novel_no,.novel_bn,.novel_subtitle{text-align:center}body,div,p{margin:0;padding:0}body{font-family:Meiryo,Helvetica,Arial;font-size:16px;letter-spacing:.05em;line-height:1.7;color:#f8f8f2;background-color:#272822}a,a:link{color:#66d9ef}a:visited{color:#f92672}#novel_color{width:100%;max-width:640px;margin:20px auto;padding-right:20px;padding-left:20px;box-sizing:border-box}.novel_bn{width:80%;margin:0 auto}.novel_bn:last-child{margin-top:30px}#novel_honbun,.novel_subtitle{margin-top:10px}.novel_bn a{display:inline-block;margin-right:10px;margin-left:10px}#novel_no{margin-top:15px}.novel_subtitle{font-weight:700}#novel_a,#novel_p{margin-top:10px;color:#75715e}</style>",n='<meta name="viewport" content="width=device-width, initial-scale=1">',o=$("title"),i=$("#novel_color");$("head, body").empty(),$("link, style, script").remove(),$("head").append(e),$("head").append(n),$("head").append(o),$("body").append(i),$("*").removeAttr("style")})();

    元になるコード

    元になる JavaScript

    $(function() {
    var style = '<style>#novel_no,.novel_bn,.novel_subtitle{text-align:center}body,div,p{margin:0;padding:0}body{font-family:Meiryo,Helvetica,Arial;font-size:16px;letter-spacing:.05em;line-height:1.7;color:#f8f8f2;background-color:#272822}a,a:link{color:#66d9ef}a:visited{color:#f92672}#novel_color{width:100%;max-width:640px;margin:20px auto;padding-right:20px;padding-left:20px;box-sizing:border-box}.novel_bn{width:80%;margin:0 auto}.novel_bn:last-child{margin-top:30px}#novel_honbun,.novel_subtitle{margin-top:10px}.novel_bn a{display:inline-block;margin-right:10px;margin-left:10px}#novel_no{margin-top:15px}.novel_subtitle{font-weight:700}#novel_a,#novel_p{margin-top:10px;color:#75715e}</style>'
    var viewport = '<meta name="viewport" content="width=device-width, initial-scale=1">'
    var title = $('title')
    var novel_color = $('#novel_color')
    $('head, body').empty()
    $('link, style, script').remove()
    $('head').append(style)
    $('head').append(viewport)
    $('head').append(title)
    $('body').append(novel_color)
    $('*').removeAttr('style')
    });

    元になる CSS

    body,
    div,
    p {
    margin: 0;
    padding: 0;
    }
    body {
    font-family: "Meiryo", "Helvetica", "Arial";
    font-size: 16px;
    letter-spacing: 0.05em;
    line-height: 1.7;
    color: #f8f8f2;
    background-color: #272822;
    }
    a,
    a:link {
    color: #66d9ef;
    }
    a:visited {
    color: #f92672;
    }
    #novel_color {
    width: 100%;
    max-width: 640px;
    margin: 20px auto;
    padding-right: 20px;
    padding-left:  20px;
    box-sizing: border-box;
    }
    .novel_bn {
    width: 80%;
    margin: 0 auto;
    text-align: center;
    }
    .novel_bn:last-child {
    margin-top: 30px;
    }
    .novel_bn a {
    display: inline-block;
    margin-right: 10px;
    margin-left:  10px;
    }
    #novel_no {
    margin-top: 15px;
    text-align: center;
    }
    .novel_subtitle {
    margin-top: 10px;
    font-weight: bold;
    text-align: center;
    }
    #novel_p,
    #novel_a {
    margin-top: 10px;
    color: #75715e;
    }
    #novel_honbun {
    margin-top: 10px;
    }