- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 jQuery 和 CSS3 创建一个内容 slider 。
This是我的代码。页面在 Chrome 中运行良好,在 Firefox 中几乎正常,在 IE 中正常运行(但几乎没有效果)。
但它在 iPad Safari 中不起作用...
当页面在 iPad Safari 中完成加载时,页面开始闪烁(持续,永远不会完成),然后浏览器崩溃!
但是我找不到my slider的哪一部分有问题,我不知道到底是什么问题...
抱歉,如果我的代码很乱,但我找不到问题所在,所以我不能做一个更简单的例子......
更新
我的代码有 window.resize
jQuery 事件,我在里面调用 CorrectPages()
。
我已将此代码放在该事件的第一行:alert("windowResize"+ window.innerWidth + ", "+ window.innerHeight);
在 PC 中,在我调整窗口大小之前没有警报。但在 iPad 中,警报在页面加载后开始。这些是 iPad 上的消息:
windowResize1767 , 1074
windowResise1767 , 2078
windowResize2099 , 4136
windowResize2099 , 8355
windowResize2099 , 17004
windowResize2099 , 34735
...
更新 2
正如 ahmadali 所说,现在我们解决了之前的问题。 This is my fixed code .但是现在,还有另一个问题:当页面加载时,Safari 告诉错误的 window.innerWidth
和 window.innerHeight
。
当页面加载时,它暂时看起来是正确的,但随后就发生了变化。这是片刻之后的结果:
你的想法是什么?
最佳答案
马赫迪
我无法发现任何明显的问题,但效率可能是个问题。大量改进是可能的。
这里有一些通用的提示:
beginX
、beginY
等放在 $(document).ready(function(){...})
闭包中.$("#d_page"+ i + "#overlay")
令人担忧。 ID 应该是唯一的,那么为什么不是 $("#overlay")
或 $("... .overlay")
?.eq()
和 .not()
做一些艰苦的工作。$pages = $(".page")
,那么 $("#d_page"+ i.toString())
应该简化为 $pages.eq (i)
。许多这种类型的表达式会简化。通过逐步改进,我设法将函数 correctPages()
从大约 170 多行减少到仅 26 行。
这就是我的结局:
function correctPages() {
var $pages = $(".page"),//relies on pages having class="page"
prefix = (isLandscape(window.innerWidth, window.innerHeight)) ? 'd_landscape_activepage_' : 'd_portrait_activepage_',
classes = ["whitebackground", prefix+"1", prefix+"2", prefix+"3", prefix+"4"].join(' '),
$np = [$pages.eq(currentPage), $pages.eq(nextPage(currentPage)), $pages.eq(nextPage(nextPage(currentPage))), $pages.eq(nextPage(nextPage(nextPage(currentPage))))];
$pages.removeClass(classes);
$pages.find(".overlay").css({top:0, opacity: 0.6});//relies on overlays having class="overlay"
$pages.not($np[0]).not($np[1]).not($np[2]).addClass(prefix+"1");
$pages.not($np[2]).removeClass(prefix+"5").addClass("transition");
$pages.eq(prevPage(currentPage)).addClass(prefix+"2");
$np[0].addClass(prefix+"3").find(".overlay").css("opacity", "0.1");
$np[1].addClass(prefix+"4");
$np[2].addClass(prefix+"5");
$np[isNext ? 2 : 3].removeClass("transition");
setTimeout(function() {
$np[2].addClass("transition");
}, 100);
$(".articlecontent").css("background", "rgba(250,250,250,0)");
$(".d_landscape_activepage_3 .articlecontent").css("background", "rgba(250,250,250,1)");
$(".d_portrait_activepage_3 .articlecontent").css("background", "rgba(250,250,250,1)");
correctDivs();
$("#d_pagefix").css("opacity", "0");
setTimeout(function() {
$np[0].find(".overlay").css("top", "10000px");
}, 400);
}
此代码未经测试,因此可能不是 100% 正确,但应该为您提供一些关于如何改进它的线索。
作为调整大小事件持续重新触发的解决方法,请尝试动态分离和重新附加调整大小处理程序。
替换:
$(window).resize(function() {
correctPages();
});
与;
function attachResizeHandler() {
$(window).on('resize', resizeHandler);
}
function resizeHandler() {
$(window).off('resize');
correctPages();
setTimeout(attachResizeHandler, 600);
}
我选择 600 毫秒是因为它比 correctPages 或 checkhash 代码中的最长超时时间稍长。根据触发不需要的调整大小事件的确切原因,您可能会少一些。
在代码的其他地方,替换 :
的所有实例`correctPages();`
与:
`resizeHandler();`
resizeHandler
的初始附加将在 checkhash();
在页面加载时调用时发生。
关于javascript - 页面在 Chrome、Firefox 和 IE 中运行良好,但在 iPad Safari 上会导致闪烁或崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11993993/
嗨,我正在考虑开发一种文件传输程序,想知道我是否想要尽可能好的加密,我应该使用什么? 我会用 C# 开发它,所以我可以访问 .net 库 :P在我的 usb 上有一个证书来访问服务器是没有问题的,如果
我创建的这个计算两个数组的交集是线性的方法的复杂度(在良好、平均、最差的情况下)? O(n) public void getInt(int[] a,int[] b){ int i=0; int
我已经能够使用 RTCPeerConnection.getStats() API 获得 WebRTC 音频调用的各种统计信息(抖动、RTT、丢包等)。 我需要将整体通话质量评为优秀、良好、一般或差。
基本问题: 如果我正在讲述/修改数据,我应该通过索引硬编码索引访问文件的元素,即 targetFile.getElement(5);通过硬编码标识符(内部翻译成索引),即 target.getElem
在 Linux 上,我想知道要调用什么“C”API 来获取每个 CPU 的统计信息。 我知道并且可以从我的应用程序中读取 /proc/loadavg,但这是系统范围的负载平均值,而不是每个 CPU 的
在客户端浏览器中使用 fetch api,GET 或 POST 没有问题,但 fetch 和 DELETE 有问题。它似乎将 DELETE 请求方法更改为 OPTIONS。 大多数研究表明是一个cor
我是一名优秀的程序员,十分优秀!