开启辅助访问     
收藏本站

站内搜索

搜索

Minecraft(我的世界)苦力怕论坛

[其他] 星空晶体的BBCode预览器正式版2.0(第四版)发布+我的想法

 发表于 2024-8-6 19:54:11|显示全部楼层|阅读模式 IP:山东省
网站:https://xkjt.github.io/tool/bbcode-see/BBCode-4.html


更新内容:

①去除了hide标签,因为此标签在论坛已经没有了作用

②修正了code标签,之前如果在code标签中是Html或JS,不会显示。而现在修复了这个问题(见下图)

Screenshot_20240806_193339_com.android.chrome.jpgScreenshot_20240806_193356_com.android.chrome.jpg

我的后更新想法:

①添加更多标签

②在输入框上面添加一行按钮,点击可在输入框直接添加一个BBCode标签

③添加一些样式选择

源码:
(我就用一下格式化工具,结果源码就这样了

  1. <!DCTYPE html>
  2. <html>
  3. <head>
  4.   <meta charset="utf-8" name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
  5.   <title>BBcode预览器</title>
  6.   <style>
  7.    body{
  8.    
  9.      margin: 0;
  10.    
  11.      padding: 0;
  12.    
  13.      font-size: 12px;
  14.    
  15.      font-family: 'Microsoft YaHei', sans-serif;
  16.    
  17.      filter: blur(px); /* 这里设置模糊度,数值越大越模糊 */
  18.    
  19.    }
  20.    
  21.    
  22.    
  23.    #qianyan {
  24.    
  25.      border: 2px solid orange;
  26.    
  27.      margin-top: 20px;
  28.    
  29.      border-radius: 10px;
  30.    
  31.      background-color: rgba(255, 255, 255, 0);
  32.    
  33.    }
  34.    
  35.    #qianyan .biaoti {
  36.    
  37.      text-align: center;
  38.    
  39.      color: #87ceeb;
  40.    
  41.      /*text-shadow: 0 0 3px rgba(0, 0, 0, 0.8); 添加一个轻微的阴影以增强效果 */
  42.    
  43.      
  44.    
  45.    }
  46.    
  47.    #qianyan .wen {
  48.    
  49.      
  50.    
  51.      color: #00008B
  52.    
  53.    }
  54.    
  55.    #zhengshi {
  56.    
  57.      color: black;
  58.    
  59.      background-color: white;
  60.    
  61.      overflow: auto;
  62.    
  63.      border: 2px solid orange;
  64.    
  65.      margin-top: 20px;
  66.    
  67.      border-radius: 10px;
  68.    
  69.      background-color: rgba(255, 255, 255, 0);
  70.    
  71.      
  72.    
  73.    }
  74.    #yulan {
  75.    
  76.      margin-left: 20px;
  77.    
  78.      width: calc(100% - 40px); /* 使用calc函数动态计算宽度 */
  79.    
  80.      height: 270px; /* 或者移除min-height和max-height */
  81.    
  82.      overflow: auto; /* 或者移除此属性 */
  83.    
  84.      border: 2px solid #00008B;
  85.    
  86.      border-radius: 10px;
  87.    
  88.      background-color: rgba(255, 255, 255, 0);
  89.    
  90.      overflow-y: auto; /* 当内容超过高度时显示垂直滚动条 */
  91.    
  92.      word-wrap: break-word; /* 允许长单词或URL换行 */
  93.    
  94.      white-space: pre-wrap; /* 保留空白,但允许适当换行 */
  95.    
  96.      overflow: ;
  97.    
  98.    }
  99.    
  100.    #zhengshi .biaoti {
  101.    
  102.      text-align: center;
  103.    
  104.      color: #87ceeb;
  105.    
  106.      
  107.    
  108.     /* text-shadow: 0 0 3px rgba(0, 0, 0, 0.8); 添加一个轻微的阴影以增强效果 */
  109.    
  110.    }
  111.    
  112.    #zhengshi .anniu {
  113.    
  114.      width: 200px; /* 设置按钮的宽度 */
  115.    
  116.      height: 50px; /* 设置按钮的高度 */
  117.    
  118.      padding: 10px; /* 设置内边距 */
  119.    
  120.      
  121.    
  122.      border: 1px solid #00008B; /* 设置边框样式和颜色 */
  123.    
  124.      border-radius: 25px; /* 设置边框角的半径 */
  125.    
  126.      background-color: rgba(255, 255, 255, 0);;
  127.    
  128.      margin-left: 80px; /* 设置按钮距离左侧80像素 */  
  129.    
  130.      margin-top: 20px;      
  131.    
  132.      
  133.    
  134.    }
  135.    
  136.     #zhengshi .biaoti1 {
  137.    
  138.      
  139.    
  140.      text-align: center;
  141.    
  142.      color: #87ceeb
  143.    
  144.      /*text-shadow: 0 0 3px rgba(0, 0, 0, 0.8);  添加一个轻微的阴影以增强效果 */
  145.    
  146.     }
  147.    
  148.     table {
  149.    
  150.       width: 100%;
  151.    
  152.       border-collapse: collapse;
  153.    
  154.       color: black;
  155.    
  156.       font-size: 16p
  157.    
  158.    }
  159.    
  160.     tr, td {
  161.    
  162.       border: 1px solid black;
  163.    
  164.    }
  165.    
  166.     ol, ul {
  167.    
  168.      margin: 0; /* 移除默认的外边距 */
  169.    
  170.      padding: 0; /* 移除默认的内边距 */
  171.    
  172.      list-style-position: inside; /* 将列表标记放在文本内边距中 */
  173.    
  174.    }
  175.    
  176.    li {
  177.    
  178.      margin: 0; /* 移除默认的外边距 */
  179.    
  180.      padding: 0; /* 移除默认的内边距 */
  181.    
  182.      line-height: 1.5; /* 设置行高,确保文本垂直居中 */
  183.    
  184.      vertical-align: middle; /* 设置垂直对齐方式 */
  185.    
  186.    }
  187.    
  188.       #output {
  189.    
  190.        background-color: rgba(255, 255, 255, 0); /* 半透明背景 */
  191.    
  192.        border: 1px solid #00008B; /* 边框 */
  193.    
  194.        margin-top: 10px;
  195.    
  196.        padding: 10px;
  197.    
  198.        border-radius: 10px;
  199.    
  200.        width: 94%;
  201.    
  202.        height: 400px; /* 设置固定高度 */
  203.    
  204.         /* 隐藏水平滚动条 */
  205.    
  206.        overflow-y: auto; /* 当内容超过高度时显示垂直滚动条 */
  207.    
  208.        word-wrap: break-word; /* 允许长单词或URL换行 */
  209.    
  210.        white-space: pre-wrap; /* 保留空白,但允许适当换行 */
  211.    
  212.    }
  213.    
  214.    #output1 {
  215.    
  216.        font-size: 16px;
  217.    
  218.        margin: 0; /* 移除默认的margin */
  219.    
  220.        white-space: pre-wrap; /* 保留空白,但允许适当换行 */
  221.    
  222.    }
  223.       /*#an {
  224.               text-align: center;
  225.         }*/
  226.   </style>
  227.   <script>
  228.    function jiexi() {
  229.    
  230.      var shuchu = document.getElementById("yulan").value;
  231.    
  232.      yulan = shuchu
  233.    
  234.        .replace(/\[color=([^\]]+)\](.*?)\[\/color\]/gi, function(match, color, content) {
  235.    
  236.    return '<span style="color: ' + color + '">' + content + '</span>';
  237.    
  238.        })
  239.    
  240.        .replace(/\[backcolor=([^\]]+)\](.*?)\[\/backcolor\]/gi, function(match, backcolor, content) {
  241.    
  242.    return '<span style="background-color: ' + backcolor + '">' + content + '</span>';
  243.    
  244.        })
  245.    
  246.        .replace(/\[size=(\d+)\](.*?)\[\/size\]/gi, function(match, size, content) {
  247.    
  248.    var fontSize;
  249.    
  250.    switch (size) {
  251.    
  252.      case '1':
  253.    
  254.        fontSize = '8px';
  255.    
  256.        break;
  257.    
  258.      case '2':
  259.    
  260.        fontSize = '12px';
  261.    
  262.        break;
  263.    
  264.      case '3':
  265.    
  266.        fontSize = '16px';
  267.    
  268.        break;
  269.    
  270.      case '4':
  271.    
  272.        fontSize = '20px';
  273.    
  274.        break;
  275.    
  276.      case '5':
  277.    
  278.        fontSize = '24px';
  279.    
  280.        break;
  281.    
  282.      case '6':
  283.    
  284.        fontSize = '28px';
  285.    
  286.        break;
  287.    
  288.      case '7':
  289.    
  290.        fontSize = '32px';
  291.    
  292.        break;
  293.    
  294.      case '8':
  295.    
  296.        fontSize = '36px';
  297.    
  298.        break;
  299.    
  300.      default:
  301.    
  302.        fontSize = '16px';
  303.    
  304.        break;
  305.    
  306.    }
  307.    
  308.    return '<span style="font-size: ' + fontSize + '">' + content + '</span>';
  309.    
  310.        })
  311.    
  312.        .replace(/\[url=([^\]]+)\](.*?)\[\/url\]/gi, function(match, url, content) {
  313.    
  314.    return '<a href="' + url + '" target="_blank">' + content + '</a>';
  315.    
  316.        })
  317.    
  318.        .replace(/\[url\](.*?)\[\/url\]/gi, function(match, url) {
  319.    
  320.    return '<a href="' + url + '" target="_blank">' + url + '</a>';
  321.    
  322.        })
  323.    
  324.        .replace(/\[b\]/g, "<strong>")
  325.    
  326.        .replace(/\[\/b\]/g, "</strong>")
  327.    
  328.        .replace(/\[s\]/g, "<s>")
  329.    
  330.        .replace(/\[\/s\]/g, "</s>")
  331.    
  332.        .replace(/\[u\]/g, "<u>")
  333.    
  334.        .replace(/\[\/u\]/g, "</u>")
  335.    
  336.        .replace(/\[i\]/g, "<i>")
  337.    
  338.        .replace(/\[\/i\]/g, "</i>")
  339.    
  340.        .replace(/\[quote\](.*?)\[\/quote\]/gs, function(match, quoteContent) {
  341.    
  342.    return '<div style="border: 1px dashed orange; padding: 10px; margin: 10px 0; background-color: #ffe0a3; color: #d97008;">' + '回复 '+ quoteContent + '</div>';
  343.    
  344.        })
  345.    
  346.    .replace(/\[table(?:=([^\]]+))?\](.*?)\[\/table\]/gs, function(match, params, tableContent) {
  347.    
  348.      var tableStyle = '';
  349.    
  350.      if (params) {
  351.    
  352.        var widthMatch = params.match(/(\d+)(%|px)?/);
  353.    
  354.        var colorMatch = params.match(/([#a-zA-Z0-9]+)(?:,|$)/);
  355.    
  356.        if (widthMatch) {
  357.    
  358.          tableStyle += 'width: ' + widthMatch[1] + (widthMatch[2] || 'px') + ';';
  359.    
  360.        }
  361.    
  362.        if (colorMatch) {
  363.    
  364.          tableStyle += 'background-color: ' + colorMatch[1] + ';';
  365.    
  366.        }
  367.    
  368.      }
  369.    
  370.      return '<table style="' + tableStyle + '">' + tableContent + '</table>';
  371.    
  372.    })
  373.    
  374.        .replace(/\[tr\]/g, "<tr>")
  375.    
  376.        .replace(/\[\/tr\]/g, "</tr>")
  377.    
  378.        .replace(/\[td\]/g, "<td>")
  379.    
  380.        .replace(/\[\/td\]/g, "</td>")
  381.    
  382.        .replace(/\[code\](.*?)\[\/code\]/gs, function(match, codeContent) {
  383.    
  384.    // 将特殊字符转换为HTML实体
  385.    
  386.    var encodedContent = codeContent.replace(/&/g, '&amp;')
  387.    
  388.                                    .replace(/</g, '&lt;')
  389.    
  390.                                    .replace(/>/g, '&gt;')
  391.    
  392.                                    .replace(/"/g, '&quot;')
  393.    
  394.                                    .replace(/'/g, '&#39;');
  395.    
  396.    return '<div style="border: 1px solid lightblue; padding: 0; margin: 10px 0;">' +
  397.    
  398.    '<div style="background-color: yellow; color: white; text-align: center; padding: 5px;">代码内容</div>' +
  399.    
  400.    '<div style="background-color: #F5F5F5 ; padding: 10px;">' + encodedContent + '</div>' +
  401.    
  402.    '</div>';
  403.    
  404.        })
  405.    
  406.        .replace(/\[spoiler\](.*?)\[\/spoiler\]/gs, function(match, spoilerContent) {
  407.    
  408.    return '<div style="border: 1px solid #00008B; padding: 0; margin: 10px 0;">' +
  409.    
  410.    '<div style="background-color: blue; color: white; text-align: center; padding: 5px;">折叠内容</div>' +
  411.    
  412.    '<div style="background-color: white; color: black; padding: 10px;">' + spoilerContent + '</div>' +
  413.    
  414.    '</div>';
  415.    
  416.    })
  417.    
  418.        .replace(/\[align=(left|center|right)\](.*?)\[\/align\]/gi, function(match, align, content) {
  419.    
  420.    return '<div style="text-align: ' + align + '">' + content + '</div>';
  421.    
  422.        })
  423.    
  424.        .replace(/\[list=1\](.*?)\[\/list\]/gs, function(match, listContent) {
  425.    
  426.    return '<ol>' + listContent.replace(/\[\*\](.*?)\n?/g, '<li>$1</li>') + '</ol>';
  427.    
  428.        })
  429.    
  430.        .replace(/\[list\](.*?)\[\/list\]/gs, function(match, listContent) {
  431.    
  432.    return '<ul>' + listContent.replace(/\[\*\](.*?)\n?/g, '<li>$1</li>') + '</ul>';
  433.    
  434.        })
  435.    
  436.        .replace(/\[img=([0-9]+),([0-9]+)\](.*?)\[\/img\]/gi, function(match, width, height, url) {
  437.    
  438.    return '<img src="' + url + '" style="width: ' + width + 'px; height: ' + height + 'px;">';
  439.    
  440.        })
  441.    
  442.        .replace(/\[img\](.*?)\[\/img\]/g, "<img src="$1" style="max-width: 100%; height: auto;">")
  443.    
  444.        .replace(/\[\hr\]/g, "<hr>");
  445.    
  446.      document.getElementById("output1").innerHTML = yulan;
  447.    
  448.    }
  449.    
  450.   </script>
  451. </head>
  452. <body>
  453.   <div id="qianyan">
  454.    <h1 class="biaoti">在 使 用 之 前</h1>
  455.    <p class="wen"><strong>BBcode</strong>是一种简单、易学的<strong>标记语言。</strong>主要用于论坛、在线社区和公告板等平台的文本格式化。它基于HTML,但相比之下更为简单,易于学习和使用。BBcode通过使用特殊的标签来对文本进行格式化,这些标签在显示时会转换为HTML代码,从而实现在网页上的格式化效果。BBcode的语法类似于Html,但是是[]不是&lt;&gt;。此工具可快速预览BBcode代码,让用户可查看排版并修复不足的排版。</p>
  456.   </div>
  457.   <div id="zhengshi">
  458.    <h1 class="biaoti">开 始 使 用</h1> <br>
  459.             <textarea id="yulan" placeholder="请在这里输入你的BBcode代码"></textarea>
  460.             <div id="an"><button class="anniu">点击预览</button></div><br>
  461.    <h1 class="biaoti1">↓下面预览↓</h1>
  462.    <div id="output">
  463.     <pre id="output1"></pre>
  464.    </div>
  465.   </div> <br>
  466. </body>
  467. </html>
复制代码


支持一下吧
苦力怕论坛,感谢有您~
 发表于 2024-8-6 22:30:59 来自手机|显示全部楼层 IP:湖南省
本帖最后由 一只晨月鸭 于 2024-8-6 22:34 编辑

东西是挺不错的,但是代码貌似无法正常使用,可能是格式化问题。至于您说的“点击一个按钮自动输入bbcode”这个应该属于编辑器,bbcode的编辑器是推荐wysibb,该编辑器是一个基于jQuery的bbcode编辑器
这里指的编辑器不是仅代表输入代码的输入框,如下所示(图片内是Typecho默认编辑器):
IMG_20240806_223309.png
类似这种编辑器的使用方法就是引入该Js,然后使用scrip标签初始化和绑定容器id,最后再到页面你想要的地方写一个div容器,容器id为你初始化时的id
通常调用写法如下:
  1. <div id="你的id">
  2. </div>
复制代码

具体初始化的Js写法得看文档
2#2024-8-6 22:30:59回复收起回复
苦力怕论坛,感谢有您~
回复支持

使用道具举报

本版积分规则

本站
关于我们
联系我们
坛史纲要
官方
哔哩哔哩
技术博客
下载
网易版
安卓版
JAVA
反馈
意见建议
教程中心
更多
捐助本站
QQ群
QQ群

QQ群

访问手机版

访问手机版

手机版|小黑屋|系统状态|klpbbs.com

粤公网安备 44200002445329号 | 由 木韩网络 提供支持 | GMT+8, 2024-11-24 15:29

声明:本站与Mojang以及微软公司没有从属关系

Powered by Discuz! X3.4 粤ICP备2023071842号-3