看看能不能拯救小尾巴

有人喜欢有人不喜欢,我只是提供一种方式,不提供脚本哈,有兴趣的自己研究。

前几天看 @PlayMcBKuwu 写的小尾巴,挺有趣的,感觉很有想法,但是很快就不推荐了,会污染帖子质量 & 索引,作为一个前端,就想着有没有什么办法可以既好玩又不会影响论坛的内容质量呢?

  1. 考虑能不能用 web component,既可以支持更丰富的 html,也可以屏蔽对这个 tag 的内容收集,很显然,editor 只支持少量的 tag,不支持 web component 自定义 tag
  2. svg 也不支持,支持 img
  3. 那就可以把 svg 内容转换为 dataUri,使用 img 渲染

还要考虑的问题是:svg 靠手写太难了,而且不支持文字排版,找了很久发现svg 支持 foreignObject,相等于可以在 svg 中嵌入 html,所以解决方案就是:使用 svg 的 foreignObject 渲染 html,然后转换成 dataURI。

文章后面有个 gist 示例,版权都是 @PlayMcBKuwu 的,我改了下交互,编辑器的最后输入 :tail: 自动添加,加了点 loading 效果。

最后声明,如果还是不妥,请管理员移除吧,我只是觉的好玩。

 function blobToDataURL(blob) {
    return new Promise((resolve) => {
      const file = new FileReader()
      file.onload = function(e) {
        resolve(e.target.result)
      }
      file.readAsDataURL(blob)
    })
  }

  async function createTemplate(content, source) {
    // 加个多彩颜色吧
    const html = `<span style="font-size:80%;background-image: linear-gradient(to right, #6B5B95, #FF6F61);color: transparent; background-clip: text">
    「${content}」——《${source}》」
</span>
` 
    // 先渲染一遍,计算宽高
    const container = document.querySelector('.topic-post .cooked')
    if (!container) return ''
    const div = document.createElement('div')
    div.style.position = 'absolute'
    div.style.opacity = '0';
    div.style.zIndex = '-1000';
    div.innerHTML = html;
    container.appendChild(div)
    const { width, height } = div.getBoundingClientRect();
     container.removeChild(div)
    const svg = `
<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}">
<foreignObject width="100%" height="100%">
    <div xmlns="http://www.w3.org/1999/xhtml">${html}</div>
</foreignObject>
</svg>`;
    const blob = new Blob( [svg], { type: 'image/svg+xml;charset=utf-8' } );
    const dataUrl = await blobToDataURL(blob)
    // dataUrl 记得移除 charset=utf-8; 否则无法保存
    return `
***
<div style="text-align:center" class="_tail_containe">
        <img width="${width}" height="${height}" src="${dataUrl.replace('charset=utf-8;', '')}"/>
</div>
`
  }
5 个赞

这个是图片小尾巴,别举报我啊


1 个赞

支持一下,这种尾巴确实没想到有弊处

1 个赞

提醒一下,太五彩缤纷的小尾巴是违规的。。

1 个赞

我也想小尾巴!

HTML 还不会使用欸

建议改为 Alt + Enter 大法,据我所知目前这个快捷键没有被占用。

附: 2.0+ 的版本是有一段版本和防伪标识(其实是用于辅助移除)的,可以删掉。
我的代码目前全开源,没有版权一说。

2 个赞

这个是基于 SVG 也就是图片,而非文字。

1 个赞

建议还是自建一个服务器,根据用户名、帖子返回小尾巴内容,用油猴脚本渲染

3 个赞

而且,这种小尾巴,个人觉得很碍眼,不希望在没有油猴脚本的情况下看到

4 个赞

怎么说呢,我还是喜欢清爽点的风格,会尽量隐藏不需要信息(hover 显示),所以小尾巴对我个人而言多多少少会造成一定的阅读障碍

3 个赞

赞同,当时有小尾巴脚本的时候,就一直在想办法找特征屏蔽

2 个赞

其实是留特征了,不知道隐藏脚本还能不能用……

2 个赞

基于 2.1 改的没留下特征?

2 个赞

是的,不过我自己很少回帖 只是给大家分享下这种方法,另外这种方式没办法支持动态效果,也就一张图片而已,本来就支持图片签名

1 个赞

不提供脚本了,这种有人喜欢有人不喜欢,不过说回来,本身就支持图片签名,想来也没人能说什么

2 个赞

本身就提供图片签名吧,我就是觉得好玩,不开发脚本

1 个赞

这种好屏蔽 , dataUri 类型的 img 屏蔽就行

1 个赞

因为我 mac 上按不出 alt 键,之前测试的时候一不小心发出去了,我说不会被人给举报了吧 :sweat_smile:赶紧删了

1 个赞

From 软件开发 to 开发调优

1 个赞