文章はクリックで編集できます アイコン画像はクリックで編集できます
文章はクリックで編集できます xで削除できます
view source
JavaScript
document.title = 'ツイッター風トーク画面メーカー';
$(function(){
$('name,date,at,text,newstitle,domain,summary,n').attr({contentEditable:'true'});
var post = $('post').eq(0).clone();
$('post imagewrap').remove();
$('post news').remove();
$('post retweet').remove();
$('#addPost').on('click', function(e){
$('timeline').append(post.clone());
});
$('#addCopy').on('click', function(e){
var postCopy = $('post').eq(-1).clone();
$('timeline').append(postCopy.clone());
});
$(document).on('click', '#randomNum', function(e){
randomNum();
});
$(document).on('click', '#randomName', function(e){
randomName();
});
$(document).on('click', '#addBadge', function(e){
$img = $('<img>',{src:'tw-badge.png'}).addClass('badge');
$('badge').empty();
$('badge').append($img);
$('.icon').addClass('badge-on');
});
$(document).on('click', '#addMosaic', function(e){
$('.icon,name,at').each(function(){
var ele = $(this);
if(ele.hasClass('mosaic')){
ele.removeClass('mosaic');
} else {
ele.addClass('mosaic');
}
});
});
$(document).on('click', '.icons img', function(e){
var src = $(this).attr('src');
$('timeline .icon').attr({src:src});
});
$(document).on('change', '#iconURL', function(e){
var url = $(this).val();
if(!url.match(/^http/)){return;}
url = encodeURI(url);
var src = bc.convertImgDataURL(url);
$('timeline .icon').attr({src:src});
});
$(document).on('click', '.badge', function(e){
var src = $(this).attr('src');
var post = $(this).parent().parent().parent().parent();
post.find('.icon').removeClass('badge-on');
if(src.match(/blue/)){
$(this).remove();
} else {
src = src.replace(/.png/,'-blue.png');
$(this).attr({src:src});
}
});
function randomNum(){
$('n').each(function(){
var name = $(this).attr('name');
var max = 9999;
if(name==='comment'){
max = 999;
}
if(name==='rt'){
max = 19999;
}
if(name==='like'){
max = 999999;
}
var r = Math.floor(Math.random()*max);
var rText = r.toLocaleString();
var rMan = Math.floor(r/10000);
if(r>9999){
rText = rText.slice(0,rText.length-5) + '万';
}
$(this).text(rText);
});
}
function randomText(lang='en'){
var str = '';
var l = 9;
var charStart = 97;
var charLen = 25;
if(lang==='ja'){
l = Math.floor(Math.random()*3 + 3);
charStart = 12354;
charLen = 80;
}
for(i=0;i<l;i++){
var charcode = Math.floor(Math.random()*charLen + charStart);
var c = String.fromCharCode(charcode);
str += c;
}
return str;
}
function randomName(){
$('name').each(function(){
$(this).text(randomText('ja'));
});
$('at').each(function(){
$(this).text('@'+randomText());
});
}
$(document).on('change', '#textarea', function(e){
var text = $(this).val();
var tAry = text.split('\n');
$('name').eq(0).text(tAry[0]);
$('at').eq(0).text(tAry[1]);
$('date').eq(0).text(tAry[3]);
$('text').eq(0).text(tAry[4]);
});
$(document).on('dblclick', 'options',function(e){
var img = $('<img>').attr({src:'threads-options.png'}).css({height:'22px'});
$(this).empty().append(img);
});
$(document).on('click', 'close',function(e){
$(this).parent().remove();
});
$(document).on('change', '.file', function(e){
var ele = $(this);
var img = ele.parent().find('img');
var event = e.originalEvent;
console.log(event);
var file = event.target.files[0];
if (!file.type.match('image.*')){
return;
}
console.log(file);
var reader = new FileReader();
reader.onload = function(){
var dataURL = reader.result;
console.log(dataURL);
var newImage = new Image();
newImage.src = dataURL;
newImage.onload = function(){
img[0].src = newImage.src;
}
}
reader.readAsDataURL(file);
});
});
$(function(){
$('#toImg').on('click', function(){
html2canvas(document.querySelector("#target")).then(canvas => {
console.log(canvas);
document.querySelector("#screenshot").textContent = '';
document.querySelector("#screenshot").appendChild(canvas)
});
});
$(document).on('click', '#screenshot canvas', function(){
var canvas = $(this);
var data = canvas[0].toDataURL('image/png');
var name = $('name').eq(0).text();
var a = $('<a>', {href:data,download:'twitter-talk-'+name});
a[0].click();
});
});
CSS
#demo{
display:block;
width:100%;
max-width:480px;
margin:0 auto;
}
timeline{
display:block;
width:100%;
max-width:480px;
margin:0 auto;
font-family: "Segoe UI",Meiryo,system-ui;
}
post{
display:block;
width:100%;
margin:0 auto;
font-size:15px;
line-height:20px;
color: rgb(15, 20, 25);
border:1px solid rgb(239, 243, 244);
border-top:none;
position:relative;
top:0;
left:0;
}
post img{
vertical-align:bottom;
}
post-in{
display:block;
padding:8px 16px;
display: flex;
}
header{
display:block;
position:relative;
top:0;
left:0;
font-size:15px;
color: rgb(83, 100, 113);
vertical-align:bottom;
}
icon{
width:48px;
margin-right:16px;
}
img.icon{
width:48px;
height:48px;
border-radius:50%;
}
img.icon.badge-on{
border-radius:4px;
}
badge{
display:inline-block;
}
.badge{
width:18px;
height:18px;
margin-bottom:2px;
}
main{
display:block;
width:100%;
justify-content: center;
padding-bottom: 12px;
}
name{
font-weight:700;
color: rgb(0, 0, 0);
}
text{
display:block;
color: rgb(0, 0, 0);
}
imagewrap,
retweet,
news{
display:block;
margin:12px auto;
border:1px solid rgb(207, 217, 222);
border-radius: 16px;
overflow:hidden;
position:relative;
top:0;
left:0;
}
imagewrap img,
news img{
width:100%;
}
newstitle{
display:block;
}
newstext{
display:block;
padding:12px;
text-overflow: ellipsis;
}
domain{
display:block;
color: rgb(83, 100, 113);
}
summary{
}
news .img-area{
display:block;
width:100%;
padding-bottom:52%;
position:relative;
top:0;
left:0;
}
news .img-area img{
position:absolute;
top:0;
left:0;
width:100%;
}
retweet header,
retweet text{
padding:12px;
}
retweet text{
padding-top:2px;
}
retweet icon{
width:20px;
margin-right:0;
}
retweet .icon{
width:18px;
height:18px;
}
options{
padding:4px 4px;
padding-top:12px;
display: flex;
color: rgb(83, 100, 113);
font-size:13px;
vertical-align:bottom;
position:relative;
top:0;
left:0;
}
opt img{
width:18px;
height:18px;
margin:2px;
}
opt{
width:30%;
display: flex;
}
opt:nth-child(4){
width:10%;
}
opt n{
display:inline-block;
padding:0 10px;
}
input[type="file"]{
display:none;
}
.mosaic{
filter: blur(3px);
}
close{
position:absolute;
top:2px;
left:2px;
display:none;
z-index:3;
width:8px;
height:8px;
cursor:pointer;
}
*:hover>close{
display:inline-block;
opacity:0.5;
}
.icons{
display: flex;
}
.icons img{
width:60px;
}
input[type="text"]{
width:100%;
}
textarea{
width:100%;
height:6em;
}
button{
display:block;
width:320px;
padding:10px;
margin:8px auto;
}
#screenshot{
background-color:#000;
text-align:center;
}
#code{
display:none;
}
HTML
ページのソースを表示 : Ctrl+U , DevTools : F12
view-source:https://hi0a.com/demo/-js/js-talk-twitter/
ABOUT
hi0a.com 「ひまアプリ」は無料で遊べるミニゲームや便利ツールを公開しています。
プログラミング言語の動作デモやWEBデザイン、ソースコード、フロントエンド等の開発者のための技術を公開しています。
必要な機能の関数をコピペ利用したり勉強に活用できます。
プログラムの動作サンプル結果は画面上部に出力表示されています。
環境:最新のブラウザ GoogleChrome / Windows / Android / iPhone 等の端末で動作確認しています。
画像素材や音素材は半分自作でフリー素材配布サイトも利用しています。LINK参照。
動く便利なものが好きなだけで技術自体に興味はないのでコードは汚いです。
途中放置や実験状態、仕様変更、API廃止等で動かないページもあります。