Discuz!官方免费开源建站系统

 找回密码
 立即注册
搜索

[已解决] 从下往上浏览图片时,鼠标指针移动过两张图片交界处,页面会自动跑到顶端。

[复制链接]
On_my_way 发表于 2012-9-30 16:06:11 | 显示全部楼层 |阅读模式
本帖最后由 On_my_way 于 2012-10-2 03:36 编辑

--------------------------------2012-10-02 问题已解决-------------------------------------------
  • 问题暂时解决,用的是5楼的方法,我把问题代码注释掉了。
       这里非常感谢五楼的朋友——1314学习网

  • 管理员可以把这个问题改成“已解决”

  • 另外,我希望有高手能够告诉我那段需要删除的代码是什么意思,以防以后出现后遗症方便定位问题。
      非常感谢!
-------------------------------2012-9-29 问题描述------------------------------------------------
帖子中包含至少2张图片,图片越多,演示起来越容易发现问题。建议选择4张图片以上的帖子。

BUG描述:
Chrome/火狐浏览器:
当用户从下往上浏览图片时,鼠标指针移动过两张图片交界处页面会自动跑到第一张图片上

IE9浏览器:
当用户从下往上浏览图片时,鼠标指针移动过两张图片交界处页面会自动跑到当前图片的中间

举例页面:

http://bbs.suq.cc/thread-26066-1-1.html  

补充说明:
最开始我以为是模板和插件的问题,但是当我换回默认风格模板并关闭插件,问题依旧存在,所以应当是系统的问题。

另外,我在论坛上发现和我有类似问题的帖子,问题没解决,但是被管理员标注了"已解决"字样。
我认为,可能是由于那位仁兄没有把问题描述清楚。(但是实际问题是和我一样的)

帖子地址:
https://discuz.dismall.com/thread-3101733-1-1.html

其他类似帖子:
https://discuz.dismall.com/forum.php?mod=viewthread&tid=3105239&extra=page%3D1&page=1
https://discuz.dismall.com/forum.php?mod=viewthread&tid=3097878&reltid=3118220&pre_thread_id=0&pre_pos=8&ext=

评分

1

查看全部评分

回复

使用道具 举报

1314学习网 发表于 2012-10-1 12:19:17 | 显示全部楼层
本帖最后由 1314学习网 于 2012-10-7 12:32 编辑

这个是
  1. showMenu({'ctrlid':this.id,'pos':'12'})
复制代码
引起的
X2.5的showMenu和X2的不同,增加了一些代码,不知道是出于什么考虑,没仔细看



function showMenu(v) {
var ctrlid = isUndefined(v['ctrlid']) ? v : v['ctrlid'];
var showid = isUndefined(v['showid']) ? ctrlid : v['showid'];
var menuid = isUndefined(v['menuid']) ? showid + '_menu' : v['menuid'];
var ctrlObj = $(ctrlid);
var menuObj = $(menuid);
if(!menuObj) return;
var mtype = isUndefined(v['mtype']) ? 'menu' : v['mtype'];
var evt = isUndefined(v['evt']) ? 'mouseover' : v['evt'];
var pos = isUndefined(v['pos']) ? '43' : v['pos'];
var layer = isUndefined(v['layer']) ? 1 : v['layer'];
var duration = isUndefined(v['duration']) ? 2 : v['duration'];
var timeout = isUndefined(v['timeout']) ? 250 : v['timeout'];
var maxh = isUndefined(v['maxh']) ? 600 : v['maxh'];
var cache = isUndefined(v['cache']) ? 1 : v['cache'];
var drag = isUndefined(v['drag']) ? '' : v['drag'];
var dragobj = drag && $(drag) ? $(drag) : menuObj;
var fade = isUndefined(v['fade']) ? 0 : v['fade'];
var cover = isUndefined(v['cover']) ? 0 : v['cover'];
var zindex = isUndefined(v['zindex']) ? JSMENU['zIndex']['menu'] : v['zindex'];
var ctrlclass = isUndefined(v['ctrlclass']) ? '' : v['ctrlclass'];
var winhandlekey = isUndefined(v['win']) ? '' : v['win'];
zindex = cover ? zindex + 500 : zindex;
if(typeof JSMENU['active'][layer] == 'undefined') {
JSMENU['active'][layer] = [];
}

for(i in EXTRAFUNC['showmenu']) {
try {
eval(EXTRAFUNC['showmenu'] + '()');
} catch(e) {}
}

if(evt == 'click' && in_array(menuid, JSMENU['active'][layer]) && mtype != 'win') {
hideMenu(menuid, mtype);
return;
}
if(mtype == 'menu') {
hideMenu(layer, mtype);
}

if(ctrlObj) {
if(!ctrlObj.getAttribute('initialized')) {
ctrlObj.setAttribute('initialized', true);
ctrlObj.unselectable = true;

ctrlObj.outfunc = typeof ctrlObj.onmouseout == 'function' ? ctrlObj.onmouseout : null;
ctrlObj.onmouseout = function() {
if(this.outfunc) this.outfunc();
if(duration < 3 && !JSMENU['timer'][menuid]) {
JSMENU['timer'][menuid] = setTimeout(function () {
hideMenu(menuid, mtype);
}, timeout);
}
};

ctrlObj.overfunc = typeof ctrlObj.onmouseover == 'function' ? ctrlObj.onmouseover : null;
ctrlObj.onmouseover = function(e) {
doane(e);
if(this.overfunc) this.overfunc();
if(evt == 'click') {
clearTimeout(JSMENU['timer'][menuid]);
JSMENU['timer'][menuid] = null;
} else {
for(var i in JSMENU['timer']) {
if(JSMENU['timer']) {
clearTimeout(JSMENU['timer']);
JSMENU['timer'] = null;
}
}
}
};
}
}

if(!menuObj.getAttribute('initialized')) {
menuObj.setAttribute('initialized', true);
menuObj.ctrlkey = ctrlid;
menuObj.mtype = mtype;
menuObj.layer = layer;
menuObj.cover = cover;
if(ctrlObj && ctrlObj.getAttribute('fwin')) {menuObj.scrolly = true;}
menuObj.style.position = 'absolute';
menuObj.style.zIndex = zindex + layer;
menuObj.onclick = function(e) {
return doane(e, 0, 1);
};
if(duration < 3) {
if(duration > 1) {
menuObj.onmouseover = function() {
clearTimeout(JSMENU['timer'][menuid]);
JSMENU['timer'][menuid] = null;
};
}
if(duration != 1) {
menuObj.onmouseout = function() {
JSMENU['timer'][menuid] = setTimeout(function () {
hideMenu(menuid, mtype);
}, timeout);
};
}
}
if(cover) {
var coverObj = document.createElement('div');
coverObj.id = menuid + '_cover';
coverObj.style.position = 'absolute';
coverObj.style.zIndex = menuObj.style.zIndex - 1;
coverObj.style.left = coverObj.style.top = '0px';
coverObj.style.width = '100%';
coverObj.style.height = Math.max(document.documentElement.clientHeight, document.body.offsetHeight) + 'px';
coverObj.style.backgroundColor = '#000';
coverObj.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=50)';
coverObj.style.opacity = 0.5;
coverObj.onclick = function () { hideMenu(); };
$('append_parent').appendChild(coverObj);
_attachEvent(window, 'load', function () {
coverObj.style.height = Math.max(document.documentElement.clientHeight, document.body.offsetHeight) + 'px';
}, document);
}
}
if(drag) {
dragobj.style.cursor = 'move';
dragobj.onmousedown = function(event) {try{dragMenu(menuObj, event, 1);}catch(e){}};
}

if(cover) $(menuid + '_cover').style.display = '';
if(fade) {
var O = 0;
var fadeIn = function(O) {
if(O > 100) {
clearTimeout(fadeInTimer);
return;
}
menuObj.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + O + ')';
menuObj.style.opacity = O / 100;
O += 20;
var fadeInTimer = setTimeout(function () {
fadeIn(O);
}, 40);
};
fadeIn(O);
menuObj.fade = true;
} else {
menuObj.fade = false;
}
menuObj.style.display = '';
if(ctrlObj && ctrlclass) {
ctrlObj.className += ' ' + ctrlclass;
menuObj.setAttribute('ctrlid', ctrlid);
menuObj.setAttribute('ctrlclass', ctrlclass);
}
if(pos != '*') {
setMenuPosition(showid, menuid, pos);
}
if(BROWSER.ie && BROWSER.ie < 7 && winhandlekey && $('fwin_' + winhandlekey)) {
$(menuid).style.left = (parseInt($(menuid).style.left) - parseInt($('fwin_' + winhandlekey).style.left)) + 'px';
$(menuid).style.top = (parseInt($(menuid).style.top) - parseInt($('fwin_' + winhandlekey).style.top)) + 'px';
}
if(maxh && menuObj.scrollHeight > maxh) {
menuObj.style.height = maxh + 'px';
if(BROWSER.opera) {
menuObj.style.overflow = 'auto';
} else {
menuObj.style.overflowY = 'auto';
}
}

if(!duration) {
setTimeout('hideMenu(\'' + menuid + '\', \'' + mtype + '\')', timeout);
}

if(!in_array(menuid, JSMENU['active'][layer])) JSMENU['active'][layer].push(menuid);
menuObj.cache = cache;
if(layer > JSMENU['layer']) {
JSMENU['layer'] = layer;
}
var hasshow = function(ele) {
while(ele.parentNode && ((typeof(ele['currentStyle']) === 'undefined') ? window.getComputedStyle(ele,null) : ele['currentStyle'])['display'] !== 'none') {
ele = ele.parentNode;
}
if(ele === document) {
return true;
} else {
return false;
}
};
if(!menuObj.getAttribute('disautofocus')) {
try{
var focused = false;
var tags = ['input', 'select', 'textarea', 'button', 'a'];
for(var i = 0; i < tags.length; i++) {
var _all = menuObj.getElementsByTagName(tags);
if(_all.length) {
for(j = 0; j < _all.length; j++) {
if((!_all[j]['type'] || _all[j]['type'] != 'hidden') && hasshow(_all[j])) {
_all[j].className += ' hidefocus';
_all[j].focus();
focused = true;
var cobj = _all[j];
_attachEvent(_all[j], 'blur', function (){cobj.className = trim(cobj.className.replace(' hidefocus', ''));});
break;
}
}
}
if(focused) {
break;
}
}
if(!focused) {
menuObj.focus();
}
} catch (e) {

}
}

}

红色为X2.5增加的代码



删掉增加的代码即可解决这个问题,不知道是否会有后遗症

打开:static\js\common.js

删除 1046-1084 行的代码,然后更新后台缓存及本地浏览器缓存

楼主可以自己试试是删掉的哪部分js代码引起的,我就不测试了,全删反正可以解决问题

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

评分

1

查看全部评分

回复

使用道具 举报

 楼主| On_my_way 发表于 2012-9-30 16:10:12 | 显示全部楼层
这个BUG对于贴图较多的论坛而言,非常致命啊。
这体验让用户感觉很不好~
:'(:'(
回复

使用道具 举报

www.yaanidc.com 发表于 2012-9-30 16:10:14 | 显示全部楼层
这个问题待高人正解
回复

使用道具 举报

 楼主| On_my_way 发表于 2012-9-30 22:40:53 | 显示全部楼层
这个问题有人可以解决吗?
回复

使用道具 举报

 楼主| On_my_way 发表于 2012-10-1 11:18:50 | 显示全部楼层
求回应~{:soso_e109:}
回复

使用道具 举报

 楼主| On_my_way 发表于 2012-10-2 03:19:22 | 显示全部楼层
谢谢楼上的朋友,我把上述代码注释掉后,问题已经解决。

希望别出现什么大的后遗症。~

回复

使用道具 举报

64243354 发表于 2012-10-2 10:35:31 | 显示全部楼层
如已解決请按已解決
回复

使用道具 举报

html6 发表于 2012-10-21 16:11:21 | 显示全部楼层
本帖最后由 html6 于 2012-10-21 16:19 编辑
On_my_way 发表于 2012-9-30 16:10
这个BUG对于贴图较多的论坛而言,非常致命啊。
这体验让用户感觉很不好~

不是非常,是绝对致命呀,终于找到方法了,谢谢!但愿后续升级不要因为这个而出了问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-8-30 04:00 , Processed in 0.108219 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表