我已安装并运行jssor滑块。我试图添加使用php从外部文件更改幻灯片类型的功能。在我未经编辑的jssor代码中,如果我输入以下内容作为幻灯片类型,它们将按预期工作:
{$Duration:800,$Opacity:2},
{$Duration:1000,y:1,$Easing:$Jease$.$InBounce,$Opacity:2}
当我尝试从函数加载时,如下面的代码所示,控制台命令的输出为
0: "{$Duration:800,$Opacity:2},"
1: "{$Duration:1000,y:1,$Easing:$Jease$.$InBounce,$Opacity:2}"
如果我去除引号并将其放在_SlideshowTransitions函数中,它们将起作用。引号引起了问题吗?如果是这样,我该如何删除那些?还是jssor函数不能与变量一起使用?或者是其他东西?
function GetTransitions() {
$xsisitons = array();
$xsisitons[] = '{$Duration:800,$Opacity:2},';
$xsisitons[] = '{$Duration:1000,y:1,$Easing:$Jease$.$InBounce,$Opacity:2}';
return json_encode($xsisitons);
}
$jsondata = GetTransitions();
<script>
var xsitions = <?php echo $jsondata; ?>;
console.dir(xsitions);
var _SlideshowTransitions = [
xsitions
];
</script>
答案 0 :(得分:2)
您想要的不是正确的json,因此json_encode
对您没有帮助。但是,相反,您可以自己构建js字符串。
$xsisitons[] = '{$Duration:800,$Opacity:2}';
$xsisitons[] = '{$Duration:1000,y:1,$Easing:$Jease$.$InBounce,$Opacity:2}';
return '[' . join(',', $xsisitons) . ']';
答案 1 :(得分:2)
直接创建JS:
<?php
function GetTransitions() {
return $rawJS = '[
{
$Duration: 800,
$Opacity: 2
},
{
$Duration: 1000,
y: 1,
$Easing: $Jease$.$InBounce,
$Opacity: 2
}
]';
}
$options = GetTransitions();
?>
<script>
var xsitions = <?php echo $options; ?>;
console.dir(xsitions);
var _SlideshowTransitions = xsitions;
</script>
此行阻止您使用json_encode
:
$Easing: $Jease$.$InBounce,
json_encode
会将$Jease$.$InBounce
视为字符串而不是JS代码,从而阻止其按预期运行。
这使GetTransitions
极其危险,新的变量名rawJS
暗示了这一点。确保注意该函数的输出。
通过在构建$Duration
字符串时将输入变量强制转换为int或转义动态变量,可以在PHP中安全地使$Opacity
,y
和$rawJS
动态化json_encode
的值(而不是整个字符串):
function GetTransitions($duration_1, $duration_2, $opacity, $y) {
return $rawJS = '[
{
$Duration: ' . (int)$duration_1 . ',
$Opacity: ' . (int)$opacity . '
},
{
$Duration: ' . (int)$duration_2 . ',
y: ' . (int)$y . ',
$Easing: $Jease$.$InBounce,
$Opacity: ' . (int)$opacity . '
}
]';
}