资讯专栏INFORMATION COLUMN

看完你也想编写自己的 react 插件

zhou_you / 2775人阅读

摘要:清楚自己想要什么样的组件,就自己动手撸呗。咱们先来看看它的效果吧如果大家有时间,窝还是鼓励大家自己动手实现一些小插件。于是自己就琢磨能否继承使用方法同时保持特有组件特性。需要确保已安装。

副标题----为什么我要写这个 react 插件

图片懒加载是项目中常用的功能,然而现有 react 懒加载组件库,用着都不是很爽了 ?。概括一下有如下几点:

没有只针对 image 懒加载组件。多数组件库都内置了模块、组件、脚本、iframe 懒加载功能,而弱化了 image 懒加载功能。

不支持动画显示效果。

不灵活,可配置度不高。

placeholder 不能组件化。

不支持响应式图片( picture / srcset )。

react-lazyimg-component

清楚自己想要什么样的组件,就自己动手撸呗 ?。于是乎,react-lazyimg-component 就诞生了 ?。咱们先来看看它的效果吧:

singsong: 如果大家有时间,窝还是鼓励大家自己动手实现一些小插件。

PC 预览:

使劲猛击这里

手机预览(扫一扫):

什么情况需要使用它 1. 小巧轻便,简单易用,基本无学习成本

在那个 jQuery 一统天下的年代,撸代码就用 jQuery 一把梭。其中
jQuery.lazyload 是一个很常用图片懒加载插件。 可能很多像我一样的小伙伴们,懒加载就直接上 jQuery.lazyload,早已习惯了 jQuery.lazyload 使用。 于是自己就琢磨能否继承 jQuery.lazyload 使用方法同时保持 react 特有组件特性。这样可以很快上手~?

singsong: 这里只是继承了 jQuery.lazyload 配置特性,不是完全继承。毕竟 jQuery 与现在主流的 MVVM 框架思想截然不同。

如果小伙伴们熟悉 jQuery.lazyload , 完全没有学习成本直接上手 react-lazyimg-component 哈。 只说不是写,然并卵。那我们来看看它到底好用不:

安装
// npm
$> npm install react-lazyimg-component
// yarn
$> yarn add react-lazyimg-component
使用
// 引入
import Lazyimg, { withLazyimg } from "react-lazyimg-component";

// 调用
;

是不是很简单,有木有 ?。上述只是使用 react-lazyimg-component 的默认配置。 这里我们可以通过配置项来定制懒加载的行为:

// 引入 lazyimg
import Lazyimg, { withLazyimg } from "react-lazyimg-component";
// 引入 volecity.js
import "velocity-animate";
import "velocity-animate/velocity.ui";

// 配置
const config = {
  threshold: 100, // 指定触发阈值
  js_effect: "transition.fadeIn", // 支持 velocity.js 动画效果
};
// 基于配置项生成对应 Lazy 组件
const Lazy = withLazyimg(config);

// 调用
;

接下来我们来看看 react-lazyimg-component 都那些配置项:

threshold: 0, // 指定距离底部多少距离时触发加载
event: "scroll", // 指定触发事件,默认为"scroll"
js_effect: undefined, // 显示图片的js动画效果
css_effect: undefined, // 显示图片的css动画效果
container: window, // 指定容器,默认为window
parent: undefined, // 可以指定动画效果作用于元素的哪个父级元素
appear: null, // 元素出现在可视窗口时触发appear钩子函数
load: null,  // 元素图片的加载完后触发load钩子函数
error: null, // 图片加载出错时触发error钩子函数
node_type: "img", // 指定生成的节点类型,默认为"img"
placeholder: // 占位元素,除了支持普通的图片外,还支持react组件。
  "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC",

是不是很眼熟 ?,如果你熟悉 jquery.lazyload,那么你只需了解如下几个配置项即可:

js_effect: 指定元素显示的动画效果,基于velocity.js动画实现。使用之前需加载velocity.js

css_effect: 指定元素显示的动画效果,基于animate.css动画实现。使用之前需安装animate.css

parent: 用于指定动画效果作用于元素的哪个父级元素。可取值:

父元素的 selector 选择器(字符串)

父级层级 level(整数)

node_type: 指定 react 将生成的元素类型,默认为"img"。

placeholder: 占位元素,除了支持普通的图片外,还支持 react 组件。

2. 支持 velocity.js、animate.css 动画效果库,及自定动画效果。同时还支持动画效果作用于父级元素。

指定 js-effect 配置项来配置 velocity.js 动画效果

注意:js-effect 依赖于 velocity.js。需要确保 velocity.js 已加载。
// 引入 lazyimg
import Lazyimg, { withLazyimg } from "react-lazyimg-component";
// 引入 volecity.js
import "velocity-animate";
import "velocity-animate/velocity.ui";
// 配置
const config = {
  placeholder: "loading.svg",
  js_effect: "transition.fadeIn", // 支持 velocity.js 动画效果
};
const Lazy = withLazyimg(config);
// 调用
;

直接上效果了 ?

指定 css-effect 配置项来配置 animate.css 动画效果

注意:css-effect 依赖于 animate.css。需要确保 animate.css 已安装。
  // 配置
  const config = {
    js_effect="transition.flipXIn" // 不会生效
    css_effect={["animated", "rollIn"]} // 定制 css 动画效果
  };
  const Lazy = withLazyimg(config);
  // 调用
  ;

直接上效果了 ?

指定 parent 配置项指定父级元素动画效果

singsong: 为什么懒加载的动画效果只作用于目标元素,某些条件下作用于目标元素的父级元素会有意想不到效果哦 ?。
// 指定动画效果作用于该父级元素 <div className="example-img"> <Lazyimg className="lazy" src={"http://zhansingsong.github.io/lazyimg/22.4582fc71.jpg"} css_effect={["animated", "flipInY"]} // 定制 css 动画效果 parent=".example" // 指定父级元素选择器,也可以指定父级层级level:2 /> </div> </div></pre> <p>直接上效果了 ?</p> <p><script type="text/javascript">showImg("https://segmentfault.com/img/remote/1460000013614823?w=706&h=755");</script></p> <b>3. react 组件式 placeholder</b> <pre>singsong: 传统的 placeholder 通常都是由图片来代替,为什么不能用组件来定制,这样可扩展性更高。完全可以摆脱设计师的束缚,咋们开发自由发挥?! 想想有木有有点小鸡冻 ?<del>~</del>~</pre> <p>先定义 placeholder 组件</p> <pre>import React from "react"; import "./style.scss"; export default props => { let { className, text, img, children } = props; return ( <div className={["placeholder", className] .filter(item => { if (item) { return item; } }) .join(" ")} > {img && } {text && <span className="placeholder-text">{children || text}</span>} </div> ); };</pre> <p>指定 placeholder 配置项为上述定义的 placeholder 组件</p> <pre>// 配置 const Lazy = withLazyimg({ js_effect: "transition.perspectiveDownIn", placeholder: <Placeholder img={require("./loading.svg")} />, }); // 调用 <Lazy className="lazy" src={"http://zhansingsong.github.io/lazyimg/22.4582fc71.jpg"} />;</pre> <p>直接上效果了 ?</p> <p><script type="text/javascript">showImg("https://segmentfault.com/img/remote/1460000013614824?w=702&h=851");</script></p> <pre>singsong: 图中小火焰有木有很耀眼<del>~</del> </pre> <p>接着咋们来看看组件式 placeholder 应用场景案例,直接上效果了 ?</p> <p><script type="text/javascript">showImg("https://segmentfault.com/img/remote/1460000013614825?w=371&h=669");</script></p> <p>上图是分类页通过定制显示文案的 placeholder 组件来代替普通的灰色图片,效果是不是看着还行 ?。这是我在实际项目中使用的案例。这里小伙伴可以自由发挥哈<del>~</del>。如果你有不错 idea 可以@我哈,先谢了!</p> <b>4. 响应式图片( picture / srcset )</b> <p>为了实现 web 应用的极致体验,Progressive Web App 渐进式网页应用程序越来越受到开发者们重视,其中响应式图片就是其中一个重要技术项。为了跟着大部队,咋们也需要了解了解噢!</p> <p>srcset 特性实现响应式图片</p> <pre> // dpr <Lazyimg className="lazy" src={"http://zhansingsong.github.io/lazyimg/22.4582fc71.jpg"} srcSet="source_1x.png 1x, source_2x.png 2x, source_3x.png 3x, source_3.5x.png 3.5x" js_effect="transition.bounceIn" /></pre> <p>直接上效果了 ?</p> <p><script type="text/javascript">showImg("https://segmentfault.com/img/remote/1460000013614826?w=480&h=577");</script></p> <pre>singsong: 这里 srcset 配合 sizes 特性可以实现更好的效果</pre> <p>picture 元素实现响应式图片</p> <pre> <picture> <source media="(min-width: 650px)" srcSet="https://www.w3schools.com/tags/img_pink_flowers.jpg" /> <source media="(min-width: 465px)" srcSet="https://www.w3schools.com/tags/img_white_flower.jpg"/> <Lazyimg className="lazy" src={"http://zhansingsong.github.io/lazyimg/22.4582fc71.jpg"} js_effect="transition.expandIn" /> </picture></pre> <p>直接上效果了 ?</p> <p><script type="text/javascript">showImg("https://segmentfault.com/img/remote/1460000013614827");</script></p> <b>后语</b> <p>这个插件是我由项目中提炼出的,个人用着还挺顺手,就拿出与大家分享分享。另外,毕竟个人能力有限,如果你发现插件有问题或有什么好的建议,也请告知一下,先这里谢过了 ?。最后欢迎star?、欢迎watch?、欢迎fork?</p> </div> <div class="mt-64 tags-seach" > <div class="tags-info"> <a style="width:120px;" title="GPU云服务器" href="https://www.ucloud.cn/site/product/gpu.html">GPU云服务器</a> <a style="width:120px;" title="云服务器" href="https://www.ucloud.cn/site/active/kuaijiesale.html?ytag=seo">云服务器</a> <a style="width:120px;" title="自己编写的小程序" href="https://www.ucloud.cn/yun/tag/zijibianxiedexiaochengxu/">自己编写的小程序</a> <a style="width:120px;" title="在js中怎样编写插件" href="https://www.ucloud.cn/yun/tag/zaijszhongzenyangbianxiechajian/">在js中怎样编写插件</a> <a style="width:120px;" title="自己编写web服务器" href="https://www.ucloud.cn/yun/tag/zijibianxiewebfuwuqi/">自己编写web服务器</a> <a style="width:120px;" title="自己编写云服务器抢红包" href="https://www.ucloud.cn/yun/tag/zijibianxieyunfuwuqiqianghongbao/">自己编写云服务器抢红包</a> </div> </div> <div class="entry-copyright mb-30"> <p class="mb-15"> 文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。</p> <p>转载请注明本文地址:https://www.ucloud.cn/yun/93278.html</p> </div> <ul class="pre-next-page"> <li class="ellipsis"><a class="hpf" href="https://www.ucloud.cn/yun/93277.html">上一篇:40行js实现一个简易Promise</a></li> <li class="ellipsis"><a class="hpf" href="https://www.ucloud.cn/yun/93279.html">下一篇:排序算法的Javascript实现</a></li> </ul> </div> <div class="about_topicone-mid"> <h3 class="top-com-title mb-0"><span data-id="0">相关文章</span></h3> <ul class="com_white-left-mid atricle-list-box"> <li> <div class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="https://www.ucloud.cn/yun/115778.html"><b><em>看完</em><em>你<em>也想</em></em><em>编写</em><em>自己</em><em>的</em> <em>react</em> <em>插件</em></b></a></h2> <p class="ellipsis2 good">摘要:清楚自己想要什么样的组件,就自己动手撸呗。咱们先来看看它的效果吧如果大家有时间,窝还是鼓励大家自己动手实现一些小插件。于是自己就琢磨能否继承使用方法同时保持特有组件特性。需要确保已安装。 副标题----为什么我要写这个 react 插件 图片懒加载是项目中常用的功能,然而现有 react 懒加载组件库,用着都不是很爽了 ?。概括一下有如下几点: 没有只针对 image 懒加载组件。多...</p> <div class="com_white-left-info"> <div class="com_white-left-infol"> <a href="https://www.ucloud.cn/yun/u-1530.html"><img src="https://www.ucloud.cn/yun/data/avatar/000/00/15/small_000001530.jpg" alt=""><span class="layui-hide64">Vixb</span></a> <time datetime="">2019-08-30 14:06</time> <span><i class="fa fa-commenting"></i>评论0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="https://www.ucloud.cn/yun/51949.html"><b><em>看完</em><em>你<em>也想</em></em><em>编写</em><em>自己</em><em>的</em> <em>react</em> <em>插件</em></b></a></h2> <p class="ellipsis2 good">摘要:清楚自己想要什么样的组件,就自己动手撸呗。咱们先来看看它的效果吧如果大家有时间,窝还是鼓励大家自己动手实现一些小插件。于是自己就琢磨能否继承使用方法同时保持特有组件特性。需要确保已安装。 副标题----为什么我要写这个 react 插件 图片懒加载是项目中常用的功能,然而现有 react 懒加载组件库,用着都不是很爽了 ?。概括一下有如下几点: 没有只针对 image 懒加载组件。多...</p> <div class="com_white-left-info"> <div class="com_white-left-infol"> <a href="https://www.ucloud.cn/yun/u-506.html"><img src="https://www.ucloud.cn/yun/data/avatar/000/00/05/small_000000506.jpg" alt=""><span class="layui-hide64">xingpingz</span></a> <time datetime="">2019-08-01 18:40</time> <span><i class="fa fa-commenting"></i>评论0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="https://www.ucloud.cn/yun/124521.html"><b>没有基础或者基础差,如何快速学会编程?这6招绝对好使</b></a></h2> <p class="ellipsis2 good">摘要:第一点,先清楚你的目的你学编程想要做什么你对哪方面感兴趣然后去百度查一下哪些编程语言适合做那个方向,带着目的去学习,如果一开始没选好,中途掉头就很可惜了。 你是不是...</p> <div class="com_white-left-info"> <div class="com_white-left-infol"> <a href="https://www.ucloud.cn/yun/u-255.html"><img src="https://www.ucloud.cn/yun/data/avatar/000/00/02/small_000000255.jpg" alt=""><span class="layui-hide64">EasonTyler</span></a> <time datetime="">2021-11-23 09:51</time> <span><i class="fa fa-commenting"></i>评论0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="https://www.ucloud.cn/yun/84471.html"><b>前端周刊第64期:你真<em>的</em>会提问么?</b></a></h2> <p class="ellipsis2 good">摘要:但是究竟什么是区块链呢如何基于区块链构建去中心化的应用这个系列文章很有料,有图文解释有代码实例,非常适合入门。想知道我接下来会写些什么欢迎订阅我的掘金专栏或知乎专栏前端周刊让你在前端领域跟上时代的脚步。 showImg(https://segmentfault.com/img/remote/1460000010417511); 共 2044 字,读完需 4 分钟。本期以《提问的智慧》作...</p> <div class="com_white-left-info"> <div class="com_white-left-infol"> <a href="https://www.ucloud.cn/yun/u-649.html"><img src="https://www.ucloud.cn/yun/data/avatar/000/00/06/small_000000649.jpg" alt=""><span class="layui-hide64">wfc_666</span></a> <time datetime="">2019-08-20 18:25</time> <span><i class="fa fa-commenting"></i>评论0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="https://www.ucloud.cn/yun/54096.html"><b>879本IT技术书籍(都<em>看<em>完你</em></em>就可以升仙儿了)</b></a></h2> <p class="ellipsis2 good">摘要:珍藏版收集了好几年的书回过头来一看真不少拿过来跟你们一起分享下载链接我也会在官网上发布视频教程呀电影呀有用的资源你们懂得作者作者科技站长官网百度搜索科技博客公众号搜索 珍藏版---收集了好几年的书,回过头来一看,真不少,拿过来跟你们一起分享 showImg(https://img-blog.csdnimg.cn/20181123115931741.png?x-oss-process=i...</p> <div class="com_white-left-info"> <div class="com_white-left-infol"> <a href="https://www.ucloud.cn/yun/u-83.html"><img src="https://www.ucloud.cn/yun/data/avatar/000/00/00/small_000000083.jpg" alt=""><span class="layui-hide64">用户83</span></a> <time datetime="">2019-08-02 15:23</time> <span><i class="fa fa-commenting"></i>评论0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> </ul> </div> <div class="topicone-box-wangeditor"> <h3 class="top-com-title mb-64"><span>发表评论</span></h3> <div class="xcp-publish-main flex_box_zd"> <div class="unlogin-pinglun-box"> <a href="javascript:login()" class="grad">登陆后可评论</a> </div> </div> </div> <div class="site-box-content"> <div class="site-content-title"> <h3 class="top-com-title mb-64"><span>0条评论</span></h3> </div> <div class="pages"></ul></div> </div> </div> <div class="layui-col-md4 layui-col-lg3 com_white-right site-wrap-right"> <div class=""> <div class="com_layuiright-box user-msgbox"> <a href="https://www.ucloud.cn/yun/u-1484.html"><img src="https://www.ucloud.cn/yun/data/avatar/000/00/14/small_000001484.jpg" alt=""></a> <h3><a href="https://www.ucloud.cn/yun/u-1484.html" rel="nofollow">zhou_you</a></h3> <h6>男<span>|</span>高级讲师</h6> <div class="flex_box_zd user-msgbox-atten"> <a href="javascript:attentto_user(1484)" id="attenttouser_1484" class="grad follow-btn notfollow attention">我要关注</a> <a href="javascript:login()" title="发私信" >我要私信</a> </div> <div class="user-msgbox-list flex_box_zd"> <h3 class="hpf">TA的文章</h3> <a href="https://www.ucloud.cn/yun/ut-1484.html" class="box_hxjz">阅读更多</a> </div> <ul class="user-msgbox-ul"> <li><h3 class="ellipsis"><a href="https://www.ucloud.cn/yun/122951.html">搬瓦工双11优惠码,全场VPS8.9折促销,美国CN2 GIA VPS 低至$44/季</a></h3> <p>阅读 3206<span>·</span>2021-11-11 11:00</p></li> <li><h3 class="ellipsis"><a href="https://www.ucloud.cn/yun/111619.html">进一步理解:inline-block,vertical-align,line-height</a></h3> <p>阅读 2552<span>·</span>2019-08-29 11:23</p></li> <li><h3 class="ellipsis"><a href="https://www.ucloud.cn/yun/111342.html">巧用SASS之如何遍历n个子元素并为其设置属性</a></h3> <p>阅读 1370<span>·</span>2019-08-29 10:58</p></li> <li><h3 class="ellipsis"><a href="https://www.ucloud.cn/yun/111339.html">CSS:em 和 strong 的区别</a></h3> <p>阅读 2299<span>·</span>2019-08-29 10:58</p></li> <li><h3 class="ellipsis"><a href="https://www.ucloud.cn/yun/105230.html">JavaScript 设计模式(五):迭代器模式</a></h3> <p>阅读 2892<span>·</span>2019-08-23 18:26</p></li> <li><h3 class="ellipsis"><a href="https://www.ucloud.cn/yun/104998.html">JS进阶篇1---函数节流(throttle)</a></h3> <p>阅读 2483<span>·</span>2019-08-23 18:18</p></li> <li><h3 class="ellipsis"><a href="https://www.ucloud.cn/yun/103456.html">LeetCode 之 JavaScript 解答第23题 —— 合并K个有序链表(Merge K S</a></h3> <p>阅读 2015<span>·</span>2019-08-23 16:53</p></li> <li><h3 class="ellipsis"><a href="https://www.ucloud.cn/yun/99291.html">九宫格抽奖--手撸代码</a></h3> <p>阅读 3369<span>·</span>2019-08-23 13:13</p></li> </ul> </div> <!-- 文章详情右侧广告--> <div class="com_layuiright-box"> <h6 class="top-com-title"><span>最新活动</span></h6> <div class="com_adbox"> <div class="layui-carousel" id="right-item"> <div carousel-item> <div> <a href="https://www.ucloud.cn/site/active/kuaijiesale.html?ytag=seo" rel="nofollow"> <img src="https://www.ucloud.cn/yun/data/attach/240625/2rTjEHmi.png" alt="云服务器"> </a> </div> <div> <a href="https://www.ucloud.cn/site/product/gpu.html" rel="nofollow"> <img src="https://www.ucloud.cn/yun/data/attach/240807/7NjZjdrd.png" alt="GPU云服务器"> </a> </div> </div> </div> </div> <!-- banner结束 --> <div class="adhtml"> </div> <script> $(function(){ $.ajax({ type: "GET", url:"https://www.ucloud.cn/yun/ad/getad/1.html", cache: false, success: function(text){ $(".adhtml").html(text); } }); }) </script> </div> </div> </div> </div> </div> </section> <!-- wap拉出按钮 --> <div class="site-tree-mobile layui-hide"> <i class="layui-icon layui-icon-spread-left"></i> </div> <!-- wap遮罩层 --> <div class="site-mobile-shade"></div> <!--付费阅读 --> <div id="payread"> <div class="layui-form-item">阅读需要支付1元查看</div> <div class="layui-form-item"><button class="btn-right">支付并查看</button></div> </div> <script> var prei=0; $(".site-seo-depict pre").each(function(){ var html=$(this).html().replace("<code>","").replace("</code>","").replace('<code class="javascript hljs" codemark="1">',''); $(this).attr('data-clipboard-text',html).attr("id","pre"+prei); $(this).html("").append("<code>"+html+"</code>"); prei++; }) $(".site-seo-depict img").each(function(){ if($(this).attr("src").indexOf('data:image/svg+xml')!= -1){ $(this).remove(); } }) $("LINK[href*='style-49037e4d27.css']").remove(); $("LINK[href*='markdown_views-d7a94ec6ab.css']").remove(); layui.use(['jquery', 'layer','code'], function(){ $("pre").attr("class","layui-code"); $("pre").attr("lay-title",""); $("pre").attr("lay-skin",""); layui.code(); $(".layui-code-h3 a").attr("class","copycode").html("复制代码 ").attr("onclick","copycode(this)"); }); function copycode(target){ var id=$(target).parent().parent().attr("id"); var clipboard = new ClipboardJS("#"+id); clipboard.on('success', function(e) { e.clearSelection(); alert("复制成功") }); clipboard.on('error', function(e) { alert("复制失败") }); } //$(".site-seo-depict").html($(".site-seo-depict").html().slice(0, -5)); </script> <link rel="stylesheet" type="text/css" href="https://www.ucloud.cn/yun/static/js/neweditor/code/styles/tomorrow-night-eighties.css"> <script src="https://www.ucloud.cn/yun/static/js/neweditor/code/highlight.pack.js" type="text/javascript"></script> <script src="https://www.ucloud.cn/yun/static/js/clipboard.js"></script> <script>hljs.initHighlightingOnLoad();</script> <script> function setcode(){ var _html=''; document.querySelectorAll('pre code').forEach((block) => { var _tmptext=$.trim($(block).text()); if(_tmptext!=''){ _html=_html+_tmptext; console.log(_html); } }); } </script> <script> function payread(){ layer.open({ type: 1, title:"付费阅读", shadeClose: true, content: $('#payread') }); } // 举报 function jupao_tip(){ layer.open({ type: 1, title:false, shadeClose: true, content: $('#jubao') }); } $(".getcommentlist").click(function(){ var _id=$(this).attr("dataid"); var _tid=$(this).attr("datatid"); $("#articlecommentlist"+_id).toggleClass("hide"); var flag=$("#articlecommentlist"+_id).attr("dataflag"); if(flag==1){ flag=0; }else{ flag=1; //加载评论 loadarticlecommentlist(_id,_tid); } $("#articlecommentlist"+_id).attr("dataflag",flag); }) $(".add-comment-btn").click(function(){ var _id=$(this).attr("dataid"); $(".formcomment"+_id).toggleClass("hide"); }) $(".btn-sendartcomment").click(function(){ var _aid=$(this).attr("dataid"); var _tid=$(this).attr("datatid"); var _content=$.trim($(".commenttext"+_aid).val()); if(_content==''){ alert("评论内容不能为空"); return false; } var touid=$("#btnsendcomment"+_aid).attr("touid"); if(touid==null){ touid=0; } addarticlecomment(_tid,_aid,_content,touid); }) $(".button_agree").click(function(){ var supportobj = $(this); var tid = $(this).attr("id"); $.ajax({ type: "GET", url:"https://www.ucloud.cn/yun/index.php?topic/ajaxhassupport/" + tid, cache: false, success: function(hassupport){ if (hassupport != '1'){ $.ajax({ type: "GET", cache:false, url: "https://www.ucloud.cn/yun/index.php?topic/ajaxaddsupport/" + tid, success: function(comments) { supportobj.find("span").html(comments+"人赞"); } }); }else{ alert("您已经赞过"); } } }); }); function attenquestion(_tid,_rs){ $.ajax({ //提交数据的类型 POST GET type:"POST", //提交的网址 url:"https://www.ucloud.cn/yun/favorite/topicadd.html", //提交的数据 data:{tid:_tid,rs:_rs}, //返回数据的格式 datatype: "json",//"xml", "html", "script", "json", "jsonp", "text". //在请求之前调用的函数 beforeSend:function(){}, //成功返回之后调用的函数 success:function(data){ var data=eval("("+data+")"); console.log(data) if(data.code==2000){ layer.msg(data.msg,function(){ if(data.rs==1){ //取消收藏 $(".layui-layer-tips").attr("data-tips","收藏文章"); $(".layui-layer-tips").html('<i class="fa fa-heart-o"></i>'); } if(data.rs==0){ //收藏成功 $(".layui-layer-tips").attr("data-tips","已收藏文章"); $(".layui-layer-tips").html('<i class="fa fa-heart"></i>') } }) }else{ layer.msg(data.msg) } } , //调用执行后调用的函数 complete: function(XMLHttpRequest, textStatus){ postadopt=true; }, //调用出错执行的函数 error: function(){ //请求出错处理 postadopt=false; } }); } </script> <footer> <div class="layui-container"> <div class="flex_box_zd"> <div class="left-footer"> <h6><a href="https://www.ucloud.cn/"><img src="https://www.ucloud.cn/yun/static/theme/ukd//images/logo.png" alt="UCloud (优刻得科技股份有限公司)"></a></h6> <p>UCloud (优刻得科技股份有限公司)是中立、安全的云计算服务平台,坚持中立,不涉足客户业务领域。公司自主研发IaaS、PaaS、大数据流通平台、AI服务平台等一系列云计算产品,并深入了解互联网、传统企业在不同场景下的业务需求,提供公有云、混合云、私有云、专有云在内的综合性行业解决方案。</p> </div> <div class="right-footer layui-hidemd"> <ul class="flex_box_zd"> <li> <h6>UCloud与云服务</h6> <p><a href="https://www.ucloud.cn/site/about/intro/">公司介绍</a></p> <p><a href="https://zhaopin.ucloud.cn/" >加入我们</a></p> <p><a href="https://www.ucloud.cn/site/ucan/onlineclass/">UCan线上公开课</a></p> <p><a href="https://www.ucloud.cn/site/solutions.html" >行业解决方案</a></p> <p><a href="https://www.ucloud.cn/site/pro-notice/">产品动态</a></p> </li> <li> <h6>友情链接</h6> <p><a href="https://www.compshare.cn/?ytag=seo">GPU算力平台</a></p> <p><a href="https://www.ucloudstack.com/?ytag=seo">UCloud私有云</a></p> <p><a href="https://www.surfercloud.com/">SurferCloud</a></p> <p><a href="https://www.uwin-link.com/">工厂仿真软件</a></p> <p><a href="https://pinex.it/">Pinex</a></p> <p><a href="https://www.picpik.ai/zh">AI绘画</a></p> </li> <li> <h6>社区栏目</h6> <p><a href="https://www.ucloud.cn/yun/column/index.html">专栏文章</a></p> <p><a href="https://www.ucloud.cn/yun/udata/">专题地图</a></p> </li> <li> <h6>常见问题</h6> <p><a href="https://www.ucloud.cn/site/ucsafe/notice.html" >安全中心</a></p> <p><a href="https://www.ucloud.cn/site/about/news/recent/" >新闻动态</a></p> <p><a href="https://www.ucloud.cn/site/about/news/report/">媒体动态</a></p> <p><a href="https://www.ucloud.cn/site/cases.html">客户案例</a></p> <p><a href="https://www.ucloud.cn/site/notice/">公告</a></p> </li> <li> <span><img src="https://static.ucloud.cn/7a4b6983f4b94bcb97380adc5d073865.png" alt="优刻得"></span> <p>扫扫了解更多</p></div> </div> <div class="copyright">Copyright © 2012-2023 UCloud 优刻得科技股份有限公司<i>|</i><a rel="nofollow" href="http://beian.miit.gov.cn/">沪公网安备 31011002000058号</a><i>|</i><a rel="nofollow" href="http://beian.miit.gov.cn/"></a> 沪ICP备12020087号-3</a><i>|</i> <script type="text/javascript" src="https://gyfk12.kuaishang.cn/bs/ks.j?cI=197688&fI=125915" charset="utf-8"></script> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?290c2650b305fc9fff0dbdcafe48b59d"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-DZSMXQ3P9N"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-DZSMXQ3P9N'); </script> <script> (function(){ var el = document.createElement("script"); el.src = "https://lf1-cdn-tos.bytegoofy.com/goofy/ttzz/push.js?99f50ea166557aed914eb4a66a7a70a4709cbb98a54ecb576877d99556fb4bfc3d72cd14f8a76432df3935ab77ec54f830517b3cb210f7fd334f50ccb772134a"; el.id = "ttzz"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(el, s); })(window) </script></div> </div> </footer> </body> <script src="https://www.ucloud.cn/yun/static/theme/ukd/js/common.js"></script> <<script type="text/javascript"> $(".site-seo-depict *,.site-content-answer-body *,.site-body-depict *").css("max-width","100%"); </script> </html>