首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将div按钮放在可编辑内容元素上

将div按钮放在可编辑内容元素上
EN

Stack Overflow用户
提问于 2016-08-23 18:34:37
回答 2查看 1.1K关注 0票数 0

我正在为一个客户端开发一个angular应用程序,我必须在右下角的可内容元素上制作一个可点击的按钮,如下图所示:

为了增加一些难度,内容应该是可滚动的,但按钮应该留在相同的位置,文本应该避开它。当然,我不能添加一些标记/填充,因为它会在内容可编辑区域的底部或右侧添加一些空白列/行。

我可以使用任何js/css提示/库。

编辑#1 :好的,我的问题不够准确。下面是一些代码:

代码语言:javascript
运行
AI代码解释
复制
<p id="editfield"  contenteditable="true"></p>

http://jsfiddle.net/4yr7jsz1/24/

如您所见,这是一个"contenteditable“元素。这样用户就可以在里面输入文本了。但是文本不应该在圆形按钮下面通过,而且应该是srcollable的。

编辑#2 :事实上,我几乎可以很好地使用按钮。在contenteditale容器内插入的元素上的":before“元素允许我放置我希望文本避免的区域。但问题是,我不能通过javascript改变":before“元素的任何参数...下面是html:

代码语言:javascript
运行
AI代码解释
复制
<body ng-app="MyApp">
  <div id="editable-content" ng-controller="SimpleController">
    <span id="clickable-zone"></span>
    <p id="editfield" contenteditable="true"></p>
  </div>
</body>

#clickable-zone是按钮。

通过javascript,我插入了一个空元素,它将使文本循环。

代码语言:javascript
运行
AI代码解释
复制
app.directive("contenteditable", function() {
  return {
    restrict: "A",
    link: function(scope, element, attrs) {
      var imgPhoto = $('<div class="inside_element"></div>');
      var mydiv = $('<div class="myimage"></div>').append(imgPhoto);


      element.bind("blur keyup change", function(event) {
        if(element.html() != mydiv[0].outerHTML && element.html() != '') {
                    mydiv.prependTo(element);
        }
        else {
          mydiv.remove();
        }
      });

      $(document).on("click","span#clickable-zone",function() {
        console.log('click');
      });
    }
  };
});

然后,我为所有不同的内容添加css,这将使我能够在contenteditable元素中定位“空白区域”。

代码语言:javascript
运行
AI代码解释
复制
[contenteditable] {
  border: 2px dotted #ccc;
  background-color: #eee;
  padding: 2px;
  height: 200px;
  width: 500px;
  overflow-y: scroll;
}

.inside_element {
  float:right;
  clear:both;
  width: 100px;
  height: 100px;
  cursor: pointer;
  border-radius: 50%;
}

.myimage:before {
  content: '';
  display: block;
  float:right;
  height: 100px;
}

#clickable-zone {
  position: absolute;
  bottom: 4px;
  right: 4px;
  border-radius: 50%;
  height: 100px;
  width: 100px;
  float:right;
  background-image: url("https://i.vimeocdn.com/portrait/58832_300x300");
  background-repeat: no-repeat; /*Prevent showing multiple background images*/
  background-size: 100px 100px;
  z-index: 5;
  cursor: pointer;
}

#editable-content {
  height: 208px;
  width: 508px;
  position: relative;
}

我不确定有没有办法做到这一点,任何帮助都会很好:)

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-23 20:46:13

因此,我最终找到了答案,找到了一种方法,将“之前”的peuso元素移动到contenteditable元素中。以下是代码片段:

代码语言:javascript
运行
AI代码解释
复制
var app = angular.module("MyApp", []);

app.controller('SimpleController', function($scope){

});

app.directive("contenteditable", function() {
  return {
    restrict: "A",
    link: function(scope, element, attrs) {
      var imgPhoto = $('<div class="inside_element"></div>');
      var mydiv = $('<div class="myimage"></div>').append(imgPhoto);
      
      var initScrollHeight = element[0].scrollHeight;
      var initAvoidElementHeight = 100;
      
      element.bind("blur keyup change scroll", function(event) {
      	var position = element[0].scrollHeight;
		if(element[0].scrollTop > 0) {
        	var position = element[0].scrollTop + initScrollHeight;
        }
        else if(element[0].scrollHeight > initScrollHeight) {
        	var position = initScrollHeight;
        }

      	var diffScroll = parseInt(position - initScrollHeight);
        mydiv.css('height', initAvoidElementHeight + diffScroll);
				
        if(element.html() != mydiv[0].outerHTML && element.html() != '') {
		    mydiv.prependTo(element);
        }
        else {
            mydiv.remove();
        }
        
      });

      $(document).on("click","span#clickable-zone",function() {
      	console.log('click');
      });
    }
  };
});
代码语言:javascript
运行
AI代码解释
复制
[contenteditable] {
  border: 2px dotted #ccc;
  background-color: #eee;
  padding: 2px;
  height: 200px;
  width: 500px;
  overflow-y: scroll;
}

.inside_element {
  float:right;
  clear:both;
  width: 100px;
  height: 100px;
  cursor: pointer;
  border-radius: 50%;
}

.myimage::before {
  content: '';
  display: block;
  float:right;
  height: inherit;
}
.myimage {
  height: 100px;
  max-height: 0;
}
#clickable-zone {
  position: absolute;
  bottom: 4px;
  right: 4px;
  border-radius: 50%;
  height: 100px;
  width: 100px;
  float:right;
  background-image: url("https://i.vimeocdn.com/portrait/58832_300x300");
  background-repeat: no-repeat; /*Prevent showing multiple background images*/
  background-size: 100px 100px;
  z-index: 5;
  cursor: pointer;
}

#editable-content {
  height: 208px;
  width: 508px;
  position: relative;
}
代码语言:javascript
运行
AI代码解释
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="MyApp">
  <div id="editable-content" ng-controller="SimpleController">
    <span id="clickable-zone"></span>
    <p id="editfield"  contenteditable="true" ></p>
  </div>
</body>

如您所见,我使用了inherit css技巧来传递之前伪元素的动态高度。卷轴仍在工作,我看不出现在性能有任何欠佳。希望有一天这能帮助到某人:)

谢谢你的帮助。

票数 1
EN

Stack Overflow用户

发布于 2016-08-23 18:48:25

这就是解决方案,按钮保持不变,而内容被滚动。https://jsfiddle.net/8rofx1n9/2/

代码语言:javascript
运行
AI代码解释
复制
.btn{

  float:right;
  position:fixed;
  margin-left:300px;
}
代码语言:javascript
运行
AI代码解释
复制
<html>
Text Goes here
<span > <input class="btn" type="button" value="ClickMe"   >   

<br/><br/><br/><br/><br/><br/>
Contents.........


<br/><br/><br/><br/>
Contents.........


<br/><br/><br/><br/><br/>
Contents.........


<br/><br/><br/><br/>
Contents.........

<br/><br/><br/><br/>
Contents.........

</span>


</html>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39108416

复制
相关文章
如何从列表中获取元素
观察URAM的物理管脚,不难发现A/B端口都有相应的地址、使能、读写控制信号。与BRAM不同的是URAM的读写使能信号是同一个管脚RDB_WR_A/B,其为0时执行读操作,为1时执行写操作,这意味着一旦A/B端口独立,同一端口的读写操作就无法同时发生,因此,如果采用上一篇文章中介绍的方法将其配置为两个独立的单端口RAM,其读写行为与常规的单端口RAM是不同的,进一步而言,此时的读写行为类似于NO_Change模式。
Lauren的FPGA
2019/10/30
17.8K0
组件封装之输入框下拉列表
项目开发的时候刚好遇到一个需求,需要在输入框输入名字的时候,弹出相应的人员列表提供选择,然后将数据赋值给输入框。项目是使用iview组件的,一开始想着在自定义iview的下拉选择,后来发现效果并不理想。为了实现功能,就在iview输入框的基础上进行了组件封装,下面就来讲下组件封装的过程。
逆锋起笔
2021/05/18
2.2K0
组件封装之输入框下拉列表
【说站】Python如何从列表中获取笛卡尔积
Python如何从列表中获取笛卡尔积 1、可以使用itertools.product在标准库中使用以获取笛卡尔积。 from itertools import product   somelists = [    [1, 2, 3],    ['a', 'b'],    [4, 5] ]   result = list(product(*somelists)) print(result) 2、迭代方法。 def cartesian_iterative(pools):   result = [[]]  
很酷的站长
2022/11/24
8.9K0
【说站】Python如何从列表中获取笛卡尔积
iOS开发中QQ好友列表下拉显示全部好友实现思路
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/73312801
用户1451823
2018/09/13
1.7K0
pyqt中QTableWidget里的下拉列表
有时候我们希望在QTableWidget的单元格中进行下拉列表的选择,就像excel里面这样。那么怎么设置呢?怎么实现读和写呢?特别是在pyqt中,在c++中,网上已经有很多例子了。
钱塘小甲子
2019/08/15
3.8K0
SAP MM如下MIGO界面中,如果想在Reference下拉列表中不显示’Other’,该如何处理?
选中TCODE ‘MIGO’,然后点选‘Transaction/Event’,进入如下界面:
SAP虾客
2021/03/01
1.7K0
SAP MM如下MIGO界面中,如果想在Reference下拉列表中不显示’Other’,该如何处理?
模板代码 - 列表和下拉刷新
摘要总结:本篇文章主要介绍了如何使用ViewStub和ViewStubCompat实现多布局,以便在不同的屏幕尺寸和分辨率下达到较好的展示效果。同时,还介绍了如何使用ViewStub和ViewStubCompat实现内边距和圆角,以及自定义属性在布局中的使用。
用户1172465
2018/01/05
3K0
Python中如何获取列表中重复元素的索引?
昨天分享了一个文章,Python中如何获取列表中重复元素的索引?,后来【瑜亮老师】看到文章之后,又提供了一个健壮性更强的代码出来,这里拿出来给大家分享下,一起学习交流。
前端皮皮
2022/08/17
13.7K0
Python中如何获取列表中重复元素的索引?
[Excel技巧]创建下拉列表
在单位用Excel做统计,想偷个小懒,比如食品一栏。能不能设计一个下拉列表,直接在列表框中选择,省去键盘的重复输入呢?
卷福同学
2023/04/28
2.4K0
[Excel技巧]创建下拉列表
Java 下拉列表
import java.awt.Container; import java.awt.FlowLayout; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ComboBoxModel; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; im
用户2965768
2019/03/04
3.1K0
在jquery中用下拉框列表显示默认的值
1、在postUpdate.jsp中添加js如下: <script type="text/javascript"> $(document).ready(function(){ var qx_value = $('#qx_select_value').val(); $("#qx_select option[value='"+qx_value+"']").attr("selected", "selected"); }) </script> 核心代码就这一句话: $("
qubianzhong
2018/08/10
3.7K0
WordPress 技巧:使用下拉菜单方式显示分类列表
有时候,你想在下拉菜单分类列表中显示分类列表,并且不用按提交按钮就能够跳转,最简单的办法就是使用 wp_dropdown_categories 模板标签函数。下面是具体代码:
Denis
2023/04/15
1.3K0
iOS中获取要要保存到相册中的图片
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/53412588
用户1451823
2018/09/13
1.4K0
「R」获取R包中的函数和对象列表
问题 你想知道包里有什么。 方案 在一个新的 R 会话中使用 search() 可以查看默认加载的包。 search() #> [1] ".GlobalEnv" "package:ellipse" #> [3] "package:Cairo" "package:grid" #> [5] "package:dplyr" "package:scales" #> [7] "package:Rmisc" "package:plyr" #>
王诗翔呀
2020/07/03
7.5K0
flutter的列表下拉刷新
flutter的列表下拉刷新需要借助一个组件来实现,这个组件的名字是RefreshIndicator,直译过来就是刷新指示灯。
挥刀北上
2021/01/07
4.9K0
flutter的列表下拉刷新
js下拉列表实现增加和移除选项
JaneYork
2023/10/11
3340
laravel-admin select、multipleSelect从api中获取选项列表
select、multipleSelect从api中获取选项列表 $form->select($column[, $label])->options([1 => 'foo', 2 => 'bar', 'val' => 'Option name']); 或者从api中获取选项列表: $form->select($column[, $label])->options('/api/users'); 其中api接口的格式必须为下面格式: [ { "id": 9, "tex
友儿
2022/09/11
3.9K0
如何从 Python 列表中删除所有出现的元素?
在 Python 中,列表是一种非常常见且强大的数据类型。但有时候,我们需要从一个列表中删除特定元素,尤其是当这个元素出现多次时。本文将介绍如何使用简单而又有效的方法,从 Python 列表中删除所有出现的元素。
网络技术联盟站
2023/06/01
12.9K0
Python要如何实现(列表)排序?
排序,是许多编程语言中经常出现的问题。同样的,在Python中,如何是实现排序呢?(以下排序都是基于列表来实现)
全栈程序员站长
2022/09/07
8410
如何在 WordPress 中获取最新被评论的文章列表
我之前的「WordPress 文章查询教程6:如何使用排序相关的参数」中详细介绍了文章查询的排序参数,其中介绍可以通过评论数进行排序:
Denis
2023/04/13
1.7K0

相似问题

雪碧图动画的CAKeyframeAnimation

12

旋转动画雪碧图?

12

Unity 5.2 -雪碧图动画

110

雪碧图动画Android Studio

13

如何在Andengine中延迟动画雪碧图?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文