Php:从文件夹中的图片中创建数组,并交替显示它们
php: make array from pictures in a folder and display them interchangeably?
下面的代码应该使用php从以.png结尾的目录中找到的图片创建一个数组,然后允许按钮更改数组上的指针,并允许页面显示指针所在的当前图片。这似乎根本不起作用。我这样做对吗?
<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
img {float:left; }
</style>
</head>
<body>
<?PHP
$pages = array ();
$dirname = "assets/pictures/";
$images = glob($dirname."*.png");
foreach($images as $image) {
$pages[] = $image;
}
?>
<?PHP
echo '<img src="'.current($pages).'" class="photo"/>';
function shownext() {
$mode = next($pages);
}
function showprev() {
$mode = prev($pages);
}
function showfirst() {
$mode = reset($pages);
}
function showlast() {
$mode = end($pages);
}
?>
<a href="" onclick="showfirst()">first</a>
<a href="" onclick="showprev()">previous</a>
<a href="" onclick="shownext()">next</a>
<a href="" onclick="showlast()">last</a>
</body>
</html>
onclick
将允许您调用javascript函数,而您的showprev
…showlast
函数均为php函数。它们在javascript的作用域中不可用。
同样,在你的php代码中:
- 您在
$pages[] = $image
之后关闭循环,我认为您打算显示(打印/回显)所有图像。 - 你不需要一个循环复制
$pages
到$images
。你可以很容易地复制它:$pages = $images
. - 你应该意识到
current
只在循环中有意义,你在循环关闭后调用它。
我认为,你混淆了服务器端(即php)和客户端(即javascript)的执行环境。
onclick,用于触发javascript函数
您不能直接将php functions
放在onclick=""
事件上。或者,如果您想使用jQuery,您可以使用$.ajax
在PHP上请求值。在获得映像路径之后,在客户端操作next, prev, first, last
。考虑这个例子:
<?php
if(isset($_POST['getimages'])) {
$dirname = "assets/pictures/";
$images = glob($dirname."*.png");
// collect the images
foreach($images as $image) {
$pages[] = $image;
}
echo json_encode($pages);
exit;
}
?>
<img src="" alt="" id="images" width="200" height="200" />
<br/>
<a href="#" class="navigate" id="first">First</a>
<a href="#" class="navigate" id="previous">Previous</a>
<a href="#" class="navigate" id="next">Next</a>
<a href="#" class="navigate" id="last">Last</a>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var current_pointer = 0;
var images = [];
$.ajax({
url: 'index.php', // call the php file that will process it, i just used this in the same page
type: 'POST',
dataType: 'JSON',
data: {getimages: true},
success: function(response) {
// after a successful response from PHP
// use that data and create your own array in javascript
images = response;
$('#images').attr('src', images[current_pointer]);
}
});
// simple pointer to navigate the array you got from PHP
$('a.navigate').on('click', function(){
var current_val = $(this).attr('id');
switch(current_val) {
case 'first':
current_pointer = 0;
break;
case 'last':
current_pointer = images.length-1;
break;
case 'next':
current_pointer = (current_pointer >= images.length-1) ? images.length-1 : current_pointer+1;
break;
case 'previous':
current_pointer = (current_pointer < 0) ? 0 : current_pointer-1;
break;
}
$('#images').attr('src', images[current_pointer]);
});
});
</script>
问题是echo '<img src="'.current($pages).'" class="photo"/>';
无论之后更改$pages
的频率如何,它都会被回显一次。你也不能用JavaScript的onclick调用PHP函数。
PHP将在服务器端生成页面!在一个完全加载的页面上,大多数与用户的交互都是通过JavaScript完成的。
要实现您想要的结果,您必须将数组导出到JavaScript并通过JavaScript更改图像src,稍微研究一下将有助于您。
相关文章:
- json数组显示在<李>使用angular js
- AngularJS错误处理:根据错误数组显示错误
- 在 MVC3 中将字节数组显示为图像
- Highcharts使用数组显示每个气泡点的附加信息
- 如何使用数组显示文本
- 对于数组 {{显示项目}} 中的每个项目
- 将 PHP 数组显示为动画
- 如何将多维数组显示为表格
- MongoDb - 具有空值的有界数组显示无界
- 如何在谷歌地图中使用地址数组显示信息窗口和折线
- 如何从查询中将json数组显示为重复区域
- 根据布尔数组显示或隐藏jQuery元素
- 初学者javascript;for循环,对象数组显示为未定义
- JavaScript数组显示10个图像,然后显示下一个10个
- JS数组显示不正确
- Meteor:如何在html页面上使用光标数组显示列表
- Javascript发布数组显示语法错误
- PHP数组到JavaScript数组显示[object,object]
- 如何使用数组显示循环中的文本
- Javascript数组显示