我对现有的视差库感到不满,所以我正在努力编写自己的视差库.我目前的课程包括三个主要课程:
ScrollDetector跟踪元素相对于屏幕的滚动位置; 它具有返回表示其当前位置的float的函数:
0 表示位于视口底部边缘的元素的上边缘1 表示位于视口顶部边缘的元素的下边缘ScrollAnimation使用ScrollDetector实例根据元素在另一个元素上插入任意CSS值ScrollDetector.ParallaxativeAnimationScrollAnimation针对背景图像的特殊情况进行扩展,该背景图像应以窗口滚动速度的精确因子滚动.我目前的情况是这样的:
ScrollAnimationS使用transform: translateY(x)工作进展顺利.ParallaxativeAnimation使用translateY(x)工作,但动画jerkily.ParallaxativeAnimation使用的translate3d(0, x, 0)是生涩,但不是那么糟糕.translate3d(0, x, 0),工作完全顺利.你可以在这支笔上看到比较.(jerkiness在Firefox中表现得最好.)我的图书馆在Bitbucket上.
我不知道我的图书馆里的问题在哪里,我不知道如何弄明白.这是一个精简的粘贴,在ScrollAnimation顺利滚动的课程中完成繁重的工作:
getCSSValue(set, scrollPosition) {
return set.valueFormat.replace(set.substitutionString, ((set.endValue - set.startValue) * scrollPosition + set.startValue).toString() + set.unit)
}
updateCSS() {
var cssValues = [];
var scrollPosition = this.scrollDetector.clampedRelativeScrollPosition();
var length = this.valueSets.length;
for(var i …Run Code Online (Sandbox Code Playgroud) 我正在学习Python,我正在处理Mutable Default Argument问题.
# BAD: if `a_list` is not passed in, the default will wrongly retain its contents between successive function calls
def bad_append(new_item, a_list=[]):
a_list.append(new_item)
return a_list
# GOOD: if `a_list` is not passed in, the default will always correctly be []
def good_append(new_item, a_list=None):
if a_list is None:
a_list = []
a_list.append(new_item)
return a_list
Run Code Online (Sandbox Code Playgroud)
我知道a_list只有在def第一次遇到语句时才初始化,这就是为什么后续调用bad_append使用相同的列表对象的原因.
我不明白的是为什么good_append有所不同.它看起来像a_list会仍然只初始化一次; 因此,该if语句仅在第一次调用函数时才为真,这意味着a_list只会[]在第一次调用时重置,这意味着它仍然会累积所有过去的new_item …
对于YouTube上的特定视频,您可以在任何iOS设备上访问http://youtube.com/watch?v=(code)以观看视频.
但是,如果您使用http://youtube.com/embed/(code)网址 - 例如,在网页上的iframe或Colorbox模式中 - 它将无法在iOS上播放.
例如,如果您使用这样的代码:
<iframe class="youtube-player" type="text/html" width="640" height="385" src="http://www.youtube.com/embed/VIDEO_ID" frameborder="0">
Run Code Online (Sandbox Code Playgroud)
你只看到一个错误:
您的浏览器目前无法识别任何可用的视频格式.点击此处访问有关HTML5视频的常见问题解答.
为了增加对伤害的侮辱,这个链接在iOS上无法点击,所以我不知道会去哪个页面.YouTube上有一个HTML5页面,但它没有说明任何特别有用或令人惊讶的内容.
是否有可用于iframe嵌入的语法在iOS上按预期工作?
说我有以下元素:
<p id="thingy">Here is some <em>emphasized</em> text!</p>
Run Code Online (Sandbox Code Playgroud)
在Javascript控制台中,我将使用jQuery获取其内容:
> var theContents = $('<p id="thingy">Here is some <em>emphasized</em> text!</p>').contents();
Run Code Online (Sandbox Code Playgroud)
theContents 现在是一个如下所示的数组:
> theContents
["Here is some ", <em>?emphasized?</em>?, " text!"]
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好; 它似乎是一个数组,其中元素0和2字符串,元素1是一个jQuery对象.如果我只输出第一个元素,它似乎证实了我的猜测:
> theContents[0]
"Here is some "
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试将其与另一个字符串连接起来,我会发现我缺乏一些理解:
> 'Hello! ' + contents[0];
"Hello! [object Text]"
Run Code Online (Sandbox Code Playgroud)
所以变量看起来像一个字符串,但它实际上是某种对象.就此而言,中间的jQuery对象也不会显示为常规对象; 它显示为原始标记.
另一个问题引用了同样的问题,但实际上没有解释它.我发现我可以contents[0].textContent用来解决我的真正问题,但这仍然无法帮助我理解这里到底发生了什么.有人可以向我详细解释为什么这一切都是这样的吗?
我正在使用SimpleXML.如果我的函数的用户输入无效,我的变量$x是一个空的SimpleXMLElement对象; 否则,它有一个人口稠密的财产$x->Station.我想查看是否Station存在.
private function parse_weather_xml() {
$x = $this->weather_xml;
if(!isset($x->Station)) {
return FALSE;
}
...
}
Run Code Online (Sandbox Code Playgroud)
这样做我想要的,除了它返回一个错误:
警告:WeatherData :: parse_weather_xml():WeatherData-> parse_weather_xml()中不再存在节点(vvdtn.inc的第183行).
好的,好isset()了.我们试试这个:
private function parse_weather_xml() {
$x = $this->weather_xml;
if(!property_exists($x, 'Station')) {
return FALSE;
}
...
}
Run Code Online (Sandbox Code Playgroud)
这几乎完全相同:
警告:property_exists():WeatherData-> parse_weather_xml()中不再存在节点(vvdtn.inc的第183行)
好吧,很好,我会把它变成一个例外而忽视它.我以前从未这样做过,我不确定我做得对,但我会试一试:
function crazy_error($errno, $errstr, $errfile, $errline) {
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
...
private function parse_weather_xml() {
set_error_handler('crazy_error');
$x = $this->weather_xml;
if(!property_exists($x, 'Station')) {
return FALSE;
}
restore_error_handler();
... …Run Code Online (Sandbox Code Playgroud) <p>???½?</p>
Run Code Online (Sandbox Code Playgroud)
它在Safari中呈现,看起来像预期的那样:

这是在Firefox中:

我非常需要Firefox看起来像Safari.到底发生了什么,我能做些什么呢?
编辑:请参阅下面的建议答案,以及它是如何不正确的.
Stack Overflow上有很多类似的问题,但没有一个像Python一样.我是编程新手,所以请放轻松.
我有一个嵌套字典树,如下所示:
[{'word': 'The',
'next': [{'word': 'End',
'next': None},
{'word': 'quick',
'next': [{'word': 'brown',
'next': [{'word': 'fox',
'next': None}]}]},
{'word': 'best',
'next': [{'word': 'of',
'next': [{'word': 'times',
'next': None}]}]}]}]
Run Code Online (Sandbox Code Playgroud)
我想从上到下展平所有路径并最终得到:
[[{'word': 'The'},
{'word': 'End'}],
[{'word': 'The'},
{'word': 'quick'},
{'word': 'brown'},
{'word': 'fox'}],
[{'word': 'The'},
{'word': 'best'},
{'word': 'of'},
{'word': 'times'}]]
Run Code Online (Sandbox Code Playgroud)
我做了一个可爱的小递归函数,它首先创建了原始结构,但我很难将其解除.这是我得到的:
def flatten_combinations(result_tree, current_combo = None, all_combos = None):
if current_combo is None:
current_combo = []
if all_combos is None:
all_combos = []
if result_tree is None: …Run Code Online (Sandbox Code Playgroud) 我有一个可以运行的实时网站,我确信它拥有每个文件的最新、正确版本,它不是用 Git 管理的。我还有一个 Bitbucket Git 存储库,表面上是用于该站点的,但其中存在重大问题和过时的内容。
我想做的git init是实时文件,然后以某种方式将它们推送到远程,以便最终的远程 HEAD 状态与我的实时文件的状态完全相同,而且远程提交历史记录保持不变。
我想这样做,以便实时工作树永远不会处于不同的状态。我想过创建一个新分支,远程拉动 master,然后强制合并它们或其他什么,但据我所知,我将不得不检查 master 分支并在那些短暂的时刻弄乱实时文件在合并之前和合并期间,假设一切正常。
我还想过通过 FTP 传输文件,在本地计算机上解决所有冲突/合并,然后从那里推送到 Bitbucket 并下拉到实时存储库。但这也让人感觉不可靠和冒险。
我知道我永远不应该像这样操作实时代码,但这是我陷入的情况,我只想以最简单/最安全的方式使其工作。
(我确定这是一个重复的问题,但我的 Google-fu 没有让我失望;在引导我查看以前的答案时请保持温和。)
在页面上,我有一张美国和加拿大的SVG地图,以及省和州的HTML列表.悬停在任何省份上,无论是列表中的名称还是地图上的描述,都应该使名称和描述变为不同的颜色.所有名称和路径都已经有了逻辑ID /类.
这是我的代码的小提琴.(这是一个可怕的程序混乱,所以请原谅我.)
jQuery的事件函数不适用于SVG,虽然我知道有一个jQuery插件可能会有所帮助,但我认为这将是一个很好的机会来使用比我习惯的更大比例的vanilla Javascript.
代码中最相关的部分是makeMapInteractiveJavascript第46到69行的函数:
function makeMapInteractive(provinces) {
for(var province in provinces) { // Iterate over every state/province code
var $HTMLtargets = $('ul.provinces li.' + province);
var $SVGtargets = $('path#{0}, g#{0} path'.format(province));
var $allTargets = $HTMLtargets.add($SVGtargets);
// I tried it first with $().each(); when that didn't work,
// I commented it out and tried without it. Neither one works.
/* $allTargets.each(function() {
this.addEventListener('mouseover', function(e) {
console.log(e);
$HTMLtargets.css('color', '#990000');
$SVGtargets.attr('fill', '#990000');
}, false)
}); */
for(var i …Run Code Online (Sandbox Code Playgroud) javascript ×3
html ×2
jquery ×2
python ×2
arguments ×1
arrays ×1
css ×1
dictionary ×1
dom ×1
drupal ×1
events ×1
firefox ×1
fonts ×1
function ×1
git ×1
git-push ×1
html5-video ×1
ios ×1
mutable ×1
object ×1
parallax ×1
performance ×1
php ×1
recursion ×1
scroll ×1
simplexml ×1
svg ×1
tree ×1
unicode ×1
xml ×1
youtube ×1