silverlight图片局部放大效果

很多购物平台中(比如京东购物),浏览产品详情时都有这种效果,前几天看到有朋友问SL能不能实现,当然可以 

 

界面:

1.左侧小图片(用一个矩形Fill一张图片即可)
2.左侧半透明矩形
3.右侧大图片(用一个Canvas设置Clip裁剪可视区域作为蒙板,图片放置在Canvas中即可)

 

原理:

获取左侧半透明矩形的相对位置,然后动态调整右侧大图的Canvas.Left与Canvas.Top

 

需要知道以下技术点:
1.Clip的应用
2.如何拖动对象
3.拖动时的边界检测
4.动态调整对象的Canvas.Left与Canvas.Top属性

 

尺寸要点:

1.右侧大图可视区域与左侧半透明矩形的“长宽比例”应该相同
2.“图片原始尺寸长度比” 应该 “与左侧小图片长度比”相同
3.图片原始大小/左侧小图大小 = 右侧可视区域大小/半透明矩形大小

 

关键代码:

代码:by 菩提树下的杨过 http://www.cnblogs.com/yjmyzz

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

namespace PartMagnifier
{
    public partial class MainPage : UserControl
    {
        bool trackingMouseMove = false;
        Point mousePosition;

        public MainPage()
        {
            // 为初始化变量所必需
            InitializeComponent();

        }

        private void LayoutRoot_Loaded(object sender, System.Windows.RoutedEventArgs e)
        {
            Adjust();
        }

        private void Rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            FrameworkElement element = sender as FrameworkElement;
            mousePosition = e.GetPosition(element);
            trackingMouseMove = true;
            if (null != element)
            {
                element.CaptureMouse();
                element.Cursor = Cursors.Hand;
            }
            Adjust();
            Debug();
            sb.Begin();//标题动画,可去掉
        }

        private void Rectangle_MouseMove(object sender, MouseEventArgs e)
        {
            FrameworkElement element = sender as FrameworkElement;
            if (trackingMouseMove)
            {
                double deltaV = e.GetPosition(element).Y - mousePosition.Y;
                double deltaH = e.GetPosition(element).X - mousePosition.X;
                double newTop = deltaV + (double)element.GetValue(Canvas.TopProperty);
                double newLeft = deltaH + (double)element.GetValue(Canvas.LeftProperty);
                if (newLeft <= 10)
                {
                    newLeft = 10;
                }
                if (newLeft >= 130)
                {
                    newLeft = 130;
                }
                if (newTop <= 10) { newTop = 10; }
                if (newTop >= 85) { newTop = 85; }
                element.SetValue(Canvas.TopProperty, newTop);
                element.SetValue(Canvas.LeftProperty, newLeft);
                mousePosition = e.GetPosition(element);
                Adjust();
                if (mousePosition.X <= 0 || mousePosition.Y <= 0) { return; }
                Debug();
            }
        }

        private void Rectangle_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            FrameworkElement element = sender as FrameworkElement;
            trackingMouseMove = false;
            element.ReleaseMouseCapture();
            mousePosition.X = mousePosition.Y = 0;
            element.Cursor = null;
        }

        /// <summary>
        /// 调试信息
        /// </summary>
        void Debug()
        {
            txtResult.Text = "鼠标相对坐标:" + mousePosition.ToString() + "\n小框left:" + rect.GetValue(Canvas.LeftProperty) + ",小框top:" + rect.GetValue(Canvas.TopProperty) + "\n大图left:" + ((double)img.GetValue(Canvas.LeftProperty)).ToString("F0") + ",大图right:" + ((double)img.GetValue(Canvas.TopProperty)).ToString("F0");
        }

        /// <summary>
        /// 调整右侧大图的位置
        /// </summary>
        void Adjust()
        {
            
            double n = cBig.Width / rect.Width;
            double left = (double)rect.GetValue(Canvas.LeftProperty) - 10;
            double top = (double)rect.GetValue(Canvas.TopProperty) - 10;
            double newLeft = -left * n;
            double newTop = -top * n;
            img.SetValue(Canvas.LeftProperty, newLeft);
            img.SetValue(Canvas.TopProperty, newTop);
        }

    }
}

 

 

 

时间: 2024-11-27 18:57:57

silverlight图片局部放大效果的相关文章

silverlight:DeepZoom版的图片局部放大效果

先上演示地址: http://images.24city.com/jimmy/DeepZoom/  步骤:1.先启动PhotoShop,利用自动等分切片功能把图片等分成若干小图片,并导出,参考下图: 2.启动Deep Zoom Composer a.新建项目,并用Add Image...导入刚才等分好的小图片 b.切换到compose面板,把小图片拖出来,并调整位置最终拼成完整的图片 c.切换到Export面板,导出 基本上,到这一步就已经可以成功在本机播放了,但是如果直接上传到互联网上,会发现

Silverlight图片公告栏正式版

上星期贴出了个Silverlight图片公告控件,当时只是初步的实现了效果.今天抽空将它功能完善了并 推出正式版. 正式版加入了切换图片动画效果,读取xml文件不再依赖WebService,数字按钮响应功能修正.这次重 写了大部分代码,Silverlight的结构也做出了修改,并且对程序进行了"瘦身",或许细心的人也发现 了上次版本中,实现的功能只是很简单可是文件却有300k,经过"瘦身"后Silverlight程序只有8k了. 制作所需工具 Visual Stud

ImageZoom 图片放大效果

这个效果也叫放大镜效果,最早好像在ppg出现的,之后就有了很多仿制品出来了. 一般用于放大查看商品图片,在凡客,京东商城,阿里巴巴等都有类似的效果. 好处是能在原图附近对图片进行局部放大查看,而且可以通过鼠标控制查看的部位. 前一阵子看到sohighthesky的图片放大效果,心血来潮自己也写一个看看. 这个程序有以下特点: 1,支持使用原图放大或新图片设置大图: 2,大图完成载入前使用原图放大代替,减少操作等待时间: 3,支持鼠标滚动缩放大图: 4,可以通过设置显示范围或显示框大小设置显示尺寸

cloudgamer出品ImageZoom 图片放大效果_图象特效

一般用于放大查看商品图片,在凡客,京东商城,阿里巴巴等都有类似的效果. 好处是能在原图附近对图片进行局部放大查看,而且可以通过鼠标控制查看的部位. 前一阵子看到sohighthesky的图片放大效果,心血来潮自己也写一个看看. 这个程序有以下特点: 1,支持使用原图放大或新图片设置大图: 2,大图完成载入前使用原图放大代替,减少操作等待时间: 3,支持鼠标滚动缩放大图: 4,可以通过设置显示范围或显示框大小设置显示尺寸: 5,可以设置是否自动隐藏显示框: 6,支持插件形式的扩展来实现更多的功能(

ImageZoom 图片放大效果(扩展篇)

上一篇ImageZoom 已经对图片放大效果做了详细的分析,这次在ImageZoom的基础上进行扩展,实现更多的效果. 主要扩展了原图和显示框的展示模式,有以下几种模式: "follow" 跟随模式:显示框能跟随鼠标移动的效果: "handle" 拖柄模式:原图上有一个拖柄来标记显示范围: "cropper" 切割模式:原图用不透明的来标记显示范围,其他部分用半透明显示: "handle-cropper" 拖柄切割模式:拖柄模

jQuery实例教程:jQuery网页图片切换效果

文章简介:假设你有一组作品,你想不用转跳到另外一个页面就可以显示多个图片,你可以将JPG图片载入到目标元素中去.下面是jQuery图片切换效果示例. 假设你有一组作品,你想不用转跳到另外一个页面就可以显示多个图片,你可以将JPG图片载入到目标元素中去.下面是jQuery图片切换效果示例: 该示例的核心jQuery代码: $(document).ready(function() { $("h2").append("<em></em>") $(&

PPT图片切换效果研究PPT图片切换效果研究

有很多朋友都会问PPT里有大量的图片,那么如何才更好的去展示呢?我个人觉得方法有很多,而且要分清楚你的PPT所要应用的场合,那么今天借用<PPT图片切换效果研究>一文来讲解一下PPT图片切换的新思路. 现在进入正题,了解iPhone的朋友都知道其图片的浏览切换效果是非常出色的,不了解的或者没有iPhone的同志可以和我一样泪奔一下.好啦好啦,接着说,PPT中也经常会有连续图片的展示我们不妨来模拟一下iPhone的图片切换效果,虽然只用了切入切出的效果,是非常非常简单的效果,但一定会给你的PPT

jQuery+CSS制作的图片展示效果

jQuery+CSS的图片展示效果,可以拖动图片,兼容浏览器,可以做成个人相册或者作品展示 摆放效果 点击效果 Dome Download

CSS3网页制作实例教程:网页图片遮罩效果

文章简介:巧用CSS3 border制作图片遮罩效果. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta