javascript拖放页面构建器

Posted

技术标签:

【中文标题】javascript拖放页面构建器【英文标题】:javascript drag and drop page builder 【发布时间】:2016-05-04 22:46:01 【问题描述】:

我正在构建一个 A4 大小的拖放页面构建器。 此构建器可以包含的元素是图像和文本框。

我正在寻求一些关于哪些框架可用于构建此类前端功能的建议。

我所追求的示例,请参阅此处canva.com

目前我尝试的两个框架是fabric jsgreensock draggable,它们不能满足我的需求,或者很难创建一个完整的页面构建器。

理想情况下,我不想为此使用画布。

编辑: 基本功能:

裁剪 旋转 调整大小 更改文本框的字体样式/颜色/大小 添加背景 框架/遮罩图像(方形图像可以变成带有叠加层的星形)

【问题讨论】:

您可以使用 html5 拖放 api 编写自己的模块。通常,像这样的解决方案是定制的,以满足最终用户设定的规范。如果你想在 *** 上找到一个可能的解决方案,你可以开始赏金。 @malinkody 感谢您的评论,是的,我回去查看 jquery ui,我可能只使用 jquery 编写代码并将每个页面元素存储在 json 对象数组中。仍处于早期阶段。 我有很大的兴趣,因为我的公司开始重新设计他们的 PDF 模板界面之一。如果你能更准确地定义你的需求,我可以在下周末开始一个基本的实现。例如,您只需要图像和文本框吗?他们是否应该进行旋转、调整大小、缩放等?边界框应该是什么样的? (比如在fabric js中?)你想如何导出信息?导出的模板是否需要符合标准?它应该支持图层吗? (例如在图像处理器中,例如 PS) 感谢您提供的信息,我将尝试使用 HTML 5 拖放来实现这一点。我会在一两天内给你答复。 我猜答案和 cmets 表明,没有通常已知的框架可以做到这一点。在开始编码之前,您需要解决一些困难 - 也许您可以单独要求这些框架:打印 (A4) 屏幕分辨率 -> DPI 很重要; DOM 节点的数量决定了你的表现 -> DOM 节点只有你看到的;多页 VS 屏幕滚动——嗯,这只是一次短暂的头脑风暴——也许将其作为起点扩展是个好主意 【参考方案1】:

据我了解,您希望创建可配置的仪表板。 我建议使用表格结构Table merge and split,其中每个单元格都应该有一个可放置的组件,例如

<table id="mainTable">
                    <tbody>
                        <tr>
                            <td class="set-as-droppable"></td>
                            <td class="set-as-droppable"></td>
                            <td class="set-as-droppable"></td>
                            <td class="set-as-droppable"></td>
                        </tr>
                        <tr>
                            <td class="set-as-droppable"></td>
                            <td class="set-as-droppable"></td>
                            <td class="set-as-droppable"></td>
                            <td class="set-as-droppable"></td>
                        </tr>
                    </tbody>
                </table>

喜欢

然后在 drop 上编写你自己的逻辑

$( ".set-as-droppable" ).droppable(
        accept: "div.Dragable",
        drop: function( event, ui ) 


); 

可拖动组件可以是 TEXT 或 IMAGE,拖放后可以进行任何操作

【讨论】:

【参考方案2】:

你的大部分目标都可以通过css 2/3 + 一些纯js来实现

剪辑/遮罩

http://www.html5rocks.com/en/tutorials/masking/adobe/

重新调整大小,更改文本框的字体样式/颜色/大小,添加背景

纯js/css2

旋转

css3 变换属性http://www.w3schools.com/cs-s-ref/css3_pr_transform.asp

拖动

可以很容易做到,使用纯js或者你可以尝试一些开源插件,或者像jquery draggable之类的东西。

至于您当前的列表,我实际上并没有看到,为什么您需要一些框架来解决这个问题,而其中大部分都可以通过纯 js/css 稍加努力/谷歌搜索来实现。

在我的拙见中,jquery 或类似的东西就是你真正需要的。只需在https://jqueryui.com/draggable/ 处查看 jquery 的“交互”部分,看看它是否可以帮助您构建构建器界面。每个交互都有各种示例(右侧栏)。

更新: 这是一些脏代码示例(使用 jquery UI)http://jsfiddle.net/tbpxnxrm/2/。双击#main 以创建其他元素。没有实施碰撞/重叠检查,来自http://jsfiddle.net/4Vfm5/1095/

drag_defaults = grid: [50,50], containment: "parent";
resize_defaults = 
    aspectRatio: true,
    handles: 'ne, se, sw, nw',
    grid: [50,50],
    minHeight: 50,
    minWidth: 50


$('.draggable').draggable(drag_defaults);
$('.resizable').resizable(resize_defaults);

UPD2:几年后,我的示例在 jsfiddle 上完全停止工作。无法确定原因,但主要答案仍然可信。

【讨论】:

【参考方案3】:

我尝试在空闲时间实现这一点,但这不是在几个小时后使用纯 js 从头开始​​就能完成的。到目前为止,我有一个 jQuery 插件原型,用于将新的 dom 元素放入页面区域。我也一直在尝试使页面中的任何块组件可调整大小。在我投入的几个小时内,我取得了一些成功。

可调整大小的块组件:(编辑:拖动两侧中间的 4 个小手柄)

Fiddle

带有菜单和可放置区域的页面构建器原型(只能放置文本项):

Fiddle

每当我开始工作时,我都会不断更新小提琴,但我不会很快完成插件。

Too much code to put here! Visit the fiddle

【讨论】:

【参考方案4】:

有一个有用的 jquery 旋转插件.. 你的代码:

<div id="product">

<img src="images/01.jpg" />

<img src="images/02.jpg" />

<img src="images/03.jpg" />

<img src="images/04.jpg" />

<img src="images/05.jpg" />

</div>
<script type="text/javascript">

jQuery(document).ready(function() 

    jQuery('#product').j360();

);

</script>

这应该可行。

【讨论】:

【参考方案5】:

如果你的目标是尽可能简单,我认为你不能只使用一个框架来做到这一点。

如果我理解得很好,您想要做的是让您的应用用户直接在浏览器中进行某种高级“绘图”。

首先:没有画布元素,他们的作品将不得不在服务器端导出/生成。

现在,最好的方法是创建一个表示每个文档及其内容的 javascript 对象,其中包含模型以及描述的位置、旋转等每个属性。并且这个对象应该被渲染使css属性和html元素对应于对象结构。也就是说 AngularJS 将是我的首选,因为它几乎会自动监视您的模型,并在您修改对象后立即实时渲染目标元素。 (Angular 2 更好,但只记录在 TypeScript 和 Dart 中)

从这里开始,使用 html5 和 css3,可以使用一个不错的属性来操作元素:transform。它采用“translateX(10px)”或“rotateZ(10deg)”之类的值。 要了解更多信息:http://www.w3schools.com/cs-s-ref/css3_pr_transform.asp。

另外,对于拖放的东西:http://www.w3schools.com/html/html5_draganddrop.asp.

要裁剪图像,您应该使用服务器端代码。 (以 php 为例:http://php.net/manual/fr/function.imagecrop.php)

要在图像上使用蒙版,还有一些 css3 属性可以很好地工作: http://www.w3schools.com/cs-s-ref/pr_pos_clip.asp

对于您的应用程序和服务器之间的通信,请使用 jQuery 函数: http://api.jquery.com/category/ajax/.

最后,从 css3 中选择你想要的:http://www.w3schools.com/css/css3_intro.asp。 http://www.w3schools.com/css/css3_images.asp

希望对你有所帮助。祝你好运!

更新:我发现剪辑 css 属性已过时,现在它是剪辑路径,但它的工作方式大致相同。

更新 2:实际上,可以通过 mask css 属性:https://developer.mozilla.org/en-US/docs/Web/CSS/mask 制作遮罩(带有图像而不是路径)。但请注意,它仍然部分支持http://caniuse.com/#search=mask。

【讨论】:

Alice,您知道屏幕pdf 转换框架或至少相关的规则集吗? - 我知道这些是可用于 flashpdf 的服务器端框架。但是,我仍在为如何在客户端进行管理而苦苦挣扎。 (即使我不是最初的请求者,我想她或他也会从该信息中获利) 嗯,我正在做你的研究工作,因为很容易找到 ***.com/questions/19786113/…,正如你在代码中看到的那样,他正在使用 jsPDF:parall.ax/products/jspdf

以上是关于javascript拖放页面构建器的主要内容,如果未能解决你的问题,请参考以下文章

将文件选择器数据存储在隐藏的输入中

JavaScript 学习-50.实现页面菜单拖放(Drag 和 Drop)

javascript facetwp为海狸构建器修改了“如何为页面保留方面选择”代码

javascript到底可以干啥的?它的作用是啥?

javascript 在移动构建器中删除页面bg图像(页面bg不是为了在不重新生成移动设备的情况下更新而构建的)。详细信息:https://instapage.atlassian。

javascript 在移动构建器中删除页面bg图像(页面bg不是为了在不重新生成移动设备的情况下更新而构建的)。详细信息:https://instapage.atlassian。