目录javascript
问题目录php
经过测试发现,出现这种状况不是弹出框没有出现,而是设置固定定位top值为空,元素出如今了屏幕以外(屏幕下边);
查看Elements能够发现:
并无top值,
正常显示的状况下是这样的:
为何会出现这种状况呢?
查看源码,弹出框的定位由如下代码决定: 大约在3440行左右css
pos : function(x, y, updateProp) { var self = this; updateProp = _undef(updateProp, true); if (x !== null) { x = x < 0 ? 0 : _addUnit(x); self.div.css('left', x); if (updateProp) { self.x = x; } } if (y !== null) { y = y < 0 ? 0 : _addUnit(y); self.div.css('top', y); if (updateProp) { self.y = y; } } //console.log(y) 在此处输出Y差看 正常状况和bug状况的区别 return self; }, autoPos : function(width, height) { var self = this, w = _removeUnit(width) || 0, h = _removeUnit(height) || 0, scrollPos = _getScrollPos(); if (self._alignEl) { var knode = K(self._alignEl), pos = knode.pos(), diffX = _round(knode[0].clientWidth / 2 - w / 2), diffY = _round(knode[0].clientHeight / 2 - h / 2); x = diffX < 0 ? pos.x : pos.x + diffX; y = diffY < 0 ? pos.y : pos.y + diffY; } else { var docEl = _docElement(self.doc); x = _round(scrollPos.x + (docEl.clientWidth - w) / 2); y = _round(scrollPos.y + (docEl.clientHeight - h) / 2); } if (!(_IE && _V < 7 || _QUIRKS)) { x -= scrollPos.x; y -= scrollPos.y; } return self.pos(x, y); },
在pos函数中输出y发现:html
这样就发现了问题所在,bug时 152.3333直接复制给元素的top值,为 top: 152.3333 没有单位px,浏览器不读取,致使top为空,元素掉到了屏幕外面。
产生这种状况的缘由:
是因为上方代码第22行中的
_addUnit()
这个函数:java
function _addUnit(val, unit) { unit = unit || 'px'; return val && /^\d+$/.test(val) ? val + unit : val; }
问题就出在了/^\d+$/.test(val)
,若是val为小数的时候,返回了false,则直接return val,不带px单位了node
解决办法:
不要直接修改_addUnit函数,这样影响太大,
咱们只要保证传给_addUnit的val是一个整数就行,因此修改上面代码块中的第22行
y = y < 0 ? 0 : _addUnit(parseInt(y)); //添加parseInt方法,将y转换成整数
json
步骤一: 修改容许上传的视频格式
修改编辑器目录下的 kendeditor/php/upload_json.php,大概在20行左右,在media类型中添加MP4数组
$ext_arr = array( 'image' => array('gif', 'jpg', 'jpeg', 'png', 'bmp'), 'flash' => array('swf', 'flv'), 'media' => array('swf', 'flv', 'mp3', 'mp4', 'wav', 'wma', 'wmv', 'mid', 'avi', 'mpg', 'asf', 'rm', 'rmvb'), 'file' => array('doc', 'docx', 'xls', 'xlsx', 'ppt', 'htm', 'html', 'txt', 'zip', 'rar', 'gz', 'bz2'), );
步骤二:修改kindeditor.js 905行左右,加入须要支持的视频格式,MP4生成的embed的type为application/x-shockwave-flash;浏览器
function _mediaType(src) { if (/\.(rm|rmvb)(\?|$)/i.test(src)) { return 'audio/x-pn-realaudio-plugin'; } if (/\.(swf|flv|mp4)(\?|$)/i.test(src)) { //添加MP4 return 'application/x-shockwave-flash'; } return 'video/x-ms-asf-plugin'; }
步骤三:下载ckplayer,将插件保存到项目的kendeditor/plugins文件夹中,
app
步骤四:修改kineditor提交视频后生成的embed,按照ckplayer插件简单调用的格式。
function _mediaEmbed(attrs) { var html = '<embed '; //最后有个空格 //获取当前网址,如: http://localhost:8083/uimcardprj/share/meun.jsp var curWwwPath=window.document.location.href; //获取主机地址以后的目录,如: uimcardprj/share/meun.jsp var pathName=window.document.location.pathname; var pos=curWwwPath.indexOf(pathName); //获取主机地址,如: http://localhost:8083 var localhostPath=curWwwPath.substring(0,pos); _each(attrs, function(key, val) { if(key == 'src') { html += key + '="' + K.options.pluginsPath + 'ckplayer/ckplayer.swf" ' + 'flashvars="video=' //.swf后又个空格 + localhostPath + val + '" '; //‘" ’这里最后有个空格 } else { html += key + '="' + val + '" '; //‘" ’这里最后有个空格 } }); html += '/></embed>'; return html; }
embed : ['id', 'class', 'src', 'width', 'height', 'type', 'loop', 'autostart', 'quality', '.width', '.height', 'align', 'allowscriptaccess', 'flashvars'], //添加falshvars属性
注意:
步骤五:前台引入ckplayer,js
在须要播放视频的页面,引入ckplayer.js,生成该播放器;
ckplayer播放器的配置可直接才ckplayer.js中修改,具体文档请参照操做手册