kindeditor老版本version 4.1.10 bug踩坑:上传图片或者视频的弹窗有时候不出现,只出现遮罩

我要冲啦个人网站建设2020-03-20php

  上传图片或者视频的弹窗有时候不出现,只出现遮罩

  通过测试发现,出现这种情况不是弹出框没有出现,而是设置固定定位top值为空,元素出现在了屏幕之外(屏幕下边);

  查看Elements可以发现:

  并没有top值,

  正常显示的情况下是这样的:

  为什么会出现这种情况呢?

  查看源码,弹出框的定位由以下代码决定: 大约在3440行左右
 

  1. pos : function(x, y, updateProp) {
  2. var self = this;
  3. updateProp = _undef(updateProp, true);
  4. if (x !== null) {
  5. x = x < 0 ? 0 : _addUnit(x);
  6. self.div.css('left', x);
  7. if (updateProp) {
  8. self.x = x;
  9. }
  10. }
  11. if (y !== null) {
  12. y = y < 0 ? 0 : _addUnit(y);
  13. self.div.css('top', y);
  14. if (updateProp) {
  15. self.y = y;
  16. }
  17. }
  18. //console.log(y) 在此处输出Y差看 正常情况和bug情况的区别
  19. return self;
  20. },
  21. autoPos : function(width, height) {
  22. var self = this,
  23. w = _removeUnit(width) || 0,
  24. h = _removeUnit(height) || 0,
  25. scrollPos = _getScrollPos();
  26. if (self._alignEl) {
  27. var knode = K(self._alignEl),
  28. pos = knode.pos(),
  29. diffX = _round(knode[0].clientWidth / 2 - w / 2),
  30. diffY = _round(knode[0].clientHeight / 2 - h / 2);
  31. x = diffX < 0 ? pos.x : pos.x + diffX;
  32. y = diffY < 0 ? pos.y : pos.y + diffY;
  33. } else {
  34. var docEl = _docElement(self.doc);
  35. x = _round(scrollPos.x + (docEl.clientWidth - w) / 2);
  36. y = _round(scrollPos.y + (docEl.clientHeight - h) / 2);
  37. }
  38. if (!(_IE && _V < 7 || _QUIRKS)) {
  39. x -= scrollPos.x;
  40. y -= scrollPos.y;
  41. }
  42. return self.pos(x, y);
  43. },

  在pos函数中输出y发现: 正常情况下: 输出 '324px' 为字符串类型,带单位; bug情况下: 输出 324.5 数字没有单位;

  这样就发现了问题所在,bug时 324.5直接复制给元素的top值,为 top: 324.5 没有单位px,浏览器不读取,导致top为空,元素掉到了屏幕外面。

  产生这种情况的原因:

  是由于上方代码中的

  _addUnit()这个函数:
 

  1. function _addUnit(val, unit) {
  2. unit = unit || 'px';
  3. return val && /^\d+$/.test(val) ? val + unit : val;
  4. }

  问题就出在了/^\d+$/.test(val),如果val为小数的时候,返回了false,则直接return val,不带px单位了

  解决办法:

  不要直接修改_addUnit函数,这样影响太大,

  我们只要保证传给_addUnit的val是一个整数就行,所以修改上面代码块中的第12行

  y = y < 0 ? 0 : _addUnit(y);

  修改为

  y = y < 0 ? 0 : _addUnit(parseInt(y)); //添加parseInt方法,将y转换成整数

  同理,把x部分也修改一下。

文章关键词
kindeditor
bug
踩坑
上传图片或者视频的弹窗有时候不出现
只出现遮罩