GithubHelp home page GithubHelp logo

tonytonyfly / jqbolt Goto Github PK

View Code? Open in Web Editor NEW

This project forked from zhenghecn/jqbolt

0.0 2.0 0.0 8.47 MB

License: MIT License

Batchfile 0.07% JavaScript 2.12% C 37.55% C++ 27.11% Lua 31.70% HTML 1.46%

jqbolt's Introduction

项目背景

JQBolt 是一款基于 迅雷Bolt界面引擎 的Lua框架,其设计借鉴了 Javascript 的 JQuery 框架 “Write Less,Do More”(写得更少,做得更多)的核心理念,在框架设计、API设计方面都参考了JQuery的**。

项目介绍

快速入门

引用简单,不对原有代码产生影响

在onload.lua文件中,引入其他Lua文件前加入一行代码即可引用JQBolt:

XLLoadModule(root.."/JQBolt.lua")

文档对象选择

目前支持以#ID开头的文档对象选择方式:

选择器 概述 示例
# 根据对象ID选择 jqbolt("#button", self)
> 选择子对象 jqbolt("#button > *",self)
空格 选择后代对象 jqbolt("#button *",self)
~ 选择兄弟对象 jqbolt("#button ~ *",self)
Bolt对象类名 根据类型匹配对象 jqbolt("#button > LayoutObject",self)
* 匹配所有类型对象 jqbolt("#button > *",self)
:even 匹配所有索引值为偶数的元素 jqbolt("#button ~ LayoutObject:even",self)
:odd 匹配所有索引值为奇数的元素 jqbolt("#button ~ LayoutObject:odd",self)
:gt 匹配所有大于给定索引值的元素 jqbolt("#button ~ LayoutObject:gt(1)",self)
:lt 匹配所有小于给定索引值的元素 jqbolt("#button ~ LayoutObject:lt(5)",self)
:eq 匹配一个给定索引值的元素 jqbolt("#button ~ LayoutObject:eq(1)",self)
:hidden 匹配所有不可见元素 jqbolt("#button ~ LayoutObject:hidden",self)
:visible 匹配所有可见元素 jqbolt("#button ~ LayoutObject:visible",self)

链式调用

无返回值API都支持链式调用,使得编写的代码更加简单并且性能更好:

jqbolt("#button",self).eq(1).data("key","value").size();

支持对Bolt原生API的直接、混合调用:

jqbolt("#button > *", self).show().SetText(“hello”);
local left,top,right,bottom = jqbolt("#button > *", self).GetObjPos();

事件绑定的前后端分离

可以将所有Bolt界面XML资源中的事件绑定通过Lua代码方便实现,实现前后端分离,并且编写的代码结构性更强,支持LayoutObject的所有事件:

jqbolt("#button",self).ondragquery(function ( ... )
	do more
end);
JQBolt API Bolt API
onabsposchange OnAbsPosChange
onbind OnBind
onchar OnChar
oncontrolfocuschange OnControlFocusChange
oncontrolmouseenter OnControlMouseEnter
oncontrolmouseleave OnControlMouseLeave
oncontrolmousewheel OnControlMouseWheel
ondestroy OnDestroy
ondragenter OnDragEnter
ondragleave OnDragLeave
ondragover OnDragOver
ondragquery OnDragQuery
ondrop OnDrop
onenablechange OnEnableChange
onfocuschange OnFocusChange
onhittest OnHitTest
onhotkey OnHotKey
oninitcontrol OnInitControl
onkeydown OnKeyDown
onkeyup OnKeyUp
onlbuttondbclick OnLButtonDbClick
onlbuttondown OnLButtonDown
onlbuttonup OnLButtonUp
onmbuttondbclick OnMButtonDbClick
onmbuttondown OnMButtonDown
onmbuttonup OnMButtonUp
onmouseenter OnMouseEnter
onmousehover OnMouseHover
onmouseleave OnMouseLeave
onmousemove OnMouseMove
onmousewheel OnMouseWheel
onposchange OnPosChange
onrbuttondbclick OnRButtonDbClick
onrbuttondown OnRButtonDown
onrbuttonup OnRButtonUp
ontabbed OnTabbed
onvisiblechange OnVisibleChange

全局数据存取封装

再也不怕记不住XLGetGlobal、XLSetGlobal怎么拼写了,并且提供了语义更明确的删除操作:

jqbolt().data("key","value")	--set
jqbolt().data("key")			--get
jqbolt().removedata("key")		--remove

位置快捷设置

更快捷的对象位置设置,不必再自己计算对象的坐标,还支持相对位移操作:

jqbolt("#button",self).left(100);	--set
jqbolt("#button",self).left();		--get
jqbolt("#button",self).right();
jqbolt("#button",self).top();
jqbolt("#button",self).bottom();
jqbolt("#button",self).height();
jqbolt("#button",self).width();
jqbolt("#button",self).offset(10,-10);
jqbolt("#button",self).position(10,10,100,100);		--left,top,width,height

全部位置函数拥有对应的支持表达式的API:

jqbolt("#button",self).leftexp("father.width/2");	--set
jqbolt("#button",self).leftexp();					--get
jqbolt("#button",self).rightexp("width");
jqbolt("#button",self).topexp();
jqbolt("#button",self).bottomexp("father.height");
jqbolt("#button",self).heightexp("father.height/2");
jqbolt("#button",self).widthexp();
jqbolt("#button",self).positionexp();

如保持对象位置的动态性,应连续使用exp的位置函数,否则会破坏对象位置的动态性。

动画效果

封装原有的动画API,操作更简单

一行调用,实现全部动画
jqbolt("#icon", self).alphachange(700, 255, 0).poschange(700, 45, 100, 45+60, 100+60, 45-30, 100-30, 45+60+30, 100+60+30);
动画 API函数
位置移动 poschange( speed, startleft, starttop, startright, startbottom, endleft, endtop, endright, endbottom, func )
透明度改变 alphachange( speed, startalpha, endalpha, func )
角度动画 anglechange( speed, startrangeX, startrangeY, startrangeZ, endrangeX, endrangeY, endrangeZ, func )
mask动画 maskchange( speed, startX, startY, startWidth, startHeight, endX, endY, endWidth, endHeight, func )
序列动画 seqframechange( speed, objImage, strResID, func )
旋转动画 turnobjectchange( speed, objImage, func )

项目目标

  • 支持更强大的文档选择器
  • 支持更快捷的对象动态操作
  • 基于JQBolt,建立Bolt的基础控件集JQBolt EasyUI

交流

jqbolt's People

Contributors

kingsunc avatar yulongyz avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.