iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >怎样创建与框架无关的JavaScript插件
  • 237
分享到

怎样创建与框架无关的JavaScript插件

2024-04-02 19:04:59 237人浏览 安东尼
摘要

怎样创建与框架无关的javascript插件,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。JavaScript中的插件使我们能够扩展语言,

怎样创建与框架无关的javascript插件,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

JavaScript中的插件使我们能够扩展语言,以实现所需的某些强大(或不够强大)的功能。插件/库本质上是打包的代码,可以使我们免于一遍又一遍地编写相同的东西(功能)。

在JavaScript生态系统中,有数百个框架,这些框架中的每一个都为我们提供了一个创建插件的系统,以便为框架添加新的东西。

如果你看一下NPM注册表,几乎所有的JavaScript插件都是在那里发布的,你会看到有超过一百万个插件以简单库和框架的形式发布。

为每个框架创建插件的方式可能会有很大不同。例如,vue.js有自己的插件系统,这与你为React.js创建插件的方式不同。然而,这一切都归结为相同的JavaScript代码。

因此,使用普通JavaScript创建插件,让你有能力创建一个无论在哪个框架下都能使用。

“与框架无关的JavaScript插件是无需框架上下文即可工作的插件,您可以在任何框架(甚至没有框架)中使用插件”

构建库时要记住的事项

  • 您应该对插件有一个目标——这是插件要实现的关键

  • 您的插件应易于使用以达到预期用途

  • 您的插件应在很大程度上可定制

  • 您的插件应该有一个文档,指导将要使用该插件的开发人员

现在,让我们着眼于上述几点。

我们将创造什么

在本文中,我将向您展示如何创建与框架无关的插件。在本教程中,我们将创建一个旋转木马/幻灯片插件——该插件的目标。

这个插件会暴露一些方法,可以被插件的用户调用 .next() 和 .prev()

起步

让我们创建一个新的文件夹来存放我们的插件代码和任何其他必要的文件,我将把我的文件夹称为 TooSlidePlugin。

在这个文件夹中,在你喜欢的编辑器中创建一个新的JavaScript文件。这个文件将包含插件的代码,我把我的文件叫做 tooSlide.js。

有时,我什至想像在开始创建插件之前(从最终开发人员的角度)如何使用插件。

var slider = new ToolSidePlugin({   slideClass: ".singleSlide",   container: ".slideContainer",   nextButton: ".next",   previousButton: ".prev" })

上面的代码假定有一个名为 TooSlides 的构造函数,该构造函数接收具有某些属性的对象作为参数。对象的属性是  slidesClass、container、nextButton 和 previousButton,这些是我们希望用户能够自定义的属性。

我们将从将插件创建为单个构造函数开始,以便其本身具有名称空间。

function ToolSidePlugin() {    }

Options

由于我们的插件,TooSlides 需要一个选项参数,所以我们会定义一些默认的属性,这样如果我们的用户没有指定自己的属性,就会使用默认的属性。

function ToolSidePlugin(options) {   let defaultOptions = {     slideClass: ".singleSlide",     container: ".slideContainer",     nextButton: ".nextSlide",     previousButton: ".previousSlide"   }      options = { ...defaultOptions, ...options};      let _this = this;   let slides = [];   let currentSlideIdex = 0; }

我们创建了一个 defaultOptions 对象来保存一些属性,我们还使用JavaScript扩展操作符将传入的选项与默认选项合并。我们将 this  分配给另一个变量,因此我们仍然可以在内部函数中对其进行访问。

我们还创建了两个变量 slides,它将保存所有我们想要用作幻灯片的图片,以及  currentSlideIndex,它保存当前正在显示的幻灯片的索引

接下来,由于我们的幻灯片需要有一些控制,可以用来向前和向后移动幻灯片,我们将在构造函数中添加下面的方法。

this.prepareControls = function() {   const nextButton = document.createElement("button");   const previousButton = document.createElement("button");      nextButton.setAttribute("class", "next");   nextButton.Innerhtml = "Next";      previousButton.setAttribute("class", "prev");   nextButton.InnerHTML = "Prev";      let controleContainer = document.createElement("div");      controleContainer.setAttribute("class", "too-slide-control-container");      controleContainer.appendChild(previousButton);   controleContainer.appendChild(nextButton);      document.querySelector(options.container).appendChild(controleContainer);      nextButton.addEventListener("click", function() {     _this.next();   });   previousButton.addEventListener("click", function() {     _this.previous();   }); }

在 .prepareControls() 方法中,我们创建了一个容器DOM元素来保存控件按钮,我们自己创建了下一个和上一个按钮,并将它们附加到  controlContainer。

然后我们给两个按钮附加事件监听器,分别调用 .next() 和 .previous() 方法。别担心,我们很快就会创建这些方法。

接下来,我们将添加两个方法:.GoToSlide()和 .hideOtherSlides()。

this.goToSlide = function(index) {   this.hideOtherSlides();   if(index > slides.length - 1) {     index = 0;   }   if(index < 0) {     index = slides.length - 1;   }   slides[index].style = "display:block";   currentSlideIndex = index; }  this.hideOtherSlides = function() {   document.querySelectorAll(options.slidesClass).forEach((slide, index) => {     slides[index].style = "display: none"   }) }

.goToSlide() 方法采用参数  index,这是我们要显示的幻灯片的索引,此方法首先隐藏当前正在显示的任何幻灯片,然后仅显示我们要显示的幻灯片。

接下来,我们将添加 .next() 和 .previous() 辅助方法,分别帮助我们向前一步,或者向后一步(还记得我们之前附加的事件监听器吗?

this.next = function() {   this.goToSlide(currentSlideIndex + 1); } this.previous = function() {   this.goToSlide(currentSlideIndex - 1); }

这两个方法基本上调用 .goToSlide() 方法,并将 currentSlideIndex 移动 1。

现在,我们还将创建一个 .init() 方法,该方法将在实例化构造函数时帮助我们进行设置。

this.init = function() {   document.querySelectorAll(options.container).className += " too-slide-slider-container";   document.querySelectorAll(options.slidesClass).forEach((slide, index) => {     slides[index] = index;     slides[index].style = "display:none";     slides[index].className = " too-slide-single-slide too-slide-fade";   });      this.goToSlide(0);   this.prepareControls(); }

如您所见,.init() 方法获取所有幻灯片图像并将其存储在我们之前声明的 slides 数组中,并默认隐藏所有图像。

然后,它通过调用 .goToSlide(0) 方法显示幻灯片中的第一张图像,并且还通过调用 .prepareControls()  设置我们的控制按钮。

为了收尾我们的构造函数代码,我们将在构造函数中调用 .init() 方法,这样每当构造函数被初始化时,.init() 方法总是被调用。

最终代码如下所示:

function ToolSidePlugin(options) {   let defaultOptions = {     slidesClass: ".singleSlide",     container: ".slideContainer",     nextButton: ".nextSlide",     previousButton: ".previousSlide"   }      options = { ...defaultOptions, ...options};      let _this = this;   let slides = [];   let currentSlideIdex = 0;    this.init = function() {     document.querySelectorAll(options.container).className += " too-slide-slider-container";     document.querySelectorAll(options.slidesClass).forEach((slide, index) => {       slides[index] = index;       slides[index].style = "display:none";       slides[index].className = " too-slide-single-slide too-slide-fade";     });          this.goToSlide(0);     this.prepareControls();   }    this.prepareControls = function() {     const nextButton = document.createElement("button");     const previousButton = document.createElement("button");          nextButton.setAttribute("class", "next");     nextButton.InnerHTML = "Next";          previousButton.setAttribute("class", "prev");     nextButton.InnerHTML = "Prev";          let controleContainer = document.createElement("div");          controleContainer.setAttribute("class", "too-slide-control-container");          controleContainer.appendChild(previousButton);     controleContainer.appendChild(nextButton);          document.querySelector(options.container).appendChild(controleContainer);          nextButton.addEventListener("click", function() {       _this.next();     });     previousButton.addEventListener("click", function() {       _this.previous();     });   }    this.goToSlide = function(index) {     this.hideOtherSlides();     if(index > slides.length - 1) {       index = 0;     }     if(index < 0) {       index = slides.length - 1;     }     slides[index].style = "display:block";     currentSlideIndex = index;   }      this.hideOtherSlides = function() {     document.querySelectorAll(options.slidesClass).forEach((slide, index) => {       slides[index].style = "display: none"     })   }    this.next = function() {     this.goToSlide(currentSlideIndex + 1);   }   this.previous = function() {     this.goToSlide(currentSlideIndex - 1);   }    this.init(); }

添加CSS

在存放我们的插件项目的文件夹中,我们将添加一个CSS文件,其中包含我们的滑块的基本样式。我将把这个文件称为 tooSlide.css。

* {box-sizing: border-box}   body {font-family: Verdana, sans-serif; margin:0; padding: 30px;}  .too-slide-single-slide {   display: none;    max-height: 100%;   width: 100%;  }   .too-slide-single-slide img{   height: 100%;   width: 100%; } img {vertical-align: middle;}    .too-slide-slider-container {   width: 100%;   max-width: 100%;   position: relative;   margin: auto;   height: 400px; }  .prev, .next {   cursor: pointer;   position: absolute;   top: 50%;   width: auto;   padding: 10px;   margin-right: 15px;   margin-left: 15px;   margin-top: -22px;   color: white;   font-weight: bold;   font-size: 18px;   transition: 0.6s ease;   border-radius: 0 3px 3px 0;   user-select: none;   border-style: unset;   background-color: blue; }  .next {   right: 0;   border-radius: 3px 0 0 3px; }  .prev:hover, .next:hover {   background-color: rgba(0,0,0,0.8); }   .too-slide-fade {   -WEBkit-animation-name: too-slide-fade;   -webkit-animation-duration: 1.5s;   animation-name: too-slide-fade;   animation-duration: 1.5s; }   @-webkit-keyframes too-slide-fade {   from {opacity: .4}    to {opacity: 1} }   @keyframes too-slide-fade {   from {opacity: .4}    to {opacity: 1} }    @media only screen and (max-width: 300px) {   .prev, .next,.text {font-size: 11px} }

测试我们的插件

为了测试我们的插件,我们将创建一个HTML文件,我将其命名为  index.html。我们还将添加4张图片用作幻灯片,所有图片都与我们的插件JavaScript代码位于同一目录中。

我的HTML文件如下所示:

<!DOCTYPE html> <html lang="en"> <head>   <meta charset="UTF-8">   <meta name="viewport" content="width=device-width, initial-scale=1.0">   <title>测试幻灯片</title>   <link rel="stylesheet" href="tooSlide.css"> </head> <body>   <div class="contaoner">     <div class="slideContainer">       <div class="singleSlide"><img src="slide1.png" alt="slide1" class="slideImage"></div>       <div class="singleSlide"><img src="slide2.png" alt="slide2" class="slideImage"></div>       <div class="singleSlide"><img src="slide3.png" alt="slide3" class="slideImage"></div>       <div class="singleSlide"><img src="slide4.png" alt="slide4" class="slideImage"></div>     </div>   </div>    <script src="tooSlide.js"></script>   <script>     var slider = new ToolSidePlugin({       slideClass: ".singleSlide",       container: ".slideContainer",       nextButton: ".next",       previousButton: ".prev"     })   </script> </body> </html>

在HTML文件的头部分,我调用了 tooSlide.css 文件,而在文件的末尾,我调用了 tooSlide.js 文件。

完成此操作后,我们将能够实例化我们的插件构造函数:

var slider = new ToolSidePlugin({   slideClass: ".singleSlide",   container: ".slideContainer",   nextButton: ".next",   previousButton: ".prev" })

最后的效果:

怎样创建与框架无关的JavaScript插件

为您的JavaScript项目编写文档

文档是你教人们如何使用你的插件。因此,它需要你花一些心思。

对于我们新创建的插件,我将从在项目目录中创建README.md文件开始。

怎样创建与框架无关的JavaScript插件

发布你的插件

在编写了您的插件之后,您很可能希望其他开发人员从您的新创建中受益,因此我将向您展示如何做到这一点。

你可以通过两种方式让你的插件对其他人可用:

  • GitHub上托管它,当您这样做时,任何人都可以下载仓库,包括文件(.js和.css),并立即使用您的插件。

  • 发布在npm上,请查看官方的npm文档来指导您。

关于怎样创建与框架无关的JavaScript插件问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网VUE频道了解更多相关知识。

--结束END--

本文标题: 怎样创建与框架无关的JavaScript插件

本文链接: https://www.lsjlt.com/news/82315.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎样创建与框架无关的JavaScript插件
    怎样创建与框架无关的JavaScript插件,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。JavaScript中的插件使我们能够扩展语言,...
    99+
    2024-04-02
  • JavaScript插件化框架MinimaJS的示例分析
    这篇文章将为大家详细讲解有关JavaScript插件化框架MinimaJS的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。JavaScript编写的插件化框架——...
    99+
    2024-04-02
  • 可用于创建桌面应用程序的优秀JavaScript框架是怎么样的
    这篇文章给大家介绍可用于创建桌面应用程序的优秀JavaScript框架是怎么样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。以前,使用JavaScript开发桌面应用程序是不可能的。...
    99+
    2024-04-02
  • JavaScript框架的趋势和前景是怎样的
    这期内容当中小编将会给大家带来有关JavaScript框架的趋势和前景是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。每年,科技行业都在快速发展。基于受欢迎程度及其...
    99+
    2024-04-02
  • Eclipse怎么创建一个简单的插件
    要创建一个简单的插件,您可以按照以下步骤操作: 打开Eclipse IDE,点击菜单栏中的File -> New ->...
    99+
    2024-04-03
    Eclipse
  • Java Spring框架创建项目与Bean的存储与读取详解
    目录1.Spring项目的创建1.1创建Maven项目1.2添加spring依赖1.3创建启动类1.4配置国内源2.储存或读取Bean对象2.1添加spring配置文件2.2创建Be...
    99+
    2024-04-02
  • HTML 框架与 JavaScript:解锁动态网页的无限可能
    ...
    99+
    2024-04-02
  • Kubernetes存储架构及插件使用是怎样的
    Kubernetes存储架构及插件使用是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、Kubernetes 存储体系架构引例: 在 Kubernetes 中挂载一个 ...
    99+
    2023-06-04
  • 如何在ASP框架中创建高效的关键字驱动数组?
    在ASP框架中,关键字驱动数组是一种非常高效的数据结构。它可以帮助我们快速地存储和查找大量的数据,并且还可以通过关键字来进行快速的检索。在本文中,我们将会详细介绍如何在ASP框架中创建高效的关键字驱动数组,并且提供一些演示代码供读者参考。 ...
    99+
    2023-08-30
    关键字 框架 数组
  • C++技术中的调试:插件和扩展的创建与使用
    c++++调试中的插件和扩展可增强调试功能。插件使用visual studio创建(例如:自定义异常消息显示),而扩展通常用c#/python创建,可扩展调试器本身的功能(例如:在vis...
    99+
    2024-05-08
    调试 c++ python c#
  • Win 7创建库提示错误16389,无法新建文件该怎样修复
    Windows 7的“库” “库”是Windows 7管理文件的一个新功能,它可以将您的资料汇集在一个位置以方便查找和使用。通常,系统会提供文档库、音乐库、图片库和视频库这...
    99+
    2023-05-25
    创建库 新建文件 文件
  • 前端开发中构建Web应用程序的前10个JavaScript框架是怎样的
    今天就跟大家聊聊有关前端开发中构建Web应用程序的前10个JavaScript框架是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。多年来,业界...
    99+
    2024-04-02
  • 5个开发桌面应用程序的JavaScript框架是怎样的
    5个开发桌面应用程序的JavaScript框架是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。很久以前,开发客户端桌面程...
    99+
    2024-04-02
  • JavaScript Web Components 与其他组件框架的对比:优劣势分析
    JavaScript Web Components 是由 Google 和其他浏览器厂商共同开发的 Web 标准,它提供了一套标准的 API 和标签来创建可重用的组件。这些组件可以在不同的 Web 应用程序和网站中复用,这可以极大地提高...
    99+
    2024-02-03
    JavaScript Web Components 组件框架 优劣势 分析 比较
  • Win7系统怎么创建无法删除的文件夹?
    我们在电脑中正常创建新文件夹是直接可以删除的,但是如果想要创建一个无法删除的文件夹的话,则需要通过CMD命令创建。那么如何创建无法删除的文件夹?下面小编分享一下Win7系统下创建无法删除的文件夹,具体操作方法如下。 Wi...
    99+
    2023-05-19
    Win7系统 无法删除 文件夹
  • 如何使用Python打包文件框架创建一个独立的应用程序?
    好的,以下是文章内容: Python是一种流行的编程语言,它具有强大的库和框架,可以用于各种应用程序的开发。Python的一个强大特性是它可以使用打包文件框架来创建独立的应用程序,这样用户就可以轻松地运行程序,而不必安装Python或其他依...
    99+
    2023-06-22
    打包 文件 框架
  • Golang怎么实现文件夹的创建与删除
    本文小编为大家详细介绍“Golang怎么实现文件夹的创建与删除”,内容详细,步骤清晰,细节处理妥当,希望这篇“Golang怎么实现文件夹的创建与删除”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。创建文件夹创建文件...
    99+
    2023-06-30
  • Qt+OpenCV联合开发中图像的创建与赋值是怎样的
    这篇文章主要为大家分析了Qt+OpenCV联合开发中图像的创建与赋值是怎样的的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Qt+OpenCV联合开发中图像的...
    99+
    2023-06-29
  • Actor-ES框架中的消息发布器与消息存储器是怎样的
    这篇文章给大家介绍Actor-ES框架中的消息发布器与消息存储器是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。消息发布器:Ray是基于Event Sourcing设计的ES/Actor框架,ESGrain状态(...
    99+
    2023-06-19
  • 怎样使用Nodejs创建访问日志记录的中间件
    怎样使用Nodejs创建访问日志记录的中间件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。中间件-访问日志目标利用中间件技术,写一个用来记录访...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作