整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

html5 工业web组态-开发自定义的组件 (炫酷按钮)

为了方便用户更好使用web组态,最近提供了用户自定义组件的功能。在实施项目中就可以使用自己的组件了!



首先我们登陆系统就会看到新增的组件管理选项 如下图:


点击添加组件选择2D组件我们就可以建立一个自己的组件了


《组件设计器》由 基础设置(包括名称 code 类型 状态 icon 次序号 )HTML编辑区域 CSS编辑区域 JS编辑区域预览区域组成。

首先我们给组件 起一个‘名字’ 和 ‘code’,在url输入框中可以给组件设置一个icon。点击保存系统会为我们建立一个组件模板。

由于web组态是由vue开发的所以开发组件也需要vue的的基础知识。建议去看下vue的教程及生命周期,以方便开发组件。以下我附上vue生命周期图及组件代码。

我们就开始设计一个炫酷的按钮作为例子

HTML代码如下:

<a href="#" class="btn123" :style="imrstyle" v-show="controlProp.commProp.visible">{{controlProp.textProp.text}}</a>

这里:

style="imrstyle":样式 在web组态设计器中呈现的样式

v-show="controlProp.commProp.visible":可见性 在web组态设计器中可实现显示或闪烁

{{controlProp.textProp.text}}:文本 对应组件的文本属性

更多属性请参考:http://krmes.com:8000/md/design/#%E7%BB%84%E4%BB%B6%E5%9F%BA%E7%A1%80%E5%B1%9E%E6%80%A7

CSS代码如下:

.btn123 {
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      box-sizing: border-box;
      z-index: 1;
    }
    
    .btn123:hover {
      animation: animate 8s linear infinite;
    }
    
    @keyframes animate {
      0% {
        background-position: 0%;
      }
      100% {
        background-position: 400%;
      }
    }
    
    .btn123::before {
      content: '';
      position: absolute;
      top: -5px;
      left: -5px;
      right: -5px;
      bottom: -5px;
      z-index: -9999;
      background: linear-gradient(90deg, #03a9f4, #f441a5, #ffeb3b, #03a9f4);
      background-size: 400%;
      border-radius: 40px;
      opacity: 0;
      transition: 0.5s;
    }
    
    .btn123:hover::before {
      filter: blur(20px);
      opacity: 1;
      animation: animate 8s linear infinite;
    }
    
    

JS代码如下:

export default {
  props: {
    controlProp: Object //作为web组态设计器的继承属性
  },
  data() {
    return {
    }
  },
  computed: {
    imrstyle: function () {  //imrstyle 作为web组态设计器的控制样式
      let maxWidth = this.controlProp.commProp.width
      let maxHeight = this.controlProp.commProp.height
      if (this.controlProp.textProp && this.controlProp.textProp.padding) {
        maxWidth = maxWidth - this.controlProp.textProp.padding * 2
        maxHeight = maxHeight - this.controlProp.textProp.padding * 2
      }
      return {
        // 'max-width': maxWidth+ 'px',
        // 'max-height': maxHeight+ 'px',
        width: '100%',
        height: '100%',
        'box-sizing': 'content-box',
        background: 'transparent',
        'color': this.controlProp.textProp ? this.controlProp.textProp.fontcolor : '',
        'font-size': this.controlProp.textProp ? this.controlProp.textProp.fontsize + 'px' : '',
        'text-align': this.controlProp.textProp ? this.controlProp.textProp.horizonalign : '',
        'line-height': maxHeight + 'px',
        'vertical-align': this.controlProp.textProp ? this.controlProp.textProp.verticalalign : '',
        'font-family': this.controlProp.textProp ? this.controlProp.textProp.fontfamily : '',
        'font-weight': this.controlProp.textProp ? (this.controlProp.textProp.fontweight ? 600 : 500) : '',
        'font-style': this.controlProp.textProp ? (this.controlProp.textProp.fontitalic ? 'italic' : 'normal') : ''
      }
    }
  },
  created() {
  },
  mounted() {
  },
  methods: {
    initImports() {
      return {

      }
    },
    initProp() {   //初始化状态 (基础属性 特殊属性 文本属性)
      return {
        commProp: { // 基础属性  
          width: 80,
          height: 30,
          borderwidth: 0,
          backgroundColor: 'linear-gradient(90deg, #03a9f4, #00FFFF)',
          borderradius:5
        },
        spProp:{ // 特殊属性
          },
        textProp: { // 文本属性
          text: 'Button',
          fontsize: 12,
          fontcolor: 'black',
          horizonalign: 'center',
          verticalalign: 'middle',
          padding: 0,
          margin: 0
        },
        spPropSetting: [ // 特殊属性 textinput/numberinput/switch/select/colorPicker/codeInput/dateInput/imgSelect/setup
        ]
      }
    }
  }
}

这里需要注意:

initProp():方法中实现对组件的 基础属性 文本属性 特殊属性的初始化配置

更多属性配置参考:http://krmes.com:8000/md/design/#%E7%BB%84%E4%BB%B6%E5%9F%BA%E7%A1%80%E5%B1%9E%E6%80%A7

点击保存这样我们设计的组件就显示出来了!是不是很简单。


这样在我们的web组态中就可以使用我们自定义的组件了![大笑][大笑][大笑]

猪脚本(原飞猪脚本)以按键精灵教学为主,涉及UiBot,Python,Lua等脚本编程语言,教学包括全自动办公脚本,游戏辅助脚本,引流脚本,网页脚本,安卓脚本,IOS脚本,注册脚本,点赞脚本,阅读脚本以及网赚脚本等各个领域。想学习按键精灵的朋友可以添加金猪脚本粉丝交流群:554127455 学习路上不再孤单,金猪脚本伴你一同成长

1.什么是网页元素特征字符串?

请参考网页特征字符串详解;

2.Html系列命令

2.1.HtmlSelect命令

1)HtmlSelect命令只能够根据Select项的值来进行选择,注意这里不是显示在Select项上的文字,而是该项的value。

一个典型的下拉框HTML代码如下:

<select name="city">

<option value="1">北京</option>

<option value="2">上海</option>

<option value="3">广州</option>

</select>

这里如果要选择上海,需要选择值为2的项;

2)级联的下拉列表组合。

在有的网页中,会有几个级联的下拉列表,后一个下拉框会随前一个框的值变化而发生变化,典型的有注册页面上的省份城市选择,HtmlSelect命令能够触发Onchange事件,会导致后一个下拉框值发生变化,但是如果执行脚本太快,而导致后一个未能选中正确的值,可以在前一个HtmlSelect后加上适当的延时;

3)多选表单中的列表控件;有的列表支持多选,在有一些个求职网站中,职业是可以多选的,这时候可以用%将多个需要选择的值连接起来传递给HtmlSelect命令实现多选;

2.2.HtmlExists命令

HtmlExists命令,能够判断指定特征的元素是否存在,并能够返回具备该特征的元素的个数。这个命令能够用来判断某个元素是否存在,如果为0证明不存在;

2.3.HtmlGet命令

HtmlGet命令比较复杂,但是功能也非常强大,该命令具备两个参数,第一个参数为获取类型,目前支持的值如下所示:

序号 值 适用对象

1 text 得到指定元素的文本值,对应DOM属性innerText

2 html 得到指定元素内部的HTML代码,对应DOM属性innerHTML

3 outerHtml 得到元素整体的HTML代码,对应DOM属性的outerHTML

4 value 得到元素的Value值,用于获取表单元素内部的值

5 src 得到图像元素的src属性,用于IMG标签对象

6 href 得到链接元素的链接地址,用于A标签

7 …其他名称 其他属性,如果您使用的是合法的属性名称,就能够返回对应的值。如何才是合法的属性?请参阅HTML标准。

第二个参数为特征字符串,如果匹配多个,只能返回第一个元素的值;

例如,获得淘宝货物价格:

Plugin price=Web.HtmlGet("text","id:id_Price")

获取某个表单文本的值

Plugin email=Web.HtmlGet("value","name:Email")

2.4.RunJS命令

RunJS命令提供了直接运行Javascript的功能,如果您对JS非常熟悉,就能够极大的扩展WQM的功能。

RunJS命令支持两中执行方式,第一个参数设置为0时,能够执行一段没有返回值的Javascript,

例如:

RunJS(0,"alert('hello');")

第一个参数设置为1时,能执行一段js并返回由return语句返回的值,返回值为字符串类型;

例如:返回Html文档的title;

RunJS(1,"var t=document.title;return t;")

如果您分析到网页中某个按钮实际上就是执行了一个函数,例如

<input type="Button" … />

您就可以直接调用

RunJS(0,"dosomething();")

JQuery的支持,网页按键精灵集成了Jquery1.3.2,为了不与其他JQ的库发生冲突,使用了wqmjq来代替$操作符,如果您需要直接使用JQ来操作网页,可使用wqmjq来执行Jquery语句:

RunJS(0,"wqmjq('#test').click();")

觉这个特效对大神们来说简直so so so so so easy!但我就是要要要要要要要要要发出来,分享给正在学习前端开发的朋友们,代码在下文直接复制走,而且不用说谢谢~嘿嘿。时不时发一点好玩的特效,喜欢的朋友点一下上面的关注哦。我只是小小的前端开发工程师而已,各位大佬别喷我,谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢啦。(你还别说,这支付宝体真挺好玩。)

别喷我,比起让你加群拿代码的那些教育机构的推广者,我连个广告都没打!

先上一个效果图(键盘控制的,效果有点鬼畜!)

按下键盘上的A 网页上的A就会动哦~

代码如下()

<!doctype html>

<html>

<head>

<meta charset="utf-8">

<title>网页键盘钢琴按键特效</title>

<style>

*{

margin:0;

padding:0;

list-style:none;

}

#box{

width:400px;

margin:300px auto 0;

}

ul{

margin-right:-20px;

}

li{

width:48px;

height:48px;

border:1px solid #666;

float:left;

margin-right:20px;

text-align:center;

line-height:48px;

background:#000;

color:#fff;

font-weight:bold;

position:relative;

}

li span{

display:block;

opacity:0.5;

filter:alpha(opacity:50);

}

li p{

width:100%;

height:0;

background:#03F;

position:absolute;

bottom:49px;

left:0;

}

.keyA{

background:#e51c55;

}

.keyS{

background:#c926a5;

}

.keyD{

background:#9c4bd5;

}

.keyJ{

background:#4f65c3;

}

.keyK{

background:#6ccab7;

}

.keyL{

background:#92d55d;

}

</style>

</head>

<body>

<div id="box">

<ul>

<li>

<span class="keyA">A</span>

<p class="keyA"></p>

</li>

<li>

<span class="keyS">S</span>

<p class="keyS"></p>

</li>

<li>

<span class="keyD">D</span>

<p class="keyD"></p>

</li>

<li>

<span class="keyJ">J</span>

<p class="keyJ"></p>

</li>

<li>

<span class="keyK">K</span>

<p class="keyK"></p>

</li>

<li>

<span class="keyL">L</span>

<p class="keyL"></p>

</li>

</ul>

</div>

<script>

window.onload = function(){

var aP = document.getElementsByTagName("p");

var aSpan = document.getElementsByTagName("span");

var aKeyCode = [65,83,68,74,75,76]; //定义键盘按键的键值 65表示大写A 具体键值请参照文章里的ascii表里的值

document.onkeydown = function(event){

var event = event || window.event;

for(var i=0; i<aKeyCode.length; i++){

if(event.keyCode == aKeyCode[i]){

startMove(aP[i],{height:240});

startMove(aSpan[i],{opacity:100})

}

}

}

document.onkeyup = function(event){

var event = event || window.event;

for(var i=0; i<aKeyCode.length; i++){

if(event.keyCode == aKeyCode[i]){

startMove(aP[i],{height:0});

startMove(aSpan[i],{opacity:50})

}

}

}

}

function startMove(obj, json, fnEnd){

clearInterval(obj.timer);

obj.timer=setInterval(function (){

var bSwitch=true;

for(var sAttribute in json){

var iTarget=json[sAttribute];

if(sAttribute=='opacity'){

var cur=Math.round(parseFloat(getStyle(obj, sAttribute))*100);

}else{

var cur=parseInt(getStyle(obj, sAttribute));

}

var speed=(iTarget-cur)/5;

speed=speed>0?Math.ceil(speed):Math.floor(speed);

if(sAttribute=='opacity'){

obj.style.filter='alpha(opacity:'+(cur+speed)+')'; //IE

obj.style.opacity=(cur+speed)/100; //ff chrome

}else{

obj.style[sAttribute]=cur+speed+'px';

}

if(cur!=iTarget){

bSwitch=false;

}

}

if(bSwitch){

clearInterval(obj.timer);

if(fnEnd){

fnEnd();

}

}

}, 30);

}

//获取飞行间样式

function getStyle(obj,sAuttribute){

var result = ""

if(window.getComputedStyle){

result = window.getComputedStyle(obj,false)[sAuttribute];

}else{

resule = obj.currentStyle[sAuttribute];

}

return result;

}

</script>

</body>

</html>

ASCII码表

如果哪句代码不理解,可以直接在下面留言,我看到了会一一解释哦。当然啦,你喷我我也会回你。

喜欢JS特效的朋友,记得关注我哦,不定期分享好玩好看的JS特效,前端路上,一起成长~