Анимированный скрол страницы с помощью jQuery на элемент с id

myal — id элемента.
100 — скорость прокрутки

    <script>
        $(document).ready(function() {
            $('html,body').animate({
                scrollTop: $("#myal").offset().top
            }, 100);
        });
    </script>

Кроссдоменный ajax запрос методом POST [ Cross domain Ajax POST query]

Сразу скажу, что использовать будем curl.
Суть проста: Отправляем данные на локальный скрипт, который принимает переменную и с помощью curl отправляет их на другой сервер. Получает ответ и выдает его в локальный скрипт.

index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
            <script type="text/javascript" src="jquery.js"></script>
                <script type="text/javascript">
                var ajax_url = 'http://newdomain.com/ajax.php';
                $(document).ready(function(){
                    $('#link').click(function(){

                        $.post
                        (
                        "proxy.php",
                        {
                            msg: 'wer',
                            target_id: 'sdf'
                        },
                        function(data) {
                          alert(data);
                        });
                    });
                });
            </script>

    </head>
    <body>
        <a href="#" id="link">post cross domain query</a>
    </body>
</html>

Локальный файл, так называемый proxy.php

<?

$url = $_POST['url'];
unset($_POST['url']);

$fields_string = "";

foreach ($_POST as $key => $value)
{
    $fields_string .= $key . '=' . $value . '&';
}
rtrim($fields_string, '&');

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, count($_POST));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);

$result = curl_exec($ch);

curl_close($ch);
?>

Ну и файл на удаленном сервере ajax.php

<?php

error_reporting(0);

header("Content-type: text/plain; charset=utf-8");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Connection: close");
//print_r($_POST);
if (!count($_POST))
    die('ERR');
$data = array ();
foreach ($_POST as $k => $v)
    $data[] = $k . '=' . $v;
echo implode('&', $data) . "\nHI from " . $_SERVER['SERVER_NAME'] . '!';
exit;
?>

http://vazelin.org.ua/wp-content/plugins/downloads-manager/img/icons/winrar.gif download: ajax-cross-domain (16.60KB)
added: 16/02/2012
clicks: 35
description:

Multiupload + jquery sort. (Мульти-аплоад изображений и последующая их сортировка и удаление)

Сегодня поделюсь своей наработкой по загрузке изображений и последующей сортировке.

Для загрузки есть готовое решение: http://www.uploadify.com/demos/

Вот с помощью неё мы и организовали загрузку, но с маленькими ухищрениями, они нужны были для моих целей.

index.php — основной рабочий файл.


<link href="/uploadify/uploadify.css" type="text/css" rel="stylesheet" />
<script type="text/javascript" src="/uploadify/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="/uploadify/swfobject.js"></script>
<script type="text/javascript" src="/uploadify/jquery.uploadify.v2.1.4.min.js"></script>

<script type="text/javascript">
 $(function() {
 $.post
 (
 "show_gall.php",
 {
 id : '2'
 },
 function(data) {
 $('#picasso').html(data);
 }
 );

 $('#custom_file_upload').uploadify({
 'uploader'       : '/uploadify/uploadify.swf',
 'script'         : '/uploadify/uploadify.php?id=2',
 'cancelImg'      : '/uploadify/cancel.png',
 'folder'         : '/uploads',
 'multi'          : true,
 'auto'           : true,
 'fileExt'        : '*.jpg;*.gif;',
 'fileDesc'       : 'Image Files (.JPG, .GIF)',
 'queueID'        : 'custom-queue',
 'removeCompleted': true,
 'onSelectOnce'   : function(event,data) {
 $('#status-message').text(data.filesSelected + ' files have been added to the queue.');
 },
 'onAllComplete'  : function(event,data) {
 $.post
 (
 "show_gall.php",
 {
 id : 2
 },
 function(data) {
 $('#picasso').html(data);
 }
 );
 }
});                });

function del(id){
 if (id > 0){
 $.post
 (
 "del_img.php",
 {
 id : id
 },
 function(data) {
 $.post
 (
 "show_gall.php",
 {
 id : '2'
 },
 function(data) {
 $('#picasso').html(data);
 }
 );
 }
 );
 }
 }

</script>

 <style type="text/css">
 #custom-demo .uploadifyQueueItem {
 background-color: #FFFFFF;
 border: none;
 border-bottom: 1px solid #E5E5E5;
 font: 11px Verdana, Geneva, sans-serif;
 height: 50px;
 margin-top: 0;
 padding: 10px;
 width: 350px;
}
#custom-demo .uploadifyError {
 background-color: #FDE5DD !important;
 border: none !important;
 border-bottom: 1px solid #FBCBBC !important;
}
#custom-demo .uploadifyQueueItem .cancel {
 float: right;
}
#custom-demo .uploadifyQueue .completed {
 color: #C5C5C5;
}
#custom-demo .uploadifyProgress {
 background-color: #E5E5E5;
 margin-top: 10px;
 width: 100%;
}
#custom-demo .uploadifyProgressBar {
 background-color: #0099FF;
 height: 3px;
 width: 1px;
}
#custom-demo #custom-queue {
 border: 1px solid #E5E5E5;
 height: 213px;
margin-bottom: 10px;
 width: 370px;
}                </style>
 <div>
 <div id="status-message">Select some files to upload:</div>
<div id="custom-queue"></div>
<input id="custom_file_upload" type="file" name="Filedata" />        </div>

 </div>
 </div>
<div id="picasso">s</div>

В функциях jQuery код, который получает данные из базы о фотках повторяется. Нужно этот код вывести в отдельную функцию.
Теперь, про параметр id: В примере он принимает статическое значение, но на практике оно будет меняться динамически. Это нужно, чтобы фотографии можно было привязать к различным страницам.

Информацию о порядке отображения изображений я буду хранить в базе данных.

CREATE TABLE IF NOT EXISTS `img` (
 `id` int(255) NOT NULL AUTO_INCREMENT,
 `pic` varchar(255) NOT NULL,
 `pr` int(10) NOT NULL,
 `parent_id` int(255) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=21 ;

Теперь займемся настройкой файла загрузки изображения.
uploadify/uploadify.php


<?php

if (!empty($_FILES)) {
 require '../config/db.php';

 $tempFile = $_FILES['Filedata']['tmp_name'];

$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/'.$_GET['id'].'/';
 $targetFile =  str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];

 mkdir(str_replace('//','/',$targetPath), 0755, true);

 move_uploaded_file($tempFile,$targetFile);
 $q = "insert into img set
 pic = '".$_FILES['Filedata']['name']."',
 parent_id = '".intval($_GET['id'])."',
 pr = '0'";
 mysql_query($q);
 echo str_replace($_SERVER['DOCUMENT_ROOT'],'',$targetFile);

}
?>

С помощью id мы разделяем фотографии с различных страниц в различные папки. Можно вставить еще кроп изображений, проверку на наличие — всё это по вашему вкусу.

Теперь перейдём к отображению и сортировке изображений:

show_gall.php


<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"></script>

<!--[if IE]>
 <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<style>
 article, aside, figure, footer, header, hgroup,
 menu, nav, section { display: block; }

 #sortable { list-style-type: none; margin: 0; padding: 0; }
 #sortable li { margin: 3px 3px 0 0; padding: 1px; float: left; width: 55px; height: 55px;  text-align: center; }
 #sortable li img {padding:1px; border:1px solid #ccc; cursor: pointer; width:50px; height:50px;}

 .ui-state-default, .ui-widget-content .ui-state-default{border:none; background:none;}

 .clear {clear:both;}

</style>

 <div id="reorder-gallery">
 <ul id="sortable">
 <?
 require_once 'config/db.php';
 $id = (int) $_POST['id'];
 $q = "Select * from img where parent_id = '".$id."' order by pr ";

 $r = mysql_query($q);
 while ($row = mysql_fetch_array($r)){
 echo '<li id="'.$row['id'].'"><img src="uploads/'.$row['parent_id'].'/'.$row['pic'].'"/><a href="javascript:;" onClick="del('.$row['id'].');">x</a></li>';
 }
 ?>
 </ul>
 <div></div>
<script>var imgOrder = '';

$(function() {
 $("#sortable").sortable({
 update: function(event, ui) {
 imgOrder = $("#sortable").sortable('toArray').toString();
 $.post
 (
 "update.php",
 {
 c : imgOrder
 },
 function(data) {

 }
 );
 }
 });
 $("#sortable").disableSelection();

});

$(document).ready(function(){
 $("#btnshoworder").click(function(){
 alert(imgOrder);
 });
});

</script>

Сортировка выполняется с помощью функции jQuery UI sortable(), дальше выполняется обновление в базе порядка сортировки.

http://vazelin.org.ua/wp-content/plugins/downloads-manager/img/icons/default.gif download: sortable_multiupload (231.47KB)
added: 09/11/2010
clicks: 362
description: Мультиаплоад и сортировка изображений на лету.

Автоматическое использование LightBox

Столкнулся с задачей, в которой нужно всем изображениям задать Lightbox при клике на него.

Дело в том, что автоматически можно это сделать для изображений с тегом <a>, но в этом случае и все текстовые ссылки в блоке с картинками будут пониматься как картинка.

Предлагаю немного исправленный .js файл лайтбокса с помощью которого можно использовать лайтбокс только к изображениям.

Вызов лайтбокса:


<script type="text/javascript">
 $(function() {
 $('.content img').lightBox();
 });
 </script>

Отмечу, что все изображения и текст должны лежать в такой дивке:

<div class="content">
    <img src="my_image.gif" alt="" />
</div>

В архиве библиотека лайтбокса.

http://vazelin.org.ua/wp-content/plugins/downloads-manager/img/icons/default.gif download: jquery.lightbox-0.5_achive_to_tag_img.rar (5.11KB)
added: 05/10/2010
clicks: 146
description:

Пример можно посмотреть на этой странице: http://hermes.uds.kiev.ua/view_news/reklamnyj_tur_na_maldivskie_ostrova./
Единственное, что не нравиться, так это то, что картинка, которая будет отображаться в лайтбоксе будет такого же размера, что и на самой странице. При желании, можно дописать .js файл на использование для изображения в лайтбоксе альтернативного пути.

jCrop — создание миниатюр изображения с помощью перетаскивания мышки

Сегодня хочу выложить у себя в блоге полезный плагин, который даёт возможность из изображения выделить желаемую область и создать из неё маленькую картинку.

Встречаем — jCrop!

Сайт разработчика и демо: http://deepliquid.com/projects/Jcrop/demos.php?demo=thumbnail

А у меня в планах, сделать автоматическое сохранение изображения с помощью Аякса.

jCarusel — если перестала работать прокрутка

Случалось у вас так, что в некоторый момент времени jCarusel перестала прокручивать изображения и просто стоит на одном месте?

Решение простое — нужно увеличить ширину (высоту если вертикальная карусель).

причина — если суммарная ширина картинок больше чем указана ширина контейнера карусели, то скрипт работать не будет.