小编Cha*_*kal的帖子

精确的拖放在一个令人满意的

安装程序

所以,我有一个令人满意的div - 我正在制作一个WYSIWYG编辑器:粗体,斜体,格式化,无论如何,最近:插入花哨的图像(在一个花哨的盒子里,带有标题).

<a class="fancy" href="i.jpg" target="_blank">
    <img alt="" src="i.jpg" />
    Optional Caption goes Here!
</a>
Run Code Online (Sandbox Code Playgroud)

用户使用我给他们提供的对话框添加这些奇特的图像:他们填写详细信息,上传图像,然后很像其他编辑器功能,我用document.execCommand('insertHTML',false,fancy_image_html);它来根据用户的选择进行填充.

期望的功能

所以,现在我的用户可以拍摄一个奇特的图像 - 他们需要能够移动它.用户需要能够单击并拖动图像(花式框和所有图像),以便将其放置在满足其中的任何位置.他们需要能够在段落之间移动,甚至在段落之间 - 如果他们想要的话,在两个单词之间移动它.

什么给了我希望

请记住 - 在一个可信的,简单的旧<img>标签已经被用户代理祝福,具有这种可爱的拖放功能.默认情况下,您可以将<img>标签拖放到任何地方; 默认的拖放操作就像人们梦寐以求的那样.

所以,考虑一下这种默认行为如何对我们的<img>伙伴们如此有用- 我只想稍微扩展这种行为以包含更多的HTML - 这似乎应该是容易实现的.

我的努力到目前为止

首先,我<a>使用draggable属性设置我的花哨标签,并禁用contenteditable(不确定是否有必要,但似乎它可能也是关闭):

<a class="fancy" [...] draggable="true" contenteditable="false">
Run Code Online (Sandbox Code Playgroud)

然后,因为用户仍然可以将图像拖出花哨的<a>盒子,我不得不做一些CSS.我在Chrome上工作,所以我只向你展示-webkit-前缀,尽管我也使用了其他的.

.fancy {
    -webkit-user-select:none;
    -webkit-user-drag:element; }
    .fancy>img {
        -webkit-user-drag:none; }
Run Code Online (Sandbox Code Playgroud)

现在,用户可以拖动整个花哨的盒子,并且稍微部分褪色的点击拖动表示图像反映了这一点 - 我可以看到我现在正在拿起整个盒子:)

我已经尝试了几种不同CSS属性的组合,上面的组合似乎对我有意义,并且似乎效果最好.

我希望只有这个CSS就足以让浏览器使用整个元素作为可拖动的项目,自动向用户授予我一直梦寐以求的功能...... 然而,它似乎比这更复杂.

HTML5的JavaScript拖放API

这种拖放似乎比它需要的更复杂.

所以,我开始深入研究DnD api文档,现在我被卡住了.所以,这就是我所操作的(是的,jQuery):

$('.fancy')
    .bind('dragstart',function(event){
        //console.log('dragstart');
        var dt=event.originalEvent.dataTransfer;
        dt.effectAllowed …
Run Code Online (Sandbox Code Playgroud)

javascript html5 drag-and-drop draggable css3

60
推荐指数
1
解决办法
2万
查看次数

JavaScript原型的继承 - 'constructor'属性?

我已经看过很多像这样的东西了,我正在寻找基本的JavaScript继承的正确解决方案:

function Food(){}  // Food  constructor (class)
function Bread(){} // Bread constructor (class)

var basicFood = new Food();    // Food classes will inherit from this basicFood instance.

Bread.prototype = basicFood; // Bread now inherits from Food.

var bread = new Bread();     // We create some bread!
bread.constructor == Food;  // Though, now we feel very uneasy about how
                           // the constructor is wrong,

Bread.prototype.constructor = Bread; // So we explicitly set the prototype's constructor
bread = new Bread();                // and …
Run Code Online (Sandbox Code Playgroud)

javascript oop prototype prototypal-inheritance

18
推荐指数
1
解决办法
5063
查看次数

使用重命名的文件进行git rebase

我有一个重命名许多文件的分支,我正在尝试将其重新定位到master原始文件被修改的位置(最好不要将其转换为手动解决冲突的噩梦).

情况

  1. 我一直在我的本地typescript分支中将一个JavaScript项目移植到TypeScript ..js现在所有文件都已成为.ts文件,并且某些语法已升级.

  2. 同时,分支.js上发生了对原始文件的更改master.

  3. 我想将我的分支重新绑定 - 但是更改没有正确合并,因为文件重命名尚未被检测到 - 所以我们遇到了冲突,其中git认为已经删除的文件发生了变化(但是他们有实际上已重命名为文件).typescriptmaster.js.ts

我想我知道

Git图:

o-[typescript] .js files become .ts
|
| o-[master] changes to the .js files
| |
| o
|/
o-[root] common ancestor
Run Code Online (Sandbox Code Playgroud)

所以,站在root分公司时:

  • 我可以运行此命令来查看所有重命名: git diff --name-status --find-renames=10% typescript

  • 我知道git merge命令具有相同的--find-renames功能,但是我很难让它工作.

    • 更新: git merge -X find-renames=10% mybranch似乎是预期的语法.
  • 我理解git rebase 可能支持find-renames功能,但我还不清楚如何使用它.

解决方案想法 …

git merge rebase

16
推荐指数
1
解决办法
6282
查看次数

浏览器作为设计工具 - 改变颜色,保存它们?

我是一名Web开发人员/设计师,我需要我的代码 - 文盲客户端能够轻松搞乱特定元素的颜色,保存这些CSS更改,并将它们发送给我.我将通过电话指导他们,但我仍然需要它比预期他们在主题表中找到CSS选择器,并编写十六进制代码更容易.

我需要一个浏览器内检查器,它允许代码文盲的人:

  • 使用GUI颜色选择器轻松操作网页元素上的颜色.
      (+)Chrome完美地做到了这一点.这正是我想要的.
      ( - )Firefox的华丽检查员似乎没有这个基本功能.
  • 保存受影响的样式表,以便他们发送给我.
      (?)Firefox的样式编辑器使保存工作表变得容易,但是对被检查元素的更改 - 奇怪的是 - 似乎没有应用.
      ( - )Chrome可能会在Sources面板中深入实现这一点,但似乎你需要成为黑客来解决它,因为我是代码识别者,我还没有想到它出.

我发现这个难题的存在非常令人困惑 - 为什么浏览器厂商难以制作如此丰富的网页编辑套件,可以操纵CSS,但不包括基本的"保存更改"功能? 我错过了什么吗?

编辑01:

我在Chrome中发现,可以使用检查器自由操作元素的CSS,然后单击与每个规则关联的CSS工作表(在规则的右上角),以转到已修改的CSS工作表中.来源标签.这就是我想要保存的.
   从这里,可以右键单击此修改后的源代码中的任意位置,然后单击"另存为" - 但不幸的是,奇怪的是, Chrome会保存错误的源代码.它保存了原始的,未经修改的源代码 - 而不是您右键单击"保存"的已修改源代码.非常令人沮丧,我正在试图找到解决这个bug的方法.我太近了!

编辑02:

好的,我已经明白了.当您保存在Chrome的源标签的文件时,你不只是保存该文件- 你实际上设置Chrome浏览器不断地自动保存该文件在每次改变你做它.
   这实际上很酷,但非常误导.

因此,在保存CSS文件后,您在检查器中对元素的CSS所做的每个更改都将自动保存到该文件.即使您重新启动浏览器,这仍然存在.

出现了混乱,因为当你有一个标记为自动保存的文件,然后你保存为一个修改过的文件时, Chrome奇怪地写了原始文件,而不是你右键单击的文件.只要您在此之后进行任何更改,Chrome就会自动将每个当前修改都写入该文件.我认为这是Chrome中的一个错误.

经验教训, 首先,保存 - 作为文件.其次,做出改变.
   Presto,你修改过的CSS主题在你的硬盘上等着你.

要清楚,如果您保存,然后进行更改,然后再次保存 - Chrome将保存原始来源,而不是您的修改来源.这使事情的顺序变得重要.

我不知道如何查看当前标记为自动保存的文件列表,或者如何取消标记它们.

css browser user-experience

12
推荐指数
1
解决办法
5830
查看次数

如何在Chrome中使用Node 8检查器?

我熟悉--inspect自节点7以来使用该选项.现在在节点8上,它只是不起作用.今天我像往常一样要求节点使用检查器:

$ node --inspect --debug-brk node_modules/mocha/bin/_mocha o/**/*.test.js
Run Code Online (Sandbox Code Playgroud)

它回应如下:

Debugger listening on ws://127.0.0.1:9229/97a6264d-a751-4467-ac36-172ff3ebaac1
For help see https://nodejs.org/en/docs/inspector
Run Code Online (Sandbox Code Playgroud)

如果我尝试打开该链接,Chrome会说:

This site can’t be reached

The webpage at ws://127.0.0.1:9229/97a6264d-a751-4467-ac36-172ff3ebaac1 might be temporarily down or it may have moved permanently to a new web address.
ERR_DISALLOWED_URL_SCHEME
Run Code Online (Sandbox Code Playgroud)

之前它曾经是一个"chrome-devtools://"链接,它的工作非常出色.

是什么赋予了?

搜索周围,我找不到任何我应该用这个ws://链接.

javascript debugging node.js

10
推荐指数
1
解决办法
4045
查看次数

在Jest中调试单个测试

我在许多测试套件中,在许多测试文件中进行了许多测试

我需要隔离和调试单个测试

我正在调试通过node --inspect-brk ./node_modules/jest/bin/jest,所以其他涉及监视模式的解决方案太复杂了

我怎么能跳过所有测试,除了我需要调试的那个?

javascript testing jest

7
推荐指数
2
解决办法
2564
查看次数

为什么我不能从 Koa 路由器提供静态文件?

为什么在以下情况下koa-static无法使用koa-router

const Koa = require("koa")
const serve = require("koa-static")
const Router = require("koa-router")

const app = new Koa()
const router = new Router()

// fails with 404... why?
router.use(serve("public"))

// // this, on the other hand, works
// app.use(serve("public"))

app.use(router.middleware())
app.listen(8080)

// browse to "http://localhost:8080/testfile.txt"
Run Code Online (Sandbox Code Playgroud)

我制作了这个 GitHub repo 来演示这个问题:koa-router-static-issue

javascript node.js koa koa-router koa-static

7
推荐指数
1
解决办法
3037
查看次数

为什么MDN的`Object.create` polyfill没有设置`prototype.constructor`?

考虑MDN的Object.createpolyfill:

if (typeof Object.create != 'function') {
  (function () {
    var F = function () {};
    Object.create = function (o) {
      if (arguments.length > 1) { throw Error('Second argument not supported');}
      if (o === null) { throw Error('Cannot set a null [[Prototype]]');}
      if (typeof o != 'object') { throw TypeError('Argument must be an object');}
      F.prototype = o;
      return new F();
    };
  })();
}
Run Code Online (Sandbox Code Playgroud)

特别关注这两条线:

F.prototype = o;
return new F();
Run Code Online (Sandbox Code Playgroud)

我在想,为什么设置不合适F.prototype.constructor = F;

F.prototype …
Run Code Online (Sandbox Code Playgroud)

javascript es5-shim

6
推荐指数
1
解决办法
1093
查看次数

Javascript 预加载图像:添加到 DOM,还是不添加?

是否需要向 DOM 添加 an<img>才能预加载它?

$(function whenDOMIsHappy(){

  var $img = $('<img />')
    .load(loadHandler)
    .error(errorHandler)
    .attr({src:"squatchordle-squashgarden.jpg"});

  $img.appendTo('body .preloads'); // is this at all necessary?

});
// assuming <div class="preloads" style="display:none;"></div> exists in <body>.
Run Code Online (Sandbox Code Playgroud)

我看到过关于这项技术的混合信息。我正在使用 jQuery,但这个问题也适用于普通人。

我有兴趣在所有主要浏览器中保持此功能。

html javascript jquery

5
推荐指数
1
解决办法
2803
查看次数

如何将日期输入和时间输入视为当地时间,而不是世界时间?

用户输入的日期输入2019-12-22给出以下值:

  • input.value:"2019-12-22"
  • input.valueAsNumber:1576972800000
  • input.valueAsDate:"Sat Dec 21 2019 16:00:00 GMT-0800 (Pacific Standard Time)"
    • 这个结果日期对象似乎是错误的
    • 当浏览器返回一个值时,它将用户输入视为世界时间
    • 因此日期对象的 utc 表示形式与输入显示给用户的内容相同
    • input.valueAsDate.getUTCDate()返回22,这是用户输入的内容
    • input.valueAsDate.getDate()返回21,而不是用户输入的内容
    • 因此我们得出结论,日期输入显示并接受 UTC 时间,而不是本地时间

我们希望结果date.toString()显示与日期输入中原始用户输入相同的结果

我们如何允许用户与当地时间交互,然后在脚本中获取正确的日期对象?

javascript time timezone date

5
推荐指数
1
解决办法
1526
查看次数