javascript - 更改::before 伪类中的 'content' 属性

标签 javascript css pseudo-class

<分区>

JSFiddle

在我的 JS 中,我试图访问 dislpay_object::before 类的“内容”属性。 我需要将“内容”(文本)设置为页面上 div 的位置。

我已经进行了大量的搜索,但没有在这些类型的伪类上找到如此深入的内容。

  .display_object {
  position: absolute;
  border: thin solid black;
  width: 15cm;
  white-space: nowrap;
}

.display_object:active::before {
  content: "x,y";
  /*needs to be changed to actual values*/
  display: block;
  position: absolute;
  background: rgba(0, 0, 0, 0.48);
  padding: 1em 3em;
  color: white;
  font-size: .8em;
  bottom: 1.6em;
  left: -1px;
  white-space: nowrap;
}

如何通过 JS 引用 :active::before 的 .content,将其设置到当前位置?

最佳答案

通过this answer ,您可以使用 attr()before 伪元素的 content 属性设置为父 div 的属性:

content: attr(data-before);

然后只需在您的事件处理程序中更新该属性:

div.setAttribute('data-before',`x: ${mousePosition.x}, y: ${mousePosition.y}`);

工作片段:

		var mousePosition;
		var offset = [0, 0];
		var div;
		var isDown = false;

		div = document.createElement("div");

		div.className = "display_object";
		div.innerHTML = "Draggable box:  ";

		document.body.appendChild(div);

		div.addEventListener('mousedown', function(e) {
		  isDown = true;
		  offset = [
		    div.offsetLeft - e.clientX,
		    div.offsetTop - e.clientY
		  ];
		}, true);

		document.addEventListener('mouseup', function() {
		  isDown = false;
		}, true);

		document.addEventListener('mousemove', function(event) {
		event.preventDefault();
		if (isDown) {

		  mousePosition = {

		    x: event.clientX,
		    y: event.clientY

		  };

		  div.style.left = (mousePosition.x + offset[0]) + 'px';
		  div.style.top = (mousePosition.y + offset[1]) + 'px';

			div.setAttribute('data-before',`x: ${mousePosition.x}, y: ${mousePosition.y}`);

		}
		}, true)
		;
.display_object {
  position: absolute;
  border: thin solid black;
  width: 15cm;
  white-space: nowrap;
}

.display_object:active::before {
  content: attr(data-before);
  display: block;
  position: absolute;
  background: rgba(0, 0, 0, 0.48);
  padding: 1em 3em;
  color: white;
  font-size: .8em;
  bottom: 1.6em;
  left: -1px;
  white-space: nowrap;
}

关于javascript - 更改::before 伪类中的 'content' 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50990911/

相关文章:

css - 为什么不能插入/使用::BEFORE::AFTER css 样式?

css - 我应该添加光标 :pointer to pseudo class :hover or not?

css - 来自 :nth-of-type(n+1) 的意外行为

angular - 如何在从 col-12 更改为 col-9 时向 css 中的 div 添加过渡效果?

css - 响应式菜单仅使用 "nav"和 "a"标签(无 "ul")

javascript - 制作一个简单的私有(private)变量全局 - 访问主体元素

javascript - 为什么缺少模板/组件不会在 Ember.js 中引发错误?

html - css 背景图像不显示在 html 表中

javascript - 在 Node 中每天中午 12 点仅安排一次作业

javascript - 如何在Highchart中设置Precision-ToolTip