我有一个HTML页面.在那个页面中,我正在尝试添加一个WYSIWYG编辑器.我决定用这个.我在我的应用程序中工作.但是,我似乎无法按照我想要的方式进行设计.我相信问题是因为我正在使用这个主题.我真的希望能够toolbar floating在文本框标签的右侧有上面的控件.与此同时,我想保持纸张外观而不是笨重的盒子.
在这一点上,我已经尝试过这个小提琴.造型完全错了.主要代码如下:
<div class="container">
<div class="form-group label-static is-empty">
<div class="row">
<div class="col-xs-3"><label class="control-label" for="Description">Description</label> </div>
<div class="col-xs-9">
<div id="toolbar" class="pull-right" style="vertical-align:top; margin-top:0; padding-top:0;">[toolbar]</div>
</div>
</div>
<input class="form-control" rows="3" id="Description" name="Description" onfocus="setMode('rich');" onblur="setMode(null);"></div>
</div>
Run Code Online (Sandbox Code Playgroud)
我正在使用以下JavaScript:
$(function () {
$.material.init();
});
function setMode(name) {
if (name === 'rich') {
$('#Description').summernote({ focus: true });
} else {
$('#Description').summernote('destroy');
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏.这真令人沮丧.
编辑:
V2:
我创建了另一个版本,当summernote存在时,标签会改变颜色,就像在材料设计中一样.我还添加了一些动画来跟进材质运动.
代码SNIPPET V2:
$(document).ready(function() {
$(function() {
$.material.init();
});
var mySummernote = $("#Description"),
labelStatic = $(".label-static");
mySummernote
.on("click", function() {
setTimeout(function() {
mySummernote.summernote({
focus: true
});
$('.note-toolbar.panel-heading').appendTo('#toolbar');
labelStatic.addClass("is-focused");
}, 250);
});
$(document).mouseup(function(el) {
var summernoteContainer = $("#summernote-container");
if (!summernoteContainer.is(el.target) && summernoteContainer.has(el.target).length === 0) {
mySummernote.summernote("destroy");
$('.note-toolbar.panel-heading').remove();
labelStatic.removeClass("is-focused");
}
});
});Run Code Online (Sandbox Code Playgroud)
.mytoolbar {
position: relative;
top: -30px;
z-index: 9;
}
@-webkit-keyframes fadeInDown {
0% {
opacity: 0;
-webkit-transform: translate3d(0, -100%, 0);
transform: translate3d(0, -100%, 0)
}
100% {
opacity: 1;
-webkit-transform: none;
transform: none
}
}
@keyframes fadeInDown {
0% {
opacity: 0;
-webkit-transform: translate3d(0, -100%, 0);
transform: translate3d(0, -100%, 0)
}
100% {
opacity: 1;
-webkit-transform: none;
transform: none
}
}
#summernote-container .note-editor.note-frame.panel.panel-default {
animation: fadeInDown .8s;
}
@-webkit-keyframes fadeIn {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes fadeIn {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
#summernote-container .note-toolbar.panel-heading {
opacity: 0;
animation: fadeIn .8s .8s both;
}Run Code Online (Sandbox Code Playgroud)
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-material-design/0.5.9/css/bootstrap-material-design.css" rel="stylesheet" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.1/summernote.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-material-design/0.5.9/js/material.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.1/summernote.min.js"></script>
<div class="container">
<div class="form-group label-static is-empty" id="summernote-container">
<div class="row">
<div class="col-xs-2">
<label class="control-label" for="Description">Description</label>
</div>
<div class="col-xs-10">
<div id="toolbar" class="mytoolbar"></div>
</div>
</div>
<input class="form-control" rows="3" id="Description" name="Description">
</div>
</div>Run Code Online (Sandbox Code Playgroud)
解:
首先,您需要在文档准备就绪时调用您的函数,使用:
$("document").ready(function(){
//Your JS functions here
});
Run Code Online (Sandbox Code Playgroud)
然后取出onfocus并onblur从内容.
在SoC (关注点分离)之后,我们将在我们的JS文件中添加这个逻辑,我们将使用on()jQuery方法.
在这种情况下,我们有以下逻辑:
$("#summernoteTrigger").on("click", function() {
//When the user clicks the input stuff here
//Separate Toolbar from Summernote and show it next to label
});
Run Code Online (Sandbox Code Playgroud)
当用户单击输入时,我们将初始化Summernote并使用焦点选项:
$(this).summernote({
focus: true
});
Run Code Online (Sandbox Code Playgroud)
当Summernote初始化时,我们希望工具栏放在标签旁边,所以我们要将它附加到我们选择的容器中:
$('.note-toolbar.panel-heading').appendTo('#toolbar');
Run Code Online (Sandbox Code Playgroud)
我们想做的另一件事是如果用户停止对焦,则销毁Summernote.为此,我们无法使用,$('#summernoteTrigger').on('summernote.blur', function() {});因为单击工具栏会触发此回调.相反,我们可以使用以下方法:
$(document).mouseup(function(el) {
var summernoteContainer = $("#summernote-container");
if (!summernoteContainer.is(el.target) && summernoteContainer.has(el.target).length === 0) {
//Add logic here if you want to save what the user typed
$("#summernoteTrigger").summernote("destroy");
$('.note-toolbar.panel-heading').remove();
}
});
});
Run Code Online (Sandbox Code Playgroud)
最后,我们将所有内容放在一起并根据需要添加一些样
代码链:
$(document).ready(function() {
$(function() {
$.material.init();
});
var mySummernote = $("#Description");
mySummernote
.on("click", function() {
$(this).summernote({
focus: true
});
$('.note-toolbar.panel-heading').appendTo('#toolbar');
});
$(document).mouseup(function(el) {
var summernoteContainer = $("#summernote-container");
if (!summernoteContainer.is(el.target) && summernoteContainer.has(el.target).length === 0) {
mySummernote.summernote("destroy");
$('.note-toolbar.panel-heading').remove();
}
});
});Run Code Online (Sandbox Code Playgroud)
.mytoolbar {
position: relative;
top: -30px;
z-index: 9;
}Run Code Online (Sandbox Code Playgroud)
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-material-design/0.5.9/css/bootstrap-material-design.css" rel="stylesheet" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.1/summernote.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-material-design/0.5.9/js/material.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.1/summernote.min.js"></script>
<div class="container">
<div class="form-group label-static is-empty" id="summernote-container">
<div class="row">
<div class="col-xs-2">
<label class="control-label" for="Description">Description</label>
</div>
<div class="col-xs-10">
<div id="toolbar" class="mytoolbar"></div>
</div>
</div>
<input class="form-control" rows="3" id="Description" name="Description">
</div>
</div>Run Code Online (Sandbox Code Playgroud)
这是我的大问题是从文本字段本身分离工具栏
Summernote具有Air模式,专门针对这种情况量身定制.
首先,你应该知道这个技巧分为两个简单的部分.
第一部分:
空气模式仅适用于突出显示文本,因此您应该在焦点(如果需要)时触发此突出显示,或者将css设置为display:block!important,当然您可以使用css控制其位置,但要注意它具有绝对位置.
第二部分
当突出显示任何文本时,这将重置工具栏css,因此这里的解决方案解决了它,但需要修改summernote源代码.
这是一个解释理论的小提琴,当我有时间的时候,我将完成一个完整的概念证明.
$(document).ready(function() {
$.material.init();
$('#description').summernote({
height: 300,
tabsize: 2,
airMode: true
});
});
Run Code Online (Sandbox Code Playgroud)